Hibernate的配置和测试

来源:互联网 发布:淘宝限时秒杀软件 编辑:程序博客网 时间:2024/06/05 20:19

一、Hibernate的配置

(1)首先我们要从网上下载到hibernate的包,在里面的lib包下面找到required包下面所有的jar文件复制到我们项目下面的lib文件夹下。
(2)hibernate需要在src下面增加hibernate.cfg.xml,这个里面配置数据库的连接信息。此配置信息如下:
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- JDBC数据库连接信息 --><property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property><property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=test</property><property name="connection.username">test</property><property name="connection.password">test</property><!-- 数据库的方言 --><property name="dialect">org.hibernate.dialect.SQLServerDialect</property><!-- 配置是否显示SQL --><property name="show_sql">true</property><!-- 配置是否自动创建或修改表结构 --><property name="hbm2ddl.auto">update</property><!-- 配置PO 上面是采用映射文件 下面是采用注解方式--><mapping resource="hiberate/model/Student.hbm.xml" /><mapping class="hibernate.model.Person"/></session-factory></hibernate-configuration>


(3)如果是采用写入映射文件的方式,则需要在实体类的同一个包下面包含映射文件,如Person.hbm.xml对应于Person类的映射:
<?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><!-- 用来描述一个持久化类,name是类的全名 table 可以不写  默认值和类名一样  catalog  数据库的名称  一般不写 --><class name="hibernate.Person"><!-- 标示属性  和数据库中的主键对应 name是属性的名称 column是列的名称--><id name="pid" column="pid" length="200" type="java.lang.Long"><!-- 主键的产生器 告诉hibernate容器用什么样的方式产生主键 --><generator class="increment"></generator></id><!-- 描述一般属性--><property name="pname" column="pname" length="20" type="string"></property><property name="psex" column="psex" length="10" type="java.lang.String"></property></class></hibernate-mapping>

(4)如果是采用注解方式来完成和数据库之间的映射,则直接在所在的实体类中用注解的方式进行映射。如下:
@Entity@Table(name="person")public class Person {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;@Columnprivate String name;@Columnprivate Date birth;// List集合注解@ElementCollection(targetClass=String.class)  // 指定集合元素的类型@CollectionTable(name="school"  // 表名,joinColumns=@JoinColumn(name="person_id", nullable=false)  // 关联字段)@Column(name="school_name")@OrderColumn(name="order_level")private List<String> schools = new ArrayList<String>();// Map注解@ElementCollection(targetClass=Integer.class)  // 指定Map中Value的类型@CollectionTable(name="school_map"  // 表名,joinColumns=@JoinColumn(name="person_id", nullable=false)  // 关联字段)@MapKeyColumn(name="school_name")  // 对应Map的Key字段名@MapKeyClass(String.class)// Map中Key的类型@Column(name="qty")  // Map中Value的字段名private Map<String, Integer> schools = new HashMap<String, Integer>();//下面是set和get方法

(5)下面是dao层的编写,首先是HibernateUtil类的编写,然后是用dao层的实现类来继承这个类实现查插删改各种功能:
package hibernateUtil;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;public class HibernateUtil{public static SessionFactory sessionFactory;static{//取配置信息,自动读取配置文件Configuration configuration=new Configuration();configuration.configure();//创建服务注册对象ServiceRegistry  serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.ge<span style="white-space:pre"></span>tProperties()).buildServiceRegistry();//获取会话工厂对象sessionFactory =configuration.buildSessionFactory(serviceRegistry);}}

(6)下面是测试是否成功连接数据库,示例代码如下:
package test;import hibernateUtil.HibernateUtil;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import entity.Person;public class hibernateTest extends HibernateUtils{@Testpublic void testInsert() {Session session=sessionFactory.openSession();//打开sessionTransaction transaction=session.beginTransaction();//开启事务Person person=new Person();Person.setName("hello");Person.setSex("男");session.save(person);//person对象临时状态转为持久化状态transaction.commit();//事务提交session.close();//session关闭,person对象持久化状态转为脱管状态}}

7)测试成功后,我们解释一下第六步中的几种状态。画图简单表示一下如下:




0 0
原创粉丝点击