zoukankan      html  css  js  c++  java
  • HQL、QBC、原生SQL、JDBC的使用

    一、核心语句

    1.HQL语句的使用

     1 package com.zhidi.test.relation;
     2 
     3 import java.util.List;
     4 
     5 import org.hibernate.Query;
     6 import org.junit.Test;
     7 
     8 import com.zdsofe.entity.one2many.Dept;
     9 import com.zdsofe.entity.one2many.Emp;
    10 import com.zhidi.test.base.BaseTest;
    11 
    12 public class TestOne2Many extends BaseTest{
    13 
    14     /**
    15      * HQL语句的使用
    16      */
    17     
    18     @Test
    19     public void testHQL()
    20     {
    21         //HQL语句  from后面是实体类名
    22         String hql="from Dept";
    23         Query query=session.createQuery(hql);
    24         List<Dept> list=query.list();
    25     }
    26     
    27     @Test
    28     public void testHQl1()
    29     {
    30         //HQL语句
    31         String hql="select loc,dname from Dept";
    32         Query query=session.createQuery(hql);
    33         //此处泛型为Object数组
    34         List<Object[]> list=query.list();
    35     }
    36     
    37     @Test
    38     public void testHQL2()
    39     {
    40         //HQL语句
    41         String hql="select new Dept(dname,loc) from Dept";
    42         Query query=session.createQuery(hql);
    43         List<Dept> list=query.list();
    44     }
    45     
    46     // count(),min(),max(),avg(),sum(),length(),lower(),upper(),trim(),distinct(去除重复数据)
    47     @Test
    48     public void testHQL3()
    49     {    
    50          //fetch放在join后将关联对象立即抓取
    51          String hql="from Dept d join fetch d.emps";
    52          Query query=session.createQuery(hql);
    53          List<Dept> list=query.list();
    54     }
    55     
    56     @Test
    57     public void testBindParam()
    58     {
    59         //占位符
    60         String hql="from Emp where sal>? and empno>?";
    61         Query query=session.createQuery(hql);
    62         query.setDouble(0, 1000);
    63         query.setInteger(1, 7938);
    64         List<Emp> list=query.list();
    65     }
    66     
    67     @Test
    68     public void testBindParam1()
    69     {
    70         //动态参数
    71         String hql="from Emp where sal>:psal and empno>:pno";
    72         Query query=session.createQuery(hql);
    73         query.setDouble("psal", 1000);
    74         query.setInteger("pno", 7939);
    75         List<Emp> list=query.list();
    76     }
    77     
    78     @Test
    79     public void testNameQuery()
    80     {
    81         //命名hql查询
    82         Query query=session.getNamedQuery("findEmpById");
    83         query.setParameter("id", 7939);
    84         List<Emp> list=query.list();
    85     }
    86     
    87     @Test
    88     public void testPage()
    89     {
    90         //分页
    91         String hql="from Emp";
    92         Query query=session.createQuery(hql);
    93         //设置开始的索引
    94         query.setFirstResult(0);
    95         //设置一次取出的最大记录数
    96         query.setMaxResults(6);
    97         List<Emp> list=query.list();
    98     }
    99 }
    View Code

    2.QBC的使用

      1 package com.zhidi.test.relation;
      2 
      3 import java.util.List;
      4 
      5 import org.hibernate.Criteria;
      6 import org.hibernate.FetchMode;
      7 import org.hibernate.criterion.Example;
      8 import org.hibernate.criterion.MatchMode;
      9 import org.hibernate.criterion.Order;
     10 import org.hibernate.criterion.Projection;
     11 import org.hibernate.criterion.ProjectionList;
     12 import org.hibernate.criterion.Projections;
     13 import org.hibernate.criterion.Restrictions;
     14 import org.junit.Test;
     15 
     16 import com.zdsofe.entity.one2many.Dept;
     17 import com.zdsofe.entity.one2many.Emp;
     18 import com.zhidi.test.base.BaseTest;
     19 
     20 public class TestQBC extends BaseTest {
     21     
     22     @Test
     23     public void testQBC()
     24     {
     25         //创建criteria对象
     26         Criteria criteria=session.createCriteria(Emp.class);
     27         //执行查询
     28         List<Emp> list=criteria.list();
     29     }
     30     
     31     @Test
     32     public void testQBC1()
     33     {
     34         //创建criteria对象
     35        Criteria criteria=session.createCriteria(Emp.class);
     36        //Restrictions类提供创建各种查询条件的方法
     37        //criteria.add(Restrictions.between("sal", 1000d, 3000d));
     38        //criteria.add(Restrictions.like("ename", "王",MatchMode.ANYWHERE));
     39        //criteria.add(Restrictions.eq("sal", 1000d));
     40        criteria.addOrder(Order.asc("sal"));       
     41        List<Emp> list=criteria.list();
     42     }
     43 
     44     @Test
     45     //样例查询
     46     public void testQBC2()
     47     {
     48         Emp emp=new Emp();
     49         emp.setEname("王麻子");
     50         emp.setSal(1000d);
     51         //以Emp对象为蓝本创建样例对象
     52         Example example=Example.create(emp);
     53         //设置样例中排除为空的属性
     54         example.excludeZeroes();
     55         //创建Criteria对象
     56         Criteria criteria=session.createCriteria(Emp.class);
     57         //将样例对象设置为查询条件
     58         criteria.add(example);
     59         List<Emp> list=criteria.list();
     60     }
     61     
     62     @Test
     63     public void testQBC3()
     64     {
     65         //创建Criteria对象
     66         Criteria criteria=session.createCriteria(Emp.class);
     67         //指定使用连接默认立即获得关联属性
     68         criteria.setFetchMode("dept", FetchMode.JOIN);
     69         List<Emp> list=criteria.list();
     70     }
     71     
     72     @Test
     73     public void testQBC4()
     74     {
     75         //创建Criteria对象
     76         Criteria criteria=session.createCriteria(Dept.class);
     77         //为关联对象起别名
     78         criteria.createAlias("emps", "e");
     79         //将关联对象的属性作为查询条件
     80         criteria.add(Restrictions.in("e.empno", new Object[]{3938,3942}));
     81         List<Emp> list=criteria.list();
     82         
     83     }
     84     
     85     @Test
     86     public void testQBC5()
     87     {
     88         //创建Criteria对象
     89         Criteria criteria=session.createCriteria(Dept.class);
     90         //统计总记录数
     91         criteria.setProjection(Projections.rowCount());
     92         Long total=(Long)criteria.uniqueResult();
     93     }
     94     
     95     @Test
     96     public void testQBC6()
     97     {
     98         //创建Criteria对象
     99         Criteria criteria=session.createCriteria(Dept.class);
    100         //创建投影集合
    101         ProjectionList projectionList=Projections.projectionList();
    102         //向投影集合中添加聚合函数投影
    103         projectionList.add(Projections.count("dname"));
    104         //向投影集合中添加分组属性
    105         projectionList.add(Projections.groupProperty("loc"));
    106         //为Criteria设置投影
    107         criteria.setProjection(projectionList);
    108         List<Object[]> list=criteria.list();
    109                 
    110     }
    111     
    112     
    113 }
    View Code

    3.原生SQL的使用

     1 package com.zhidi.test.relation;
     2 
     3 import java.util.List;
     4 import java.util.Map;
     5 
     6 import org.hibernate.SQLQuery;
     7 import org.hibernate.transform.Transformers;
     8 import org.junit.Test;
     9 
    10 import com.zdsofe.entity.one2many.Emp;
    11 import com.zhidi.test.base.BaseTest;
    12 
    13 public class TestSQL  extends BaseTest{
    14     
    15     @Test
    16     public void testSQL()
    17     {
    18       SQLQuery sqlQuery=session.createSQLQuery("select * from emp");
    19       //查询每一行数据封装到数组中
    20       List<Object[]> list=sqlQuery.list();
    21     }
    22 
    23     @Test
    24     public void testSQL1()
    25     {
    26       SQLQuery sqlQuery=session.createSQLQuery("select * from emp");
    27       //将查询结果转化为对象
    28       sqlQuery.addEntity(Emp.class);
    29       List<Emp> list=sqlQuery.list();
    30     }
    31     
    32     @Test
    33     public void testSQL2()
    34     {
    35       SQLQuery sqlQuery=session.createSQLQuery("select * from emp");
    36       //将查询结果转化为map集合
    37       sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
    38       List<Map<Object,Object>> list=sqlQuery.list();
    39     }
    40 }
    View Code

    4.JDBC的使用

     1 package com.zhidi.test.relation;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.SQLException;
     6 
     7 import org.hibernate.jdbc.ReturningWork;
     8 import org.hibernate.jdbc.Work;
     9 import org.junit.Test;
    10 
    11 import com.zdsofe.entity.one2many.Emp;
    12 import com.zhidi.test.base.BaseTest;
    13 
    14 public class TestJDBC extends BaseTest {
    15     
    16     @Test
    17     public void testJDBC()
    18     {
    19         //执行不需要返回结果的数据库操作
    20         session.doWork(new Work() {            
    21             @Override
    22             public void execute(Connection conn) throws SQLException {
    23                        //在这里执行数据库的操作
    24                 PreparedStatement ps=conn.prepareStatement("select * from emp");
    25                        
    26             }
    27         });
    28     }
    29     
    30 
    31     @Test
    32     public void testJDBC1()
    33     {
    34         //执行需要返回的数据库操作
    35         session.doReturningWork(new ReturningWork<Emp>() {
    36 
    37             @Override
    38             public Emp execute(Connection conn) throws SQLException {
    39                 PreparedStatement ps=conn.prepareStatement("select * from emp");
    40 
    41                 return null;
    42             }
    43         });
    44     }
    45 }
    View Code

    二、配置文件

    1.test文件

     1 package com.zhidi.test.base;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     6 import org.hibernate.cfg.Configuration;
     7 import org.junit.After;
     8 import org.junit.AfterClass;
     9 import org.junit.Before;
    10 import org.junit.BeforeClass;
    11 
    12 public class BaseTest {
    13     protected static SessionFactory sessionFactory;
    14     protected Session session;
    15 
    16     @BeforeClass
    17     public static void beforeClass()
    18     {
    19         Configuration cfg=new Configuration().configure();
    20         sessionFactory=cfg.buildSessionFactory(new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build());        
    21     }
    22     @AfterClass
    23     public static void afterClass()
    24     {
    25         if(sessionFactory!=null)
    26         {
    27             sessionFactory.close();
    28         }
    29     }
    30     @Before
    31     public void before()
    32     {
    33         session=sessionFactory.getCurrentSession();
    34         session.beginTransaction();        
    35     }
    36     
    37     @After
    38     public void after()
    39     {
    40         if(session.getTransaction().isActive())
    41         {
    42             session.getTransaction().commit();
    43         }
    44     }
    45 }
    View Code

    2.两个实体类

    package com.zdsofe.entity.one2many;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class Dept {
    
        private Integer deptno;
        private String dname;
        private String loc;
        //关联
        private Set<Emp> emps=new HashSet<Emp>();
        
        public Dept() {
            
        }
    
        public Dept(String dname, String loc) {
            
            this.dname = dname;
            this.loc = loc;
        }
    
        public Set<Emp> getEmps() {
            return emps;
        }
    
        public void setEmps(Set<Emp> emps) {
            this.emps = emps;
        }
    
        public Integer getDeptno() {
            return deptno;
        }
    
        public void setDeptno(Integer deptno) {
            this.deptno = deptno;
        }
    
        public String getDname() {
            return dname;
        }
    
        public void setDname(String dname) {
            this.dname = dname;
        }
    
        public String getLoc() {
            return loc;
        }
    
        public void setLoc(String loc) {
            this.loc = loc;
        }
    
    }
    View Code
     1 package com.zdsofe.entity.one2many;
     2 
     3 import java.util.Date;
     4 
     5 public class Emp {
     6     private Integer empno;
     7     private String ename;
     8     private String job;
     9     private String mgr;
    10     private Date hiredate;
    11     private double sal;
    12     
    13     
    14 
    15     public Integer getEmpno() {
    16         return empno;
    17     }
    18 
    19     public void setEmpno(Integer empno) {
    20         this.empno = empno;
    21     }
    22 
    23     public String getEname() {
    24         return ename;
    25     }
    26 
    27     public void setEname(String ename) {
    28         this.ename = ename;
    29     }
    30 
    31     public String getJob() {
    32         return job;
    33     }
    34 
    35     public void setJob(String job) {
    36         this.job = job;
    37     }
    38 
    39     public String getMgr() {
    40         return mgr;
    41     }
    42 
    43     public void setMgr(String mgr) {
    44         this.mgr = mgr;
    45     }
    46 
    47     public Date getHiredate() {
    48         return hiredate;
    49     }
    50 
    51     public void setHiredate(Date hiredate) {
    52         this.hiredate = hiredate;
    53     }
    54 
    55     public double getSal() {
    56         return sal;
    57     }
    58 
    59     public void setSal(double sal) {
    60         this.sal = sal;
    61     }
    62 
    63     
    64 }
    View Code

    3.配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.zdsofe.entity.one2many">
    <class name="Dept" table="dept">
    <id name="deptno" column="deptno">
    <generator class="native"></generator>
    </id>
    <property name="dname"></property>
    <property name="loc"></property>
    <!--  关联,cascade设置级联-->
    <set name="emps" cascade="save-update,delete-orphan">
    <!--关联外键  -->
    <key column="empno"/>
    <one-to-many class="Emp"/>
    
    </set>
    </class>
    </hibernate-mapping>
        
    View Code
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.zdsofe.entity.one2many">
    <class name="Emp" table="emp">
    <id name="empno" column="empno">
    <generator class="native"></generator>
    </id>
    <property name="ename"></property>
    <property name="job"></property>
    <property name="mgr"></property>
    <property name="hiredate" type="date"></property>
    <property name="sal"></property>
    
    </class>
    <!-- 命名查询 -->
    <query name="findEmpById">
    <![CDATA[from Emp where empno=:id]]>
    </query>
    </hibernate-mapping>    
    View Code

    核心配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     5 <hibernate-configuration>
     6 <session-factory>
     7 <!-- 数据库连接文件 -->
     8 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
     9 <property name="connection.url">jdbc:mysql://localhost:3306/db_hibernate</property>
    10 <property name="connection.username">root</property>
    11 <property name="connection.password">775297</property>
    12 <!-- 数据库连接池 -->
    13 <property name="connection.pool_size">1</property>
    14 <!-- sql方言 -->
    15 <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    16 <!-- session环境 -->
    17 <property name="current_session_context_class">thread</property>
    18 <!-- 打印sql语句 -->
    19 <property name="show_sql">true</property>
    20 <!-- 格式化SQL语句 -->
    21 <property name="format_sql">true</property>
    22 <!-- 加载配置文件 多对一-->
    23 <!-- <mapping resource="com/zdsofe/entity/many2one/Dept.hbm.xml"/>
    24 <mapping resource="com/zdsofe/entity/many2one/Emp.hbm.xml"/>  -->
    25 <!-- 加载配置文件 一对多 -->
    26 <mapping resource="com/zdsofe/entity/one2many/Dept.hbm.xml"/>
    27 <mapping resource="com/zdsofe/entity/one2many/Emp.hbm.xml"/>  
    28 <!-- 加载配置文件  一对多双向 -->
    29 <!-- <mapping resource="com/zdsofe/entity/bothway/Dept.hbm.xml"/>
    30 <mapping resource="com/zdsofe/entity/bothway/Emp.hbm.xml"/>  -->
    31 <!-- 加载配置问价 多对多 -->
    32 <!-- <mapping resource="com/zdsofe/entity/many2many/Student.hbm.xml"/>
    33 <mapping resource="com/zdsofe/entity/many2many/Course.hbm.xml"/>  -->
    34 </session-factory>
    35 </hibernate-configuration>
    View Code

    布局和其他文件   (数据库在这就不描述了)

  • 相关阅读:
    async和await是如何实现异步编程?
    HD-ACM算法专攻系列(23)——Crixalis's Equipment
    HD-ACM算法专攻系列(22)——Max Sum
    HD-ACM算法专攻系列(21)——Wooden Sticks
    HD-ACM算法专攻系列(20)——七夕节
    HD-ACM算法专攻系列(19)——Leftmost Digit
    搭建Prometheus平台,你必须考虑的6个因素
    实用教程丨使用K3s和MySQL运行Rancher 2.4
    Kubernetes Ingress简单入门
    一文讲透Cluster API的前世、今生与未来
  • 原文地址:https://www.cnblogs.com/zclqian/p/7418592.html
Copyright © 2011-2022 走看看