hibernate框架中的crud

1、什么是crud?

        crud代表了save、update、get、delete;也就是所谓的添加、修改、查找、删除。主要被用在描述软件系统中DataBase或者持久层的基本操作功能。

2、如何理解crud?

        修改时,实际上是修改hibernate中的对象状态。

3、 在hibernate中    对象有三种状态:

                (1)、瞬时状态:一个实体对象,既没有id,也没有和session绑定。

                (2)、游离状态:一个实体对象,有id,但是没有和session绑定。

                (3)、持久状态:一个实体对象,有id也和session绑定。


实际上,session的四种方法就是在改变实体对象在hibernate中的对象状态。

4、持久化对象的特点:

        任何对象的变化都会自动同步到数据库中。

        hibernate提供了一个savaOrUpdate的方法,这个方法自动识别对象的状态,实际开发中不去思考对象的实际状态,直接调用该方法。

5、crud操作总结  

Configuration :加载hibernate的配置文件。

SessionFactory:会话工厂,在实际的程序也只存在一个对象。

Session:用来操作数据库的会话对象,产生事务对象

Transaction:事务控制对象

      Session方法

           BeginTransaction()  开始事务

           Save()

           saveOrUpdate()

           delete()

           update()

           get()/load();

           Query q = createQuery()

           q.list()

           //session.createSQLQuery(arg0)

Query:执行数据库的查询操作,负责执行HQL语句

具体代码奉上:(注:此代码只是测试代码,还需要配置hibernate和实体类以及数据库的建立。有兴趣可以查看我博客项目搭建)

        

package cn.hd.test;

import cn.hd.MyUtils.HibernateUtils;
import cn.hd.bean.Student;
import cn.hd.bean.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class Demo {

    public static void main(String[] args) {
        /*读取配置文件 .configure()自动读取cfg.xml文件*/
        Configuration configuration = new Configuration().configure();
        /*获得sessionFactory对象,自动生成表,读取数据库信息,检查数据表是否更新
        * 这个对象我们用它只用来获取session
        * 实际上这行代码   它检查了数据库和实体类
        * 如果有变化它会更新
        * 非常耗费资源    解决方案:(封装工具类)
        * */
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        /*使用sessionFactory获得session对象*/
        Session session = sessionFactory.openSession();
        /*开启事务
        * hibernate 必须开启事务
        * 不开启事务不会将数据保存到数据库
        * */
        Transaction transaction = session.beginTransaction();
        /*向数据表中插入一条数据*/
        /*User user = new User();
        user.setName("张三");
        user.setPsd("38383838");*/
        Student student = new Student();
        student.setName("张三");
        student.setDenger("男");
        /*添加、保存方法*/
        session.save(student);
        /*提交事务*/
        transaction.commit();
        /*关闭资源*/
        session.close();
        sessionFactory.close();
    }
    /*演示    session的crud方法*/
    @Test
    public void get(){
        //get   查找  只能通过主键来查找
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        /*通过主键查询单条数据*/
        Student student = session.get(Student.class,1);
        System.out.println(student);

        transaction.commit();
        session.close();
        sessionFactory.close();
    }
    @Test
    public void del(){
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        /*两种方法:*/
        /*1.先调用个get 获取id 再通过delete*/
        Student student = session.get(Student.class,1);
        if (student != null) {
            session.delete(student);
        }
        /*2.手动设置id*/
        /*Student student1 = new Student();
        student1.setSid(2);
        session.delete(student1);*/

        transaction.commit();
        session.close();
        sessionFactory.close();
    }
    @Test
    public void upd(){
        Session session = HibernateUtils.getOpenSession();
        Transaction transaction = session.beginTransaction();

        Student student = new Student();
        student.setSid(2);
        student.setName("狗崽");
        student.setDenger("nv");
        if (student != null) {
            session.update(student);
        }
        /*添加或修改*/
        //session.saveOrUpdate(student);
        transaction.commit();
        HibernateUtils.close(session);
    }
}

        查看代码的时候不难发现,我的增加方法与其他方法不一样,查询、删除一样,但是和修改又不一样。

          这里,简单解释一下,写增加方法是用的是普通的main方法,但是在测试这种不同功能的代码时就显得非常麻烦,所以我就运用了Junit测试类,这样就可以分别运行不同的代码块了,使得测试代码时更加方便,然后就是查询、删除和修改了,由于代码的重用,这样就产生了大量的重复代码,所以就封装了一个工具类。节省代码的同时也节省了资源。

        具体代码奉上:

            

package cn.hd.MyUtils;

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

public class HibernateUtils {
    private static Configuration configuration = null;
    private static SessionFactory sessionFactory = null;
    private HibernateUtils(){}
    static {
        configuration = new Configuration().configure();
        sessionFactory = configuration.buildSessionFactory();
    }
    public static SessionFactory getSessionFactory(){
        return sessionFactory;
    }
    public static Session getOpenSession(){
        return sessionFactory.openSession();
    }
    public static void close(Session session){
        session.close();
    }
}



  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值