Hibernate配置文件与关联映射介绍
以用户评论模块为例分三部分介绍Hibernate。
第一部分:评论模块的java文件;
第二部分:与Comment.java关联的hibernate配置文件,其中包括了对xxx.hbm.xml类型配置文件的详细介绍,和对many-to-one关联映射的介绍;
第三部分:Hibernate全局配置文件hibernate.cfg.xml,其中包括了对全局配置文件hibernate.cfg.xml的详细介绍。
1. 实体类,Comment.java文件
public class Comment { private Integer id; private Task task;// 所属任务 private User user;// 评论人 private String content;// 评论内容 private String commentTime;// 评论时间 //省略getter和setter函数 }
2. 与Comment.java关联的hibernate配置文件:Comment.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="admin.po"> <!--name为实体类的包名+类名,如admin.po.Comment,但上已指定包,此处只需写类名Comment,table为数据库的表名--> <class name="Comment" table="comment"> <!-- <id>:定义了该属性到数据库表主键字段的映射。 name="id":标识实体类的属性的名字; column="id":表数据库主键字段的名字,如果不填写与name一样; --> <id name="id" column="id" > <!--主键的生成策略 native可以适应多种数据库 increment mysql自动增长策略 sequence oracle自动增长策略 --> <generator class="native"></generator> </id> <!-- <property>:为类定义一个持久化的javaBean风格的属性。 name="content":标识属性的名字,以小写字母开头; column="content":表主键字段的名字,如果不填写与name一样; type="java.lang.String":属性的类型 not-null="false":属性是否为空,为true时表示非空,默认为false length="500":属性字段的长度限制 -> <property name="content" column="content" type="java.lang.String" not-null="false" length="500"></property> <property name="commentTime" column="commentTime" type="java.lang.String" not-null="false" ></property> <!-- <many-to-one>:多对一关系映射,此处comment为多,user为一 根据需求,查看评论时需知评论的用户,而查询用户时不需要知道评论,所以, 要在Comment.hbm.xml中配置many-to-one,而不需要在User.hbm.xml中配置one-to-many name="user":java映射类中对应的属性名,指出many一方的类用哪个属性和one一方的类关联 column="user_id":表中对应字段,指出many一方的类对应的数据表用哪个列和one一方的类对应的数据表关联(两表之间存在外键关联) class="admin.po.User":关联的类的名字(可选 - 默认是通过反射得到属性类型) not-null="false" lazy="false":可选,默认为proxy,指单点关联是经过代理的; lazy="true" 指定此属性应该在实例变量第一次被访问时应该延迟抓取; lazy="false" 指定此关联总是被预先抓取 --> <many-to-one name="user" column="user_id" class="admin.po.User" not-null="false" lazy="false"></many-to-one> <many-to-one name="task" column="task_id" class="admin.po.Task" not-null="false" lazy="false"></many-to-one> </class> </hibernate-mapping>
3. Hibernate全局配置文件,文件名默认为hibernate.cfg.xml
<!--标准的XML文件的起始行,version="1.0"表明XML的版本,encoding="UTF-8"表明XML文件的编码方式--> <?xml version="1.0" encoding="UTF-8"?> <!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。 hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件--> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!--声明Hibernate配置文件的开始--> <hibernate-configuration> <!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对Session的操作--> <session-factory> <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序--> <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property> <!--设置数据库的连接url:jdbc:mysql://localhost/hibernate,其中localhost:3306表示mysql服务器名称,此处为本机,hibernate是数据库名--> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property> <!--连接数据库是用户名--> <property name="hibernate.connection.username">ssh</property> <!--连接数据库是密码--> <property name="hibernate.connection.password">ssh</property> <!-- 最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> <!-- 最小连接数 --> <property name="hibernate.c3p0.min_size">5</property> <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 --> <property name="hibernate.c3p0.timeout">120</property> <!-- 最大的PreparedStatement的数量 --> <property name="hibernate.c3p0.max_statements">100</property> <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒--> <property name="hibernate.c3p0.idle_test_period">120</property> <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --> <property name="hibernate.c3p0.acquire_increment">2</property> <!-- 每次都验证连接是否可用 --> <property name="hibernate.c3p0.validate">true</property> <!--hibernate.dialect 指的是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器--> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> <!--显示Hibernate持久化操作所生成的SQL--> <property name="hibernate.show_sql">true</property> <!--根据需要自动创建数据表--> <property name="hibernate.hbm2ddl.auto">update</property> <!--罗列所有持久化类的类名--> <mapping class="com.jialin.entity.User"/> </session-factory> </hibernate-configuration>