java 从零开始,学习笔记之基础入门(三十七)

Hibernate_实战演练

使用HibernateSessionFactory得到session实现CRUD

UserOperDAO.java

package com.ibm.dao;

 

import java.util.Iterator;

import java.util.List;

 

import org.hibernate.CacheMode;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

 

import com.ibm.factory.HibernateSessionFactory;

import com.ibm.pojo.User;

 

public class UserOperDAO {

    public void add(User user){

       //定义sessiontran变量

       Session session=null;

       Transaction tran=null;

       try {

           //获得session开启事务(涉及数据修改操作时都需要开启事务)

           session=HibernateSessionFactory.getSession();

           tran=session.beginTransaction();

           session.save(user);

          

           //提交事务数据入库

           tran.commit();

          

       } catch (Exception e) {

           //事务回滚

           tran.rollback();

       }finally{

           //关闭session

           HibernateSessionFactory.closeSession();

       }

    }

   

   

    /**

     * 按照用户id删除用户

     * @param user

     */

 

    public void delUser(User user){

       Session session= null;

       Transaction tran=null;

       try {

          

           session=HibernateSessionFactory.getSession();

           tran=session.beginTransaction();

      

           session.delete(user);

           tran.commit();

       } catch (Exception e) {

           tran.rollback();

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

   

   

    /**

     * 修改用户

     * @param user

     */

    public void updateUser(User user){

      

       Session session= null;

       Transaction tran=null;

       try {

          

           session=HibernateSessionFactory.getSession();

           tran=session.beginTransaction();

          

           session.update(user);

           tran.commit();

       } catch (Exception e) {

           e.printStackTrace();

           tran.rollback();

       }finally{

           HibernateSessionFactory.closeSession();

       }

      

    }

   

    /**

     * 获得用户信息列表

     * @return list

     */

    public List<User> getAllUser(){

       List<User> list= null;

       Session session=null;

       try {

           session=HibernateSessionFactory.getSession();

           String sql="from User user";

           Query query=session.createQuery(sql);

           list=query.list();

           System.out.println("获得结果集");

           for (User u : list) {

              System.out.println("用户名是:"+u.getUserName());

           }

          

       } catch (Exception e) {

           e.printStackTrace();

       }

       return list;

    }

    }

   

    public static void main(String[] args) {

       UserOperDAO dao=new UserOperDAO();

       //增加

//     User user = new User();

//     user.setUserName("范围");

//     dao.add(user);

       

       //删除

//     User user1=new User();

//     //删除时必须给删除对象的主键赋值

//     user1.setUserId(2);

//     dao.delUser(user1);

      

       //修改

//     User user2=new User();

//     user2.setUserId(5);

//     user2.setUserName("jack");

//     dao.updateUser(user2);

      

       //查询

//     List<User> list=dao.getAllUser();

//     for (User user : list) {

//         System.out.println("用户名称是:"+user.getUserName());

//     }

      

}

 

 

延迟加载

    /**

     * 延迟加载

     *

     */

    public void lazyTest(){

       Session session=null;

       try {

           session=HibernateSessionFactory.getSession();

           User user=(User) session.load(User.class, 5);

           System.out.println("用户id是:"+user.getUserId());

           System.out.println("*********************分割线************");

       //  System.out.println("用户姓名是:"+user.getUserName());

       } catch (Exception e) {

           e.printStackTrace();

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

 

缓存事例

    /**

     * 缓存事例

     */

    public void cachTest(){

       //一级缓存

       Session session=null;

       try {

           session=HibernateSessionFactory.getSession();

//         User user=(User) session.load(User.class, 5);

//         System.out.println("用户id是:"+user.getUserId());

//         System.out.println("*********************分割线************");

//         System.out.println("用户姓名是:"+user.getUserName());

//         //一级缓存和session生命周期一致的缓存

//         //clear是将所有的一级缓存中的数据清空掉

//         //session.clear();

//        

//         //evict将指定的对象从一级缓存中清除掉

//         session.evict(user);

//         System.out.println("-----------二次查询");

//             user=(User) session.load(User.class, 5);

//         System.out.println("*********************分割线************");

//         System.out.println("用户姓名是:"+user.getUserName());

          

           //getload查询区别?load在查询不到数据时返回ObjectNotFound异常

               //get返回空指针异常

           //相同点:都支持一级缓存,都是按照id在进行查询动作

//         User user=(User) session.get(User.class, 15);

//         System.out.println(user.getUserName());

          

          

           User user2=(User) session.load(User.class, 15);

           System.out.println(user2.getUserName());

       } catch (Exception e) {

           e.printStackTrace();       

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

 

list查询和iterator查询对比

    //list查询和iterator查询对比

    private void compListAndIterat() {

       Session session=null;

       try {

           session = HibernateSessionFactory.getSession();

           String sql="from User user";

           Query query=session.createQuery(sql);

          

           //查询分页方法

           //0代表第一条记录的索引号

           query.setFirstResult(0);

           //3表示页大小

           query.setMaxResults(3);

           //iterator方式查询

//         Iterator iter= query.iterate();

//         while (iter.hasNext()) {

//            User user = (User) iter.next();

//            System.out.println("用户名是:"+user.getUserName());

//         }

          

           //list方式查询

           List<User> list=query.list();

           for(User user:list){

              System.out.println("用户名:"+user.getUserName());

           }

          

       } catch (Exception e) {

           e.printStackTrace();

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

 

二级缓存测试

    /**

     * 二级缓存

     */

    public void secondCachTest(){

       Session session=null;

       try {

           //二级缓存及管理测试

//         session=HibernateSessionFactory.getSession();

//         User user= (User) session.load(User.class,3);

//         System.out.println("用户名是:"+user.getUserName());

//         session.close();

//        

//         //清空二级缓存中的数据

//         SessionFactory sessionFactory=HibernateSessionFactory.getSessionFactory();

//         sessionFactory.evict(User.class,3);

//        

//        

//         System.out.println("**************我是分割线*******************");

//         session=HibernateSessionFactory.getSession();

//         user=(User)session.load(User.class, 3);

//         System.out.println("用户名是:"+user.getUserName());

//         session.close();

          

          

           //一级缓存和二级缓存交互测试

           session = HibernateSessionFactory.getSession();

           session.setCacheMode(CacheMode.GET);

           User user=(User) session.load(User.class, 3);

           System.out.println("用户名是:"+user.getUserName());

           session.close();

          

           System.out.println("*****我是分割线****");

           System.out.println("用户名是:"+user.getUserName());

 

           session = HibernateSessionFactory.getSession();

           session.setCacheMode(CacheMode.GET);

            user=(User) session.load(User.class, 3);

           System.out.println("用户名是:"+user.getUserName());

           session.close();

          

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

 

测试

    public static void main(String[] args) {

       UserOperDAO dao=new UserOperDAO();

       //增加

//     User user = new User();

//     user.setUserName("范围");

//     dao.add(user);

      

       //修改

//     User user1=new User();

//     //删除时必须给删除对象的主键赋值

//     user1.setUserId(2);

//     dao.delUser(user1);

      

       //修改

//     User user2=new User();

//     user2.setUserId(5);

//     user2.setUserName("jack");

//     dao.updateUser(user2);

      

       //查询

//     List<User> list=dao.getAllUser();

//     for (User user : list) {

//         System.out.println("用户名称是:"+user.getUserName());

//     }

      

//     //延迟加载测试

//     dao.lazyTest();

      

       //缓存测试

//     dao.cachTest();

      

       //iteatorlist集合比较

//     dao.compListAndIterat();

      

       //二级缓存测试

       dao.secondCachTest();

    }

 

二级缓存配置

Ehcache.xml(放在src目录下)

<ehcache>

 

    <!-- Sets the path to the directory where cache .data files are created.

 

         If the path is a Java System Property it is replaced by

         its value in the running VM.

 

         The following properties are translated:

         user.home - User's home directory

         user.dir - User's current working directory

         java.io.tmpdir - Default temp file path -->

    <diskStorepath="c:\\hibernatecache"/>

 

 

    <!--Default Cache configuration. These will applied to cachesprogrammatically created through

        the CacheManager.

 

        The following attributes are required for defaultCache:

 

        maxInMemory       - Sets the maximum number of objects that will be created in memory

        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element

                            is never expired.

        timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used

                            if the element is not eternal. Idle time is now - last accessed time

        timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used

                            if the element is not eternal. TTL is now - creation time

        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache

                            has reached the maxInMemory limit.

 

        -->

    <defaultCache

        maxElementsInMemory="10000"

        eternal="false"

        timeToIdleSeconds="300"

        timeToLiveSeconds="120"

        overflowToDisk="true"

        />

</ehcache>

二级缓存配置详解

<!--      maxElementsInMemory="10000" !--缓存最大数目 -- -->

<!--eternal="false"!-- 缓存是否持久 -- -->

<!--overflowToDisk="true"!-- 是否保存到磁盘,当系统当机时-- -->

<!--timeToIdleSeconds="300"!-- 当缓存闲置n秒后销毁 -- -->

<!--timeToLiveSeconds="180"!-- 当缓存存活n秒后销毁-- -->

 

 

一级二级缓存详解

Hibernate一级缓存

1.        缓存是指一组数据的集合,这些数据储存在其他地方,因为获取这些数据代价昂贵,所以把这些结果数据保存起来,让下一次需要这些数据的时候直接使用,这就大大提高了系统效率。

2.        一级缓存很短和session的生命周期一致,一级缓存也叫session级或事务级缓存。

3.        哪些方法支持一级缓存及一级缓存的管理:                                     

      get()

      load()

      Iterate () (查询实体对象)

      session.clear(),session.evict()(管理一级缓存)

 

Hibernate二级缓存

1.   二级缓存的生命周期和SessionFactory的生命周期一致,也称SessionFactory级或进程级的缓存。

2.   因为我们提到了,二级缓存是一个可插拔的缓存插件,所以二级缓存一定要先配置后使用。

3.   二级缓存的配置:

 将echcache.xml文件拷贝到src下

 开启二级缓存,修改hibernate.cfg.xml文件

   <propertyname="hibernate.cache.

          use_second_level_cache">true</property>

 指定缓存产品提供商,修改hibernate.cfg.xml文件

   <propertyname="hibernate.cache.provider_class">

          org.hibernate.cache.EhCacheProvider</property>

 指定哪些实体类使用二级缓存(两种方法)

          *在映射文件中采用<cache>标签

          *在hibernate.cfg.xml文件中,采用<class-cache>标签(<class-cache usage="read-only" class="com.ibm.pojo.User"/>

 


使用HibernateSessionFactory得到session实现CRUD

UserOperDAO.java

package com.ibm.dao;

 

import java.util.Iterator;

import java.util.List;

 

import org.hibernate.CacheMode;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

 

import com.ibm.factory.HibernateSessionFactory;

import com.ibm.pojo.User;

 

public class UserOperDAO {

    public void add(User user){

       //定义sessiontran变量

       Session session=null;

       Transaction tran=null;

       try {

           //获得session开启事务(涉及数据修改操作时都需要开启事务)

           session=HibernateSessionFactory.getSession();

           tran=session.beginTransaction();

           session.save(user);

          

           //提交事务数据入库

           tran.commit();

          

       } catch (Exception e) {

           //事务回滚

           tran.rollback();

       }finally{

           //关闭session

           HibernateSessionFactory.closeSession();

       }

    }

   

   

    /**

     * 按照用户id删除用户

     * @param user

     */

 

    public void delUser(User user){

       Session session= null;

       Transaction tran=null;

       try {

          

           session=HibernateSessionFactory.getSession();

           tran=session.beginTransaction();

      

           session.delete(user);

           tran.commit();

       } catch (Exception e) {

           tran.rollback();

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

   

   

    /**

     * 修改用户

     * @param user

     */

    public void updateUser(User user){

      

       Session session= null;

       Transaction tran=null;

       try {

          

           session=HibernateSessionFactory.getSession();

           tran=session.beginTransaction();

          

           session.update(user);

           tran.commit();

       } catch (Exception e) {

           e.printStackTrace();

           tran.rollback();

       }finally{

           HibernateSessionFactory.closeSession();

       }

      

    }

   

    /**

     * 获得用户信息列表

     * @return list

     */

    public List<User> getAllUser(){

       List<User> list= null;

       Session session=null;

       try {

           session=HibernateSessionFactory.getSession();

           String sql="from User user";

           Query query=session.createQuery(sql);

           list=query.list();

           System.out.println("获得结果集");

           for (User u : list) {

              System.out.println("用户名是:"+u.getUserName());

           }

          

       } catch (Exception e) {

           e.printStackTrace();

       }

       return list;

    }

    }

   

    public static void main(String[] args) {

       UserOperDAO dao=new UserOperDAO();

       //增加

//     User user = new User();

//     user.setUserName("范围");

//     dao.add(user);

       

       //删除

//     User user1=new User();

//     //删除时必须给删除对象的主键赋值

//     user1.setUserId(2);

//     dao.delUser(user1);

      

       //修改

//     User user2=new User();

//     user2.setUserId(5);

//     user2.setUserName("jack");

//     dao.updateUser(user2);

      

       //查询

//     List<User> list=dao.getAllUser();

//     for (User user : list) {

//         System.out.println("用户名称是:"+user.getUserName());

//     }

      

}

 

 

延迟加载

    /**

     * 延迟加载

     *

     */

    public void lazyTest(){

       Session session=null;

       try {

           session=HibernateSessionFactory.getSession();

           User user=(User) session.load(User.class, 5);

           System.out.println("用户id是:"+user.getUserId());

           System.out.println("*********************分割线************");

       //  System.out.println("用户姓名是:"+user.getUserName());

       } catch (Exception e) {

           e.printStackTrace();

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

 

缓存事例

    /**

     * 缓存事例

     */

    public void cachTest(){

       //一级缓存

       Session session=null;

       try {

           session=HibernateSessionFactory.getSession();

//         User user=(User) session.load(User.class, 5);

//         System.out.println("用户id是:"+user.getUserId());

//         System.out.println("*********************分割线************");

//         System.out.println("用户姓名是:"+user.getUserName());

//         //一级缓存和session生命周期一致的缓存

//         //clear是将所有的一级缓存中的数据清空掉

//         //session.clear();

//        

//         //evict将指定的对象从一级缓存中清除掉

//         session.evict(user);

//         System.out.println("-----------二次查询");

//             user=(User) session.load(User.class, 5);

//         System.out.println("*********************分割线************");

//         System.out.println("用户姓名是:"+user.getUserName());

          

           //getload查询区别?load在查询不到数据时返回ObjectNotFound异常

               //get返回空指针异常

           //相同点:都支持一级缓存,都是按照id在进行查询动作

//         User user=(User) session.get(User.class, 15);

//         System.out.println(user.getUserName());

          

          

           User user2=(User) session.load(User.class, 15);

           System.out.println(user2.getUserName());

       } catch (Exception e) {

           e.printStackTrace();       

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

 

list查询和iterator查询对比

    //list查询和iterator查询对比

    private void compListAndIterat() {

       Session session=null;

       try {

           session = HibernateSessionFactory.getSession();

           String sql="from User user";

           Query query=session.createQuery(sql);

          

           //查询分页方法

           //0代表第一条记录的索引号

           query.setFirstResult(0);

           //3表示页大小

           query.setMaxResults(3);

           //iterator方式查询

//         Iterator iter= query.iterate();

//         while (iter.hasNext()) {

//            User user = (User) iter.next();

//            System.out.println("用户名是:"+user.getUserName());

//         }

          

           //list方式查询

           List<User> list=query.list();

           for(User user:list){

              System.out.println("用户名:"+user.getUserName());

           }

          

       } catch (Exception e) {

           e.printStackTrace();

       }finally{

           HibernateSessionFactory.closeSession();

       }

    }

 

二级缓存测试

    /**

     * 二级缓存

     */

    public void secondCachTest(){

       Session session=null;

       try {

           //二级缓存及管理测试

//         session=HibernateSessionFactory.getSession();

//         User user= (User) session.load(User.class,3);

//         System.out.println("用户名是:"+user.getUserName());

//         session.close();

//        

//         //清空二级缓存中的数据

//         SessionFactory sessionFactory=HibernateSessionFactory.getSessionFactory();

//         sessionFactory.evict(User.class,3);

//        

//        

//         System.out.println("**************我是分割线*******************");

//         session=HibernateSessionFactory.getSession();

//         user=(User)session.load(User.class, 3);

//         System.out.println("用户名是:"+user.getUserName());

//         session.close();

          

          

           //一级缓存和二级缓存交互测试

           session = HibernateSessionFactory.getSession();

           session.setCacheMode(CacheMode.GET);

           User user=(User) session.load(User.class, 3);

           System.out.println("用户名是:"+user.getUserName());

           session.close();

          

           System.out.println("*****我是分割线****");

           System.out.println("用户名是:"+user.getUserName());

 

           session = HibernateSessionFactory.getSession();

           session.setCacheMode(CacheMode.GET);

            user=(User) session.load(User.class, 3);

           System.out.println("用户名是:"+user.getUserName());

           session.close();

          

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

 

测试

    public static void main(String[] args) {

       UserOperDAO dao=new UserOperDAO();

       //增加

//     User user = new User();

//     user.setUserName("范围");

//     dao.add(user);

      

       //修改

//     User user1=new User();

//     //删除时必须给删除对象的主键赋值

//     user1.setUserId(2);

//     dao.delUser(user1);

      

       //修改

//     User user2=new User();

//     user2.setUserId(5);

//     user2.setUserName("jack");

//     dao.updateUser(user2);

      

       //查询

//     List<User> list=dao.getAllUser();

//     for (User user : list) {

//         System.out.println("用户名称是:"+user.getUserName());

//     }

      

//     //延迟加载测试

//     dao.lazyTest();

      

       //缓存测试

//     dao.cachTest();

      

       //iteatorlist集合比较

//     dao.compListAndIterat();

      

       //二级缓存测试

       dao.secondCachTest();

    }

 

二级缓存配置

Ehcache.xml(放在src目录下)

<ehcache>

 

    <!-- Sets the path to the directory where cache .data files are created.

 

         If the path is a Java System Property it is replaced by

         its value in the running VM.

 

         The following properties are translated:

         user.home - User's home directory

         user.dir - User's current working directory

         java.io.tmpdir - Default temp file path -->

    <diskStorepath="c:\\hibernatecache"/>

 

 

    <!--Default Cache configuration. These will applied to cachesprogrammatically created through

        the CacheManager.

 

        The following attributes are required for defaultCache:

 

        maxInMemory       - Sets the maximum number of objects that will be created in memory

        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element

                            is never expired.

        timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used

                            if the element is not eternal. Idle time is now - last accessed time

        timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used

                            if the element is not eternal. TTL is now - creation time

        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache

                            has reached the maxInMemory limit.

 

        -->

    <defaultCache

        maxElementsInMemory="10000"

        eternal="false"

        timeToIdleSeconds="300"

        timeToLiveSeconds="120"

        overflowToDisk="true"

        />

</ehcache>

二级缓存配置详解

<!--      maxElementsInMemory="10000" !--缓存最大数目 -- -->

<!--eternal="false"!-- 缓存是否持久 -- -->

<!--overflowToDisk="true"!-- 是否保存到磁盘,当系统当机时-- -->

<!--timeToIdleSeconds="300"!-- 当缓存闲置n秒后销毁 -- -->

<!--timeToLiveSeconds="180"!-- 当缓存存活n秒后销毁-- -->

 

 

一级二级缓存详解

Hibernate一级缓存

1.        缓存是指一组数据的集合,这些数据储存在其他地方,因为获取这些数据代价昂贵,所以把这些结果数据保存起来,让下一次需要这些数据的时候直接使用,这就大大提高了系统效率。

2.        一级缓存很短和session的生命周期一致,一级缓存也叫session级或事务级缓存。

3.        哪些方法支持一级缓存及一级缓存的管理:                                     

      get()

      load()

      Iterate () (查询实体对象)

      session.clear(),session.evict()(管理一级缓存)

 

Hibernate二级缓存

1.   二级缓存的生命周期和SessionFactory的生命周期一致,也称SessionFactory级或进程级的缓存。

2.   因为我们提到了,二级缓存是一个可插拔的缓存插件,所以二级缓存一定要先配置后使用。

3.   二级缓存的配置:

 将echcache.xml文件拷贝到src下

 开启二级缓存,修改hibernate.cfg.xml文件

   <propertyname="hibernate.cache.

          use_second_level_cache">true</property>

 指定缓存产品提供商,修改hibernate.cfg.xml文件

   <propertyname="hibernate.cache.provider_class">

          org.hibernate.cache.EhCacheProvider</property>

 指定哪些实体类使用二级缓存(两种方法)

          *在映射文件中采用<cache>标签

          *在hibernate.cfg.xml文件中,采用<class-cache>标签(<class-cache usage="read-only" class="com.ibm.pojo.User"/>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章