博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate03增删改查
阅读量:5945 次
发布时间:2019-06-19

本文共 5015 字,大约阅读时间需要 16 分钟。

 

/** * jdbc有常用的API * hibernate也有自己常用的API(核心) *   01.Configuration   类  :读取我们的核心配置文件----hibernate.cfg.xml *   接口 *   02.SessionFactory :初始化hibernate需要的各种参数! *                jdbc.properties初始化一次! SessionFactory也是只需要初始化一次即可!写成单例! *                 *   03.Session:之前使用的HttpSession(用户session)! 现在的session叫会话session! *              hibernate就是通过session来操作对象的(增删改查)以及创建事务对象! *   04.Tranaction :进行事务的处理 *   05.Query :hibernate中的查询接口(SQL,HQL) *   06.Criteria:hibernate中的查询接口,是对query进行了简单封装! *               更能体现使用的是面向对象的思想来操作数据库! */public class StudentTest {                Session session=null;    Transaction transaction=null;    //在执行测试方法之前 先执行before    @Before    public  void  before(){        /**         * 01.读取核心的配置文件  在src的根目录下面! 底层规定位置!         *   在实例化Configuration对象的时候通过configure()         *   去src根目录下面,寻找hibernate.cfg.xml文件         */        Configuration configuration=new Configuration().configure();        //02.创建sessionFactory        SessionFactory sessionFactory = configuration.buildSessionFactory();        //03.打开session         session = sessionFactory.openSession();        //04.开启事务         transaction= session.beginTransaction();    }            //在执行测试方法之后     @After    public  void  after(){         //07.提交事务  sql语句 整体的执行!         transaction.commit();         //08.关闭session         session.close();         //sessionFactory.close(); 验证hbm2ddl中的create-drop    }        //新增    @Test    public  void  addStudent(){         //05.创建一个对象         Student student=new Student(500,5, "小白555");         //06.持久化操作---》将对象保存到数据库中         session.save(student);   //不会产生 insert语句    }            /**     *  根据id删除指定的学生     *       *  会产生 2条sql语句     *    01.根据id去数据库中查询 有没有对应的数据     *    02.根据id删除  指定delete语句     */    @Test    public  void  delStudent(){        Student student=new Student();        student.setId(2);  //给对象的ID赋值        //session对象的方法 delete删除        System.out.println("************");        session.delete(student);          System.out.println("************");    }    /**     *  根据id修改指定的学生     *  只会执行一条update语句!     *  如果数据库中没有指定id的数据,没效果!有 就更新!     */    @Test    public  void  updateStudent(){        Student student=new Student();        student.setId(1000);  //给对象的ID赋值        System.out.println("************");        student.setAge(50);        session.update(student);          System.out.println("************");    }                    /**     * 查询数据库中指定学生的信息     *  查询 不需要事务!     *  get和load的区别     *     get:     *       01.在get()立即产生一条sql语句       *       02.首先回去hibernate的1级缓存(session)中查询有没有对应的数据     *           如果有,直接返回,就不会访问数据库!     *           如果没有,去2级缓存中查询(sessionFactory)中查询!     *           如果2级缓存中也没有数据,则会产生一条select语句 访问数据库!     *       03.如果数据库中存在该数据 则返回     *       04.没有对应的数据 返回  null     */    @Test    public  void  getStudent(){  //通过get()获取数据    System.out.println("****************");    Student  student=(Student) session.get(Student.class, 200);    System.out.println("****************");    System.out.println(student);    }        //验证不会访问数据库    @Test    public  void  getStudent2(){  //通过get()获取数据        Student  student=(Student) session.get(Student.class, 200);  //被session管理        Student  student2=(Student) session.get(Student.class, 200); //缓存中已经存在了    }            /**     * evict()从session缓存中 清除指定的对象     */    @Test    public  void  evictStudent(){  //通过get()获取数据        Student  student=(Student) session.get(Student.class, 200);  //被session管理        Student  student2=(Student) session.get(Student.class, 300);  //被session管理        session.evict(student); //从session缓存中 清除student对象        /**         * 有人认为:1级缓存中确实是清除了!但是2级缓存中应该没有清除吧?         * 不是这么理解的!  2级缓存需要我们手工配置!不配置 就不存在2级缓存!         */        student=(Student) session.get(Student.class, 200); //再次获取id为200的数据    }            /**     * clear() 从session缓存中 清除所有的对象     */    @Test    public  void  clearStudent(){  //通过get()获取数据        Student  student=(Student) session.get(Student.class, 200);  //被session管理        Student  student2=(Student) session.get(Student.class, 300);  //被session管理        //session.clear(); //从session缓存中 清除所有对象        student=(Student) session.get(Student.class, 200); //再次获取id为200的数据        student2=(Student) session.get(Student.class, 300); //再次获取id为300的数据    }        /**     * load: 懒加载     *     01.不会立即产生sql语句     *     02.在用户使用真正对象的时候才去访问数据库!     *     03.首先回去hibernate的1级缓存(session)中查询有没有对应的数据     *           如果有,直接返回,就不会访问数据库!     *           如果没有,去2级缓存中查询(sessionFactory)中查询!     *           如果2级缓存中也没有数据,则会产生一条select语句 访问数据库!     *     04.如果数据库中存在该数据 则返回     *     05.没有对应的数据 返回 ObjectNotFoundException 异常     *     06.如果想实现和 get()一样的效果!怎么做?     *        在对应的hbm.xml文件中的 class节点上  新增 lazy="false"   立即加载!     */    @Test    public  void  loadStudent(){  //通过load()获取数据        Student  student=(Student) session.load(Student.class, 200);        System.out.println("****************");        System.out.println(student);  //产生sql语句        System.out.println("****************");    }}

 

转载于:https://www.cnblogs.com/xtdxs/p/7093487.html

你可能感兴趣的文章
Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
查看>>
django中聚合aggregate和annotate GROUP BY的使用方法
查看>>
TFS简介
查看>>
docker管理平台 shipyard安装
查看>>
安装django
查看>>
Bootstrap3 栅格系统-简介
查看>>
ADODB类库操作查询数据表
查看>>
【java】File的使用:将字符串写出到本地文件,大小0kb的原因
查看>>
安卓音乐播放器开发实例
查看>>
some requirement checks failed
查看>>
存储管理
查看>>
HDU-2089-不要62
查看>>
Latex学习笔记0
查看>>
css控制div强制换行
查看>>
ios 底部用定位 fixed。在软件盘出来后,页面元素被顶上去一部分,fixed定位的footer也跑到了上面去。解决方法...
查看>>
HDU1257题解
查看>>
Iterator
查看>>
Spring MVC整合Velocity
查看>>
fiddler+android抓包工具配置使用
查看>>
Spring Data JPA 复杂/多条件组合分页查询
查看>>