• hibernate初步


    package cn.bdqn.test;
    
    import java.io.Serializable;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Scanner;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    import cn.bdqn.bean.Student;
    import cn.bdqn.util.HibernateSessionFactory;
    
    public class HibernateTest {
    
        // 新增一个学生信息
        @Test
        public void addStudent() {
            // 获取配置文件 hibernate.cfg.xml
            Configuration configuration = new Configuration().configure();
            // 创建咱们的sessionFactory
            SessionFactory factory = configuration.buildSessionFactory();
            // 打开session
            Session session = factory.openSession();
            // 开启事务
            Transaction transaction = session.beginTransaction();
            /*
             * 开始新增操作 创建一个学生对象
             */
            for (int i = 4; i < 15; i++) {
                Student stu = new Student(i, "强"+i, "坚强"+i);
                // 保存学生信息到数据库
                session.save(stu);
            }
            // 提交事务
            transaction.commit();
            // 关闭session
            session.close();
        }
    
        // 查询指定学生信息 get()立即加载 把所需要的对象 session load()延迟加载 hibernate默认的 使用的使用
        @Test
        public void findStudent() {
            /*
             * get()和load()方法:从数据库中取得持久化对象(已经记载在怎们的session缓存中)!
             * student就是一个持久化对象(持久态) session.close(); student就变成了游离态!
             * 
             * 
             * 01.get(): hibernate回去确认ID(主键标识符)在数据库中是否存在,首先会去session
             * 中查找,也就是一级缓存中去查找!如果没有,再去二级缓存中查找,如果再没有,就去 数据库中查询,仍然还没有找到,就返回一个NULL!
             * 
             * 02.load(): hibernate就会认为咱们所查找的ID一定存在!首先会去session中查找,如果没有找到
             * ,hibernate会根据lazy属性的值是否使用延迟加载,如果是,就返回该代理对象,如果没有找到,
             * 再去二级缓存中查找,再去数据库,再没有,报ObjectNotFoundException;
             */
    
            // 获取配置文件 hibernate.cfg.xml
            Configuration configuration = new Configuration().configure();
            // 创建咱们的sessionFactory
            SessionFactory factory = configuration.buildSessionFactory();
            // 打开session
            Session session = factory.openSession();
            // 查询指定的学生
            /*
             * 如果load想实现象get() 必须在配置文件中加上 lazy="false"
             */
            Student student = (Student) session.load(Student.class, 4);
            // 输出学生信息
            System.out.println(student + "*********1");
            // 关闭session
            session.close();
        }
    
        // 修改学生信息
        @Test
        public void updateStudent() {
            /*
             * update(),saveOrUpdate以及merge()的区别
             * 
             * 01.update() 直接更新数据库,只有一条SQL,无论数据库中存不存在数据
             * 
             * 02.saveOrUpdate 001.数据库存在数据,先查询,后修改! 两条SQL 002.数据库不存在数据,先查询,后新增!
             * 两条SQL 03.merge 001.数据库存在数据,先查询,后修改! 两条SQL 002.数据库不存在数据,先查询,后新增! 两条SQL
             */
    
            /*
             * commit()方法执行之前默认进行Flush()清理缓存,Flush()清理缓存的时候会进行脏检查,之后把脏对象同步到数据库 脏对象:
             * 与之前session中存在的快照对比,发现对象的属性有变化,那么就是!!
             * 
             * flush():只是进行清理缓存!!
             */
    
            // 读取配置文件
            Configuration configuration = new Configuration().configure();
            // 创建工厂
            SessionFactory factory = configuration.buildSessionFactory();
            // 打开session
            Session session = factory.openSession();
            // 开启事务
            Transaction transaction = session.beginTransaction();
            // 修改
            Student student = new Student(10, "光头强10", "李和强10");
            student.setName("管光头强");
            session.save(student);
            student.setName("管光头强2");
            // 事务的提交
            transaction.commit();
            // 关闭session
            session.close();
        }
    
        // 删除学生信息
        @Test
        public void deleteStudent() {
            // 读取配置文件
            Configuration configuration = new Configuration().configure();
            // 创建工厂
            SessionFactory factory = configuration.buildSessionFactory();
            // 打开session
            Session session = factory.openSession();
            // 开启事务
            Transaction transaction = session.beginTransaction();
            // 首先查询到要删除的对象
            Student student = (Student) session.load(Student.class, 6);
            // 删除
            session.delete(student);
            // 事务的提交
            transaction.commit();
            // 关闭session
            session.close();
        }
    
        // 使用list查询所有学生信息
        @Test
        public void testList() {
            // 获取session
            Session session = HibernateSessionFactory.getSession();
            // 编写HQL语句(from的是类)
            String hql = "from Student";
            // 创建Query
            Query query = session.createQuery(hql);
            // 使用list查询所有(只有一条查询语句)
            List list = query.list();
            // 遍历
            for (Object object : list) {
                System.out.println(object);
            }
        }
    
        // 使用iterate查询所有学生信息
        // 01.在没有缓存的情况下 执行N+1条sql语句 N代表数据 第一条只是查ID(主键标识符)
        @Test
        public void testIterate() {
            // 获取session
            Session session = HibernateSessionFactory.getSession();
            // 编写HQL语句(from的是类)
            String hql = "from Student";
            // 创建Query
            Query query = session.createQuery(hql);
            // 使用list查询所有
            Iterator list = query.iterate();
            // 遍历
            while (list.hasNext()) {
                Student object = (Student) list.next();
                System.out.println(object);
            }
        }
    
        // 使用iterate查询所有学生信息
        // 02.在有缓存的情况下 执行1条sql语句
        @Test
        public void testIterate2() {
            // 获取session
            Session session = HibernateSessionFactory.getSession();
            // 编写HQL语句(from的是类)
            String hql = "from Student";
            // 创建Query
            Query query = session.createQuery(hql);
            // 使用list查询所有
            List list2 = query.list();
            System.out.println("上面的sql是list查询的!!*************");
            // 清空缓存
            session.clear();
            Iterator list = query.iterate();
            // 遍历
            while (list.hasNext()) {
                Student object = (Student) list.next();
                System.out.println(object);
            }
        }
    
        // 按参数位置绑定
        @Test
        public void argTest1() {
            // 获取session shift +tab 前移
            Session session = HibernateSessionFactory.getSession();
            // 写HQL
            String hql = "from Student where id=?";
            // 创建query对象
            Query query = session.createQuery(hql);
            // 参数位置绑定
            // 01.setString()
            // query.setString(0, "1");
            // 02.setParameter
            query.setParameter(0, 2);
            // 执行查询
            Student stu = (Student) query.uniqueResult();
            System.out.println(stu);
            // 关闭session
            HibernateSessionFactory.closeSession();
        }
    
        // 按参数名称绑定
        @Test
        public void argTest2() {
            // 获取session shift +tab 前移
            Session session = HibernateSessionFactory.getSession();
            // 写HQL
            String hql = "from Student where name like :names";
            // 创建query对象
            Query query = session.createQuery(hql);
            // 参数名称绑定
            // 01.setString()
            // query.setString(0, "1");
            // 02.setParameter
            query.setParameter("names", "%强%");
            // 执行查询
            List list = query.list();
            for (Object object : list) {
                System.out.println(object);
            }
            // 关闭session
            HibernateSessionFactory.closeSession();
        }
    
        // 动态参数绑定
        @Test
        public void argTest3() {
            // 获取session shift +tab 前移
            Session session = HibernateSessionFactory.getSession();
            // 创建一个对象
            Student student = new Student();
            student.setName("%强%");
            // 编写HQL
            StringBuffer buffer = new StringBuffer("from Student s where 1=1 ");
            // 条件拼接
            if (student.getId() != null) {
                buffer.append(" and id=:id");
            }
            if (student.getName() != null) {
                buffer.append(" and name like :name");
            }
            if (student.getPassword() != null) {
                buffer.append(" and password=:password");
            }
            // 创建query对象
            Query query = session.createQuery(buffer.toString());
            // 通过setProperties()
            query.setProperties(student);
            List list = query.list();
            for (Object object : list) {
                System.out.println(object);
            }
            // 关闭session
            HibernateSessionFactory.closeSession();
        }
    
        // 投影查询 01.将每条查询结果封装成Object对象
        @Test
        public void ObjTest1() {
            // 获取session shift +tab 前移
            Session session = HibernateSessionFactory.getSession();
            // 写HQL
            String hql = "select name from Student";
            // 创建query对象
            Query query = session.createQuery(hql);
            // 查询
            List<Object> list = query.list();
            // 遍历
            for (Object object : list) {
                System.out.println(object);
            }
            // 关闭session
            HibernateSessionFactory.closeSession();
        }
    
        // 投影查询 02.将每条查询结果封装成Object数组
        @Test
        public void ObjTest2() {
            // 获取session shift +tab 前移
            Session session = HibernateSessionFactory.getSession();
            // 写HQL
            String hql = "select name,password from Student";
            // 创建query对象
            Query query = session.createQuery(hql);
            // 查询
            List<Object[]> list = query.list();
            // 遍历 [L 这是数组toString()的结果
            for (Object[] object : list) {
                System.out.print("name:" + object[0]);
                System.out.println("password:" + object[1]);
            }
            // 关闭session
            HibernateSessionFactory.closeSession();
        }
    
        // 投影查询 03.将每条查询结果通过构造函数封装成对象
        @Test
        public void ObjTest3() {
            // 获取session shift +tab 前移
            Session session = HibernateSessionFactory.getSession();
            // 写HQL,前提这个构造函数必须在Student类中存在
            String hql = "select new Student(name,password) from Student";
            // 创建query对象
            Query query = session.createQuery(hql);
            // 查询
            List<Student> list = query.list();
            // 遍历
            for (Student object : list) {
                System.out.println(object.getName());
            }
            // 关闭session
            HibernateSessionFactory.closeSession();
        }
    
        // 分页
        @Test
        public void pageList() {
            /*
             * pageIndex :当前页码
             * pageSize:  页大小(每页显示的数据)
             * totalCount:总记录数
             * totalPage: 总页数
             * 每页显示3条数据  按照id升序排列  查看第一页内容
             */
            // 获取session
            Session session = HibernateSessionFactory.getSession();
            //写一个hql排序
            String hql="from Student order by id";
            //创建query对象
            Query query = session.createQuery(hql);
            //查询总记录数
            String hqlCounts="select count(*) from Student";
            //执行
            int counts= ((Long)session.createQuery(hqlCounts).uniqueResult()).intValue();
            //页大小(每页显示的数据)
            int  pageSize=3;
            //求出总页数(总记录数%页大小==0)?(总记录数/页大小):(总记录数/页大小+1)
            int totalPage=(counts%pageSize==0)?(counts/pageSize):(counts/pageSize+1);
            //当前页
            Scanner scanner=new Scanner(System.in);
            System.out.println("亲:想看第几页?");
            int pageIndex=scanner.nextInt();
            //设置从第几页开始(当前页-1)*页大小
            query.setFirstResult((pageIndex-1)*pageSize);
            //设置每页显示多少条数据
            query.setMaxResults(pageSize);
            //查询
            List list = query.list();
            for (Object object : list) {
                System.out.println(object);
            } 
        }
    
        @Test
        public  void test111(){
            int a=10;
            int b=10;
            Integer c=10;
            Integer d=10;
            //底层有ValueOf(int value) -128  127之间的数字 是不会重新创建一个integer对象的! 
            Integer c1=128;
            Integer d1=128;
            System.out.println(a==b); //t
            System.out.println(a==c); //t
            System.out.println(c==d); //t
            System.out.println(c1==d1); //f
        }
    }
  • 相关阅读:
    C# SocketAsyncEventArgs Server
    C# Socket 入门5 UPD 结构体 与 C++ 通信
    如何取得 Func 对象 字段
    动态调用对象的属性和方法——性能和灵活性兼备的方法
    C# 读写锁 ReaderWriteLock
    C# IP多播
    C# 广播通信
    程序员那点儿事
    wince上数据库:sqlce和sqlite
    evc vc字符串转换处理
  • 原文地址:https://www.cnblogs.com/go4mi/p/5550568.html
Copyright © 2020-2023  润新知