﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-代码工-随笔分类-ssh1.2_2.0_3.1</title><link>http://www.blogjava.net/jianyue/category/33819.html</link><description>砌代码</description><language>zh-cn</language><lastBuildDate>Wed, 01 Oct 2008 04:35:08 GMT</lastBuildDate><pubDate>Wed, 01 Oct 2008 04:35:08 GMT</pubDate><ttl>60</ttl><item><title>hibernate简单入门介绍</title><link>http://www.blogjava.net/jianyue/archive/2008/10/01/hibernate.html</link><dc:creator>Qzi</dc:creator><author>Qzi</author><pubDate>Wed, 01 Oct 2008 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/jianyue/archive/2008/10/01/hibernate.html</guid><wfw:comment>http://www.blogjava.net/jianyue/comments/231952.html</wfw:comment><comments>http://www.blogjava.net/jianyue/archive/2008/10/01/hibernate.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jianyue/comments/commentRss/231952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jianyue/services/trackbacks/231952.html</trackback:ping><description><![CDATA[<p>一.继承关系和关联聚集关系映射<br />
1.整个类层次使用一张表<br />
2.每个叶结点使用一张表,该表保存了该类自己的和所继承的所有属性<br />
3.每个类使用一张表,该表只保存OID以及对应类自己的属性（不含所继承的属性）</p>
<p>1.&#8220;1对1&#8221;或&#8220;1对多&#8221;关系的映射,简单地利用外键即可<br />
2.&#8220;多对多&#8221;关系的映射,引入一个新的表，专门记录这种&#8220;多对多&#8221;关系</p>
<p>二.编程步骤:事前准备包括建立一个project并且加入外部库<br />
新建一个Project HibernateSample，然后在Project上点右键，选择Properties  Java Build Path  Libraries。选择Add External JARs，然后将Hibernate目录下的hibernate3.jar，以及Hibernate目录下的lib文件夹中所有的jar文件添加进来。<br />
另外我们还必须有MySQL的JDBC驱动，用上面的办法同样把mysql-connector-java-3.1.12-bin.jar添加进我们的Build Path中。</p>
<p>1.创建数据库(例如User表)<br />
2.建立对应数据库的类的属性与操作(例如User类)<br />
3.编写映射数据库表hibernate mapping,命名为***.hbm.xml(例如User.hbm.xml)<br />
&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;<br />
&lt;hibernate-mapping&gt;<br />
&nbsp;&lt;class name="sample.User" table="user"&gt;<br />
&nbsp;&nbsp;&lt;id name="id" column="id" type="java.lang.Integer"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="native" /&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;<br />
&nbsp;&nbsp;&lt;property name="name" column="name" type="java.lang.String" /&gt;<br />
&nbsp;&nbsp;&lt;property name="age" column="age" type="java.lang.Integer" /&gt;<br />
&nbsp;&lt;/class&gt;<br />
&lt;/hibernate-mapping&gt;<br />
明显可见关注点包括<br />
A)class中包中的类与数据库中table的对应<br />
B)property中 类中ID和属性与table中字段的对应</p>
<p>4.编写Hibernate配置文件hibernate configurarion file,通常命名:<br />
&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;<br />
&lt;hibernate-configuration&gt;<br />
&nbsp;&lt;session-factory&gt;<br />
&nbsp;&nbsp;&lt;!-- 是否显示实际操作数据库时的SQL --&gt;<br />
&nbsp;&nbsp;&lt;property name="show_sql"&gt;true&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;!-- SQL方言，这边设定的是MySQL --&gt;<br />
&nbsp;&nbsp;&lt;property name="dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;!-- JDBC驱动程序 --&gt;<br />
&nbsp;&nbsp;&lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;!-- JDBC URL --&gt;<br />
&nbsp;&nbsp;&lt;property name="connection.url"&gt;jdbc:mysql://localhost/Sample&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;!-- 数据库用户名 --&gt;<br />
&nbsp;&nbsp;&lt;property name="connection.username"&gt;root&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;!-- 数据库密码 --&gt; <br />
&nbsp;&nbsp;&lt;property name="connection.password"&gt;123456&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;!-- 以下设置对象与数据库表格映像文件 --&gt;<br />
&nbsp;&nbsp;&lt;mapping resource="sample/User.hbm.xml"/&gt;<br />
&nbsp;&lt;/session-factory&gt;<br />
&lt;/hibernate-configuration&gt;<br />
关注点包括:<br />
A)数据库路径, 数据库用户名, 数据库密码, <br />
B)还有就是指定数据库映射文件mapping resource</p>
<p>5.配置log4j.properties<br />
在src目录下点右键，选择import，然后选择General  File System，接着选择Hibernate文件夹下的etc文件夹，再选择log4j.properties文件，最后选择Finish。<br />
关键配置文件:<br />
hbm是映射配置<br />
cfg是密码,用户,以及hbm指定配置<br />
properties是用于配置当前数据库连接的属性配置</p>
<p>6.编程操作数据库过程<br />
使用对象增加数据项:<br />
A)Configuration配置Configuration config = new Configuration().configure();<br />
B)Session工厂获得SessionFactory sessionFactory = config.buildSessionFactory();<br />
C)Session获得Session session = sessionFactory.openSession();<br />
D)Transaction事务启动Transaction tx = session.beginTransaction();<br />
E)建立映射数据的实体类(例如User的一个实例)<br />
F)session操作(例如session.save(user)插入到数据库一个user的对象)<br />
G)关键的Transaction事务提交,tx.commit();<br />
H)清理包括Transaction对象,session对象,sessionFactory对象的有顺序清理</p>
<p>使用Criteria查询数据<br />
A)配置Configuration,SessionFactory,Session与上面相同<br />
B)创建Criteria criteria=session.createCriteria(User.class);<br />
C)创建User列表List users = criteria.list();<br />
D)使用迭代器Iterator iterator = users.iterator();<br />
E)iterator.hasNext(),iterator.next()的使用<br />
F)criteria.add(Expression.eq("name","hibernateUser2"));加上查询约束<br />
G)users = criteria.list();将会按照查询约束得到列表.</p>
<p>使用鼓励的HQL的Query查询<br />
A)创建Query例如Query query = session.createQuery("from User");<br />
B)获得数据List uers = query.list();<br />
C)遍历器使用Iterator iterator = users.iterator();又如iterator.hasNext();和iterator.next();<br />
D)使用过滤查询<br />
query = session.createQuery("from User user where user.name like ?");<br />
query.setParameter(0, "hibernateUser2");Query的setParameter()方法第一个参数是指定 ? 出现的位置，从 0 开始，第二个参数则是设定查询条件。<br />
然后再List uers = query.list();获得的将是满足username==hibernateUser2的条件的结果<br />
E)清除session和sessionFactory使用close方法.</p>
<br />
<a title="hibernate_rar" style="font-size: 18pt" href="/Files/jianyue/hibernate.rar"><strong>hibernate_rar</strong></a>
<img src ="http://www.blogjava.net/jianyue/aggbug/231952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jianyue/" target="_blank">Qzi</a> 2008-10-01 09:49 <a href="http://www.blogjava.net/jianyue/archive/2008/10/01/hibernate.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts1.2 Spring2.0 Hibernate3.1 MyEclipse整合可能的包冲突</title><link>http://www.blogjava.net/jianyue/archive/2008/08/28/225246.html</link><dc:creator>Qzi</dc:creator><author>Qzi</author><pubDate>Thu, 28 Aug 2008 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/jianyue/archive/2008/08/28/225246.html</guid><wfw:comment>http://www.blogjava.net/jianyue/comments/225246.html</wfw:comment><comments>http://www.blogjava.net/jianyue/archive/2008/08/28/225246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jianyue/comments/commentRss/225246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jianyue/services/trackbacks/225246.html</trackback:ping><description><![CDATA[1：配置文件applicationContext.xml问题<br />
&nbsp;&nbsp;&nbsp; org.springframework.orm.hibernate3.HibernateTransactionManager 与&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.orm.hibernate3.LocalSessionFactoryBean出现问题.<br />
&nbsp;&nbsp;&nbsp; 解决方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;这两个出现红色的小x其实是与三大框架集成的时候，包冲突有关，首先删除asm-2.2.3.jar 然后加入<br />
&nbsp;&nbsp;&nbsp;&nbsp;spring-hibernate3.jar，commons-pool.jar，commons-dbcp.jar包，上述的问题解决！<br />
<br />
2：asm包问题<br />
&nbsp;&nbsp;&nbsp;&nbsp;spring与hibernate的冲突.两个框架都依赖asm.jar包spring的版本是asm-2.23.jar.hibernate依赖的是asm.jar&nbsp;<br />
&nbsp;&nbsp;&nbsp; 方法1：只删除asm-2.23.jar包<br />
&nbsp;&nbsp;&nbsp;&nbsp;方法2：所有asm开头的jar包，和一个cglib-2.1.3.jar都删除，上网下载一个最新的asm-all-3.0.jar加进去<br />
两种方法都试一下，有些人方法1行，方法2不行，有些人相反。<br />
<br />
3：使用MeEclipse的时候，可能的警告：<br />
<span class="hilite1">java</span>.<span class="hilite2">lang</span>.NoClassDefFoundError: <span class="hilite4">org</span>/<span class="hilite5">objectweb</span>/<span class="hilite6">asm</span>/Code<span class="hilite8">Visit</span>or<br />
CGLIB Enhancement failed<br />
解决方案：
<div class="postText">
<div>在使用Spring的AOP编程时，会用到这几个lib：<br />
<span class="hilite6">asm</span>-2.2.2.jar<br />
<span class="hilite6">asm</span>-commons-2.2.2.jar<br />
<span class="hilite6">asm</span>-util-2.2.2.jar</div>
<div>Hibernate使用如下lib：</div>
<div><span class="hilite6">asm</span>.jar<br />
<span class="hilite6">asm</span>-attrs.jar</div>
<div>其中<span class="hilite6">asm</span>-2.2.2.jar与<span class="hilite6">asm</span>.jar存在类上的冲突！！！<br />
使用其中之一或两者都使用，可能会出现如下错误：<br />
<span class="hilite1">java</span>.<span class="hilite2">lang</span>.NoClassDefFoundError: <span class="hilite4">org</span>/<span class="hilite5">objectweb</span>/<span class="hilite6">asm</span>/Code<span class="hilite8">Visit</span>or<br />
<span class="hilite1">java</span>.<span class="hilite2">lang</span>.NoClassDefFoundError: <span class="hilite4">org</span>/<span class="hilite5">objectweb</span>/<span class="hilite6">asm</span>/commons/Empty<span class="hilite8">Visit</span>or<br />
<span class="hilite1">java</span>.<span class="hilite2">lang</span>.<span class="hilite3">NoSuchMethodError:</span> <span class="hilite4">org</span>.<span class="hilite5">objectweb</span>.<span class="hilite6">asm</span>.<span class="hilite7">ClassVisitor</span>.<span class="hilite8">visit</span>。。。。。。<br />
解决办法是：<br />
1.去掉类路径上的关于Hibernate的3个lib<br />
<span class="hilite6">asm</span>.jar<br />
<span class="hilite6">asm</span>-attrs.jar<br />
cglib-2.1.3.jar<br />
2.加入Spring中的以下4个lib<br />
<span class="hilite6">asm</span>-2.2.2.jar<br />
<span class="hilite6">asm</span>-commons-2.2.2.jar<br />
<span class="hilite6">asm</span>-util-2.2.2.jar<br />
cglib-nodep-2.1_3.jar<br />
</div>
</div>
<br />
3：注意以上的删包要确保tomcat服务器里面的包也被删了，否则有残留的时候，测试出错。<br />
所以在框架集成时经常遇到，包冲突与少包问题，大家注意一下！哈哈！ <br />
<br />
<img src ="http://www.blogjava.net/jianyue/aggbug/225246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jianyue/" target="_blank">Qzi</a> 2008-08-28 12:12 <a href="http://www.blogjava.net/jianyue/archive/2008/08/28/225246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>