最近在看尚学堂王勇老师讲的ssh部分,感觉很不错,在此感谢王勇老师。为了加深自己对hibernate的认识特作此笔记。
在学习hibernate的过程中首先感觉它的配置更多了应用也更加灵活了。
1、首先是hibernate.cfg.xml配置
在这个文件里面可以配置多个数据库(当然我没有应用过),下面的就是mysql数据库的配置内容:
<session-factory >
<!--选择数据库驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--列出数据库所在的位置-->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_first</property>
<!--用户名-->
<property name="hibernate.connection.username">root</property>
<!--密码-->
<property name="hibernate.connection.password">rain</property>
<!--选择适配器,这样hibernate就会自己将hql转化为不同数据库对于的方言(sql)-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/dne/hibernate/User.hbm.xml"/>
</session-factory>
2、其次再看ORMaping
ORMaping其实就是将实体映射为数据库中的表
每个<class/>标签对应一个实体类
<id name="id">
<generator class="uuid"/>
</id>
<id>标签对应是表的主键,generator 是设置主键的生成策略,其中常用的生成策略有uuid、native、assign三种,其中uuid是hibernate自己生成的一个字符串,native可以自动匹配不同的数据库来生产主键,assign是手动分配。
<property name="name" column="user_name"/> cloumn是设置表的列名,如不显示设置则和name的名称相同。
3、工具类
在hibernate的应用中主要有三个工具类
(1)CreateDB.java,此类是根据配置文件映射生成表
package com.dne.managedb;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class CreateDB {
/**
* @author 刘景玉
* @createTime 2008-11-3
*/
public static void main(String[] args) {
//读取hibernate.cfg.xml 文件
Configuration cfg=new Configuration().configure();
//根据配置文件创建表
SchemaExport schemaExport=new SchemaExport(cfg);
schemaExport.create(true, true);
}
}
(2)HibernateUtils.java
由于SessionFactory的创建是比较耗时的因此在应用中一般只创建一次,又因为SessionFactory是线程安全的,估可以放心使用
package com.dne.managedb;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* @author liujy
* @create time 2008-11-3
*/
public class HibernateUtils {
private static SessionFactory sessionFactory;
static {
try {
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
public static void CloseSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
(3)Junit 测试类 它需要继承 TestCase
因为hibernate的测试不需要任何容器,并且是便于移植的,因此hibernate是轻量级的。
下面是测试类的主要方法体
public void testUser(){
Session session=null;
try{
//获取session
session=HibernateUtils.getSession();
//开启事务
session.beginTransaction();
User user=new User();
user.setCreateTime(new Date());
user.setExpireTime(new Date());
user.setName("刘景玉");
session.save(user);
//提交事务
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
//出现异常回滚事务
session.getTransaction().rollback();
}finally{
//关闭session
HibernateUtils.CloseSession(session);
}
}
在学习hibernate的过程中首先感觉它的配置更多了应用也更加灵活了。
1、首先是hibernate.cfg.xml配置
在这个文件里面可以配置多个数据库(当然我没有应用过),下面的就是mysql数据库的配置内容:
<session-factory >
<!--选择数据库驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--列出数据库所在的位置-->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_first</property>
<!--用户名-->
<property name="hibernate.connection.username">root</property>
<!--密码-->
<property name="hibernate.connection.password">rain</property>
<!--选择适配器,这样hibernate就会自己将hql转化为不同数据库对于的方言(sql)-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/dne/hibernate/User.hbm.xml"/>
</session-factory>
2、其次再看ORMaping
ORMaping其实就是将实体映射为数据库中的表
每个<class/>标签对应一个实体类
<id name="id">
<generator class="uuid"/>
</id>
<id>标签对应是表的主键,generator 是设置主键的生成策略,其中常用的生成策略有uuid、native、assign三种,其中uuid是hibernate自己生成的一个字符串,native可以自动匹配不同的数据库来生产主键,assign是手动分配。
<property name="name" column="user_name"/> cloumn是设置表的列名,如不显示设置则和name的名称相同。
3、工具类
在hibernate的应用中主要有三个工具类
(1)CreateDB.java,此类是根据配置文件映射生成表
package com.dne.managedb;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class CreateDB {
/**
* @author 刘景玉
* @createTime 2008-11-3
*/
public static void main(String[] args) {
//读取hibernate.cfg.xml 文件
Configuration cfg=new Configuration().configure();
//根据配置文件创建表
SchemaExport schemaExport=new SchemaExport(cfg);
schemaExport.create(true, true);
}
}
(2)HibernateUtils.java
由于SessionFactory的创建是比较耗时的因此在应用中一般只创建一次,又因为SessionFactory是线程安全的,估可以放心使用
package com.dne.managedb;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* @author liujy
* @create time 2008-11-3
*/
public class HibernateUtils {
private static SessionFactory sessionFactory;
static {
try {
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
public static void CloseSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
(3)Junit 测试类 它需要继承 TestCase
因为hibernate的测试不需要任何容器,并且是便于移植的,因此hibernate是轻量级的。
下面是测试类的主要方法体
public void testUser(){
Session session=null;
try{
//获取session
session=HibernateUtils.getSession();
//开启事务
session.beginTransaction();
User user=new User();
user.setCreateTime(new Date());
user.setExpireTime(new Date());
user.setName("刘景玉");
session.save(user);
//提交事务
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
//出现异常回滚事务
session.getTransaction().rollback();
}finally{
//关闭session
HibernateUtils.CloseSession(session);
}
}