1,hibernate.cfg.xml常用配置
2,session简介
3,transaction简介
4,session详解
5,对象关系映射常用配置
hibernate.cfg.xml常用配置
show_sql:是否把运行时候的sql语句输出到控制台,以便测试。
format_sql:输出到控制台的sql是否排版,便于阅读
hbm2dd.auto;可以帮助java生成数据库脚本,生成具体表结构。create|update|create-drop|validate
default_schema:默认数据库
dialect:配置数据库方言。
session简介
hibernate的执行过程:
Configuration-创建-SessionFactory-创建-Session(类似JDBC中的connecttion,获取了Session,相当于获取了一个连接)--执行-save|delete|update|get
--commit(提交事务)--session.close()(关闭连接)-- 结束
不建议通过JDBC操作数据库,而是session操作。
session可以理解操作数据库的对象。
session与JDBC中的connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。
把对象保存在关系数据库中要调用session的各种方法,如:save(),update(),delete(),createQuery()等。
transaction简介(事务)
hibernate对数据的操作都是封装在事务中,并且默认是非自动提交的,所以用session保存对象时候,如果不开启事务,并且提交事务,对象并不会真正保存到数据库。
如果你想让hibernate像JDBC那样自动提交事务,必须调用session对象的doWork()方法,获取jdbc的connection后,设置其为自动提交事务(不推荐)
import java.sql.Connection;import java.sql.SQLException;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.jdbc.Work;import org.hibernate.service.ServiceRegistry;import org.junit.After;import org.junit.Before;import org.junit.Test;//测试类public class StudentsTest { ???????private SessionFactory sessionFactory; ???private Session session; ???private Transaction transaction; ???@Before ???public void init() ???{ ???????//创建配置对象 ???????Configuration config=new Configuration().configure(); ???????config.addClass(Students.class);//这个需要加上(视频里面没有) ???????//创建服务注册对象。 ???????ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder() ???????????????.applySettings(config.getProperties()).build(); //通过config.getProperties()读取配置文档。 ???????//创建会话工厂对象 ???????sessionFactory=config.buildSessionFactory(serviceRegistry); ???????//创建会话对象 ???????session=sessionFactory.openSession(); ???????//开启事务 ???// ???transaction=session.beginTransaction(); ???} ???@After ???public void destory() ???{ ???// ???transaction.commit();//提交事务 ???????session.close();//关闭会话 ???????sessionFactory.close();//关闭会话工厂 ???} ???????@Test ???public void testSaveStudents() ???{ ???????//生成学生对象 ???????Students s=new Students(1,"张三丰","男",new Date(),"武当山");
//下面使用了匿名函数 ???????session.doWork(new Work() ???????????{ ???????????????@Override ???????????????public void execute(Connection connection) throws SQLException { ???????????????????connection.setAutoCommit(true); ???????????????????????????????????????} ???????????}); ???????session.save(s);//保存对象进入数据库 ???}}
07-hibernate进阶
原文地址:http://www.cnblogs.com/alsf/p/7820379.html