07-hibernate进阶

Posted 美好的明天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07-hibernate进阶相关的知识,希望对你有一定的参考价值。

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进阶的主要内容,如果未能解决你的问题,请参考以下文章

Atom编辑器入门到精通 Atom使用进阶

我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段

我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

Atom编辑器入门到精通 Atom使用进阶