• hibernate的入门crud


    package com.test;
    
    import com.demo.User;
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    import java.util.Arrays;
    import java.util.List;
    
    /*
     * 没有借住HibernateUtil小工具
     */
    public class crudTest {
    
        private static SessionFactory sessionFactory; // 工厂只有一个 根据配置文件来生成的
        static {
            Configuration cfg = new Configuration();
            // cfg.configure();//默认自动配置src下的hibernate.cfg.xml
            // cfg.addResource("com/demo/user.hbm.xml");//增加一个映射文件 在配置里面已经配置过了)
            // cfg.addClass(User.class);//去user类所在的包中查找名称为User,后缀为.hbm.xml的文件
            cfg.configure("hibernate.cfg.xml");// 读取指定的主配置文件(位置也可不需指定,默认自动查找src下的cfg.xml)
            sessionFactory = cfg.buildSessionFactory(); // 生成session工厂
        }
    
        @Test
        public void testSave() throws Exception {
            User u = new User();
            u.setName("bb");
            u.setPassword("1563");
            u.setType("root");
    
            Session ses = sessionFactory.openSession(); // 打开一个新的session
            Transaction ts = ses.beginTransaction(); // 开始事务---- 创建事务的对象ts
    
            try {
                ses.save(u);// 往表user1存数据
                ts.commit();// 提交事务
            } catch (HibernateException he) {
                he.printStackTrace();
                System.out.println("死了");
                ts.rollback();//事务的回滚
            } finally {
                ses.close();
                sessionFactory.close();
                System.out.println("插入成功");
            }
        }
    
        @Test
        public void testGet() throws Exception {
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
    
            User user = (User) session.get(User.class, 4);// 获取User表中的字段1
            System.out.println(user);// toString方法已经重写 [User:id=1,name=hoobey,password=456,type=admin]
    
            tx.commit();
            session.close();
        }
    
        @Test
        public void testHQL() {
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            String hql = null;
    
            // 执行查询
            // 1.简单的查询
            /* hql = "FROM User"; */
    
            // 2.带上过滤条件以及排序from User as u --使用别名 as可以省略
            /* hql="from User u where u.id = 1"; */
            // 3.指定select子句
              hql = "select u.id , u.name from User u";//查询多个指定的列时 返回的是数组 输出使用Array.toString()
    
              List list = session.createQuery(hql).list();
              for(Object obj : list){
                  if(obj.getClass().isArray()){
                      System.out.println(Arrays.toString((Object[])obj));//查询返回的数组时
                }else{
                      System.out.println(obj);//查询返回的是原属性的类型时 直接输出 }
                }
              }
            // ---------------第二部分的学习-----------------------------
    
            // 1,聚集函数:count(), max(), min(), avg(), sum()
    //        hql = "SELECT COUNT(*) FROM User"; // 返回的结果是Long型的
            // hql = "SELECT min(id) FROM Employee"; // 返回的结果是id属性的类型
    //        Number result = (Number) session.createQuery(hql).uniqueResult();
    //        System.out.println(result.getClass());
    //        System.out.println(result);
    
            // 2,分组: Group By ... Having
            // hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name";
            // hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1";
            // hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1";
            // ---
            // hql = "SELECT e.name,COUNT(e.id) " + //
            // "FROM Employee e " + //
            // "WHERE id<9 " + //
            // "GROUP BY e.name " + //
            // "HAVING count(e.id)>1 " + //
            // "ORDER BY count(e.id) ASC";
            // ---
            // hql = "SELECT e.name,COUNT(e.id) AS c " + //
            // "FROM Employee e " + //
            // "WHERE id<9 " + //
            // "GROUP BY e.name " + //
            // "HAVING count(e.id)>1 " + // 在having子句中不能使用列别名
            // "ORDER BY c ASC"; // 在orderby子句中可以使用列别名
    
            // 3,连接查询 / HQL是面向对象的查询
            // >> 内连接(inner关键字可以省略)
            // hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d";
            // hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";
            // >> 左外连接(outer关键字可以省略)
            // hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
            // >> 右外连接(outer关键字可以省略)
            // hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d";
            // 可以使用更方便的方法
            // hql = "SELECT e.id,e.name,e.department.name FROM Employee e";
    
            // 4,查询时使用参数
            // >> 方式一:使用'?'占位
            // hql = "FROM Employee e WHERE id BETWEEN ? AND ?";
            // List list = session.createQuery(hql)//
            // .setParameter(0, 5)// 设置参数,第1个参数的索引为0。
            // .setParameter(1, 15)//
            // .list();
    
            // >> 方式二:使用变量名
            // hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";
            // List list = session.createQuery(hql)//
            // .setParameter("idMax", 15)//
            // .setParameter("idMin", 5)//
            // .list();
    
            // 当参数是集合时,一定要使用setParameterList()设置参数值
            // hql = "FROM Employee e WHERE id IN (:ids)";
            // List list = session.createQuery(hql)//
            // .setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })//
            // .list();
    
            // 5,使用命名查询
            // Query query = session.getNamedQuery("queryByIdRange");
            // query.setParameter("idMin", 3);
            // query.setParameter("idMax", 10);
            // List list = query.list();
    
            // 6,update与delete,不会通知Session缓存
            // >> Update
    //         int result = session.createQuery(//
    //         "UPDATE User e SET e.name=? WHERE user_id = 2")//
    //         .setParameter(0, "hghg")//
    //         .executeUpdate(); // 返回int型的结果,表示影响了多少行。
    //         System.out.println("result = " + result);
            
    //        User user = (User)session.get(User.class, 1);
    //        System.out.println(user.getName());
            // >> Delete
            /*
             * int result = session.createQuery(// "DELETE FROM Employee e WHERE id>15")// .executeUpdate(); // 返回int型的结果,表示影响了多少行。 System.out.println("result = " + result);
             */
    
            // ----- 执行查询并显示结果
            // // List list = session.createQuery(hql).list();
            // for (Object obj : list) {
            // if (obj.getClass().isArray()) {
            // System.out.println(Arrays.toString((Object[]) obj));
            // } else {
            // System.out.println(obj);
            // }
            // }
    
            tx.commit();
            session.close();
        }
    }
  • 相关阅读:
    BUUCTF RE 内涵的软件 WP
    BUUCTF RE reverse2 WP
    [笔记]Ubuntu使用遇到的问题及解决办法
    [笔记]Capybara API学习整理
    [笔记]Ruby On Rails创建项目改用Mysql数据库
    [笔记]Ubuntu12.04系统安装的一些工具
    [笔记]Ubuntu查看Windows创建的中文名文件乱码
    [笔记]BDD测试使用Capybara遇到的问题及解决方法
    [笔记]Capybara API学习整理(Ambiguous match, found N elements matching xpath)
    [笔记]How To Create a Gherkin Syntax Highlighter In gedit
  • 原文地址:https://www.cnblogs.com/hoobey/p/7470773.html
Copyright © 2020-2023  润新知