一、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; @Column private String name; @Column private 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{ @Test public void testInsert() { Session session=sessionFactory.openSession();//打开session Transaction transaction=session.beginTransaction();//开启事务 Person person=new Person(); Person.setName("hello"); Person.setSex("男"); session.save(person);//person对象临时状态转为持久化状态 transaction.commit();//事务提交 session.close();//session关闭,person对象持久化状态转为脱管状态 } }
(7)测试成功后,我们解释一下第六步中的几种状态。画图简单表示一下如下: