Java-Hibernate框架(一)续

171 阅读2分钟

四、Session常用接口演示及Hibernate框架使用步骤

第一步:编写hibernate工具类

\package HibernatenateUtils;

import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;

public class hibernateUtils { public static Session getSession(){ `

1.加载主配置文件
        Configuration configuration = new Configuration().configure();

2.建造Session工厂
        SessionFactory    sessfactory = configuration.buildSessionFactory();

3.获取Session,这个对象中提供了一套增删改查的方法
        Session    session = sessfactory.openSession();

        return session;
    }

第二步:编写实体类

第三步:进行数据库操作(此处只对Session相关常用操作进行注释)

import java.io.Serializable;
import org.hibernate.Session;
import com.hibernatetest.entity.User;
import HibernatenateUtils.hibernateUtils;

public class SessionTest {
    public static void main(String[] args) {
        Session    session = hibernateUtils.getSession();
        
        //4.数据库操作
        /*save()            添加
         *Update()            修改
         *saveOrUpdate()    添加或修改
         *createQuery()        创建Query查询对象
         *delete()            删除
         *get()                根据id查询,获取对象(立即加载,不管有没有访问对象,都会生成对应的SQL语句并执行)
         *load()            根据id查询,获取对象(延迟加载,只有当访问对象的时候,才生成对应的SQL语句并执行)
         *flush()            清理session缓存,在事务提交和session关闭时都会自动执行flush()
         *beginTransaction()开启事务
         * */
        //(4 - 1)save添加操作
        User user1 = new User(null,"lisi");
        Serializable save = session.save(user1);//将对象添加到数据库中作为表的一条记录,返回的是一个主键值
        //注意:此处我hibernate.cfg.xml设置的事务自动提交为true
        //        事务自动提交默认为false,可在hibernate.cfg.xml中修改,
        //                            也可通过session.beginTracsation()开启事务和session2.getTransaction().commit();//提交事务 
        //        如果事务自动提交为false,此时数据并未同步到数据库中
        //           如果事务自动提交为true,此时数据便已经同步到数据库中
        System.out.println(save);
        
        
        //(4 - 2)Update修改操作
        session.beginTransaction();//开启事务
        User user2 = session.get(User.class, 5);//先从数据库中取出数据
        user2.setUname("zhangsan");//再修改数据,此处不能修改设置了主键自增长的id.
        session.update(user2);//最后再把数据放回去
        session.getTransaction().commit();//提交事务
        
        //(4 - 3)delete删除操作
        //注意:使用delete操作必须保证删除对象在数据库中,如果数据库中没有则会报错:
        //Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1;
        session.beginTransaction();//开启事务
        User user3 = new User(null,null);
        user3.setUid(21);
        session.delete(user3);
        session.flush();
        session.getTransaction().commit();//提交事务
        
        //(4 - 4)saveOrUpdate删除操作:如果对象中主键不为null(并且这个主键的值在数据库中存在)做修改操作,如果为null做添加操作
        //注意:如果对象中的主键在数据库中不存在,会报错:
        //Error during managed flush [Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1]
        session.beginTransaction();//开启事务
        User user4 = new User(17,"zhangsan");
        session.saveOrUpdate(user4);
        User user5 = new User(null,"zhangsan");
        session.saveOrUpdate(user5);
        session.getTransaction().commit();//提交事务
        
        //5.释放Session
        session.close();//如果事务自动提交为false,此时session缓存中的数据会自动同步到数据库中,之后会自动调用flush清空缓存。
    }
}