1.什么是Hibernate?
hibernate 是一个对象关系映射框架(ORM:),用于对象与关系数据库表记录的转换,封装了JDBC,通过xml或者注解方式来实现java POJO与数据库表的映射,使得程序员可以用面向对象的思维操作数据库。
2.为什么使用Hibernate?
(1)它封装了JDBC;
(2)ORM;
(3)hibernate有自己的一级缓存和二级缓存,一级缓存是session级别的,二级缓存可以配合其他的如memcache等的缓存框架,可以快速读取数据;
当然也可以不适用hibernate,去使用mybatis咯,在项目中多应用一下mybatis再来说二者的区别。
3.怎么使用Hibernate?
(1).pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hibernate.version>4.3.8.Final</hibernate.version>
</properties>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
(2)配置hibernate.cfg.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mytest</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">XXX</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/iuniversal/model/CrUser.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
(3)创建数据库表cr_user
CREATE TABLE cr_user(
`cuserid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`usercode` VARCHAR(10) NOT NULL,
`username` VARCHAR(20) NOT NULL,
PRIMARY KEY (`cuserid`) USING BTREE,
)
(4)创建model类:
public class CrUser implements java.io.Serializable{
private Integer id;
private String code;
private String name;
//提供默认的构造方法
public CrUser(){
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
(5)创建映射文件CrUser.hbm.xml,CrUser类同包,注意文件名命名规则,内容如下:
<?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>
<class name="com.iuniversal.model.CrUser" table="cr_user" catalog="iuniversal">
<id name="id" type="java.lang.Integer">
<column name="cuserid" />
<generator class="identity" />
</id>
<!-- 映射CrUser类中的code属性 -->
<property name="code" type="string">
<column name="usercode" length="10" not-null="true" unique="true" />
</property>
<property name="name" type="string">
<column name="username" length="20" not-null="true" unique="true" />
</property>
</class>
</hibernate-mapping>
(6)创建hibernate启动类:
public class HibernateUtil extends Object{
private static SessionFactory sessionFactory;
static
{
try{
Configuration configuration=new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
}catch (Throwable ex){
throw new ExceptionInInitializerError(ex);
}
}
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() throws HibernateException
{
Session session = (Session) threadLocal.get();
if (session == null){
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session != null)
session.close();
threadLocal.set(null);
}
public static void shutdown(){
getSessionFactory().close();
}
}
(7)写一个简单的测试类:
public class HibernateTest {
public static void main( String[] args )
{
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try{
CrUser crUser = new CrUser();
crUser.setCode("123");
crUser.setName("hibernate demo");
session.save(crUser);//这里操作的是java对象
tx.commit();
System.out.println("保存成功!");
}catch(Exception e){
e.printStackTrace();
tx.rollback();
System.out.println("保存失败!");
}finally{
HibernateUtil.closeSession();
}
}
}
通过上述步骤,查询cr_user表,发现数据插入成功。