• hibernate06--参数的绑定


    创建Dept实体类 以及 对应的 Dept.hbm.xml文件

    /**
     * @author 小豆腐
     *
     *部门的实体类
     */
    public class Dept {
        private  Integer  deptNo;  //部门编号
        private  String  dName;    //部门名称
        private  String  loc;  //地址
        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;
        }
        public Dept() {
            super();
        }
        public Dept(Integer deptNo, String dName, String loc) {
            super();
            this.deptNo = deptNo;
            this.dName = dName;
            this.loc = loc;
        }
        @Override
        public String toString() {
            return "Dept [deptNo=" + deptNo + ", dName=" + dName + ", loc=" + loc
                    + "]";
        }
        
        
    
    }
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="cn.bdqn.bean">
      <class name="Dept">
          <id name="deptNo">
              <generator class="sequence">
               <param name="sequence">sq_student_id</param>
              </generator>
          </id>
          <property name="loc"/>
          <property name="dName"/>
      </class>
    </hibernate-mapping>

    在hibernate.cfg.xml文件中管理映射文件

    <!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
        <property name="connection.url">
            jdbc:oracle:thin:@localhost:1521:orcl
        </property>
        <property name="connection.username">t10</property>
        <property name="connection.password">t10</property>
        <property name="connection.driver_class">
            oracle.jdbc.OracleDriver
        </property>
        <!--方言  -->
        <property name="dialect">
            org.hibernate.dialect.Oracle9Dialect
        </property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
    
    
        <!--加载我们配置的映射文件  全路径 -->
        <mapping resource="cn/bdqn/bean/Dept.hbm.xml" />
    
    </session-factory>
    </hibernate-configuration>

    创建对应的测试类

    package cn.bdqn.test;
    
    import java.util.Iterator;
    import java.util.List;
    
    import oracle.net.aso.s;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import cn.bdqn.bean.Dept;
    
    import com.sun.org.apache.bcel.internal.generic.NEW;
    
    
    /**
     * 
     * @author 小豆腐
     *                      以后的你,会感谢现在努力的自己!努力!坚持!不放弃!
     */
    public class DeptTest {
    
        Configuration configuration = null;
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
    
        // 测试方法有相同的代码块
        @Before
        public void before() {
            // 01.加载配置文件(hibernate.cfg.xml) 必须位于src的根目录下
            configuration = new Configuration().configure();
            // 02.创建会话工厂 设置成单例模式
            sessionFactory = configuration.buildSessionFactory();
            // 03.通过工厂创建会话session HttpSession(用户session)
            session = sessionFactory.openSession();
            // 04.利用面向对象的思想来操作数据库 增删改都必须开启事务
            transaction = session.beginTransaction();
        }
        
        @After  //关闭session  
        public  void  after(){
            //查询中没有session  做非空验证
            if (session!=null) {
                // 05.关闭session
                session.close();
            }
        }
        
        //查询所有
        @Test
        public  void  test01(){
            String  hql="from Dept";
            Query query = session.createQuery(hql);
            List list = query.list();
            for (Object object : list) {
                System.out.println(object);
            }
            
        }
        
        
        /**
         * 
         * 参数类型的绑定
         * 01.按照参数的位置进行查询
         *   查询deptNo是3的部门信息
         */
        @Test
        public  void  test02(){
            String  hql="from Dept where deptNo=?";
            //创建query对象
            Query query = session.createQuery(hql);
            //根据参数的位置进行赋值  前提要知道参数的类型   01.query.setInteger(0, 3);
            query.setParameter(0, 3);
            //查询唯一的结果
            Object object = query.uniqueResult();
            System.out.println(object);
        }
        
        /**
         * 02.按照参数的名称进行绑定     (:参数名称)
         *   查询部门名称为 研发部的  部门信息
         */
        
        @Test
        public  void  test03(){
            String  hql="from Dept where dName=:name";
            //创建query对象
            Query query = session.createQuery(hql);
            //根据参数的名称进行赋值      01.query.setString("name", "研发部");
            query.setParameter("name", "研发部");
            //查询唯一的结果
            Object object = query.uniqueResult();
            System.out.println(object);
        }
        
        /**
         * 动态的参数绑定
         * 
         *  查询部门表中   地址是xx  编号是xxx 部门名称是xxx的  部门信息
         *  
         *  这种方式不可取的! 因为把参数都写死了??
         *  用户有可能只输入部门名称。。。。。
         */
        
        @Test
        public  void  test04(){
            String  hql="from Dept where dName=:name and  loc=:location  and deptNo=:id ";
            //创建query对象
            Query query = session.createQuery(hql);
            //根据参数的名称进行赋值     
            query.setParameter("name", "研发部");
            query.setParameter("location", "1楼");
            query.setParameter("id", 1);
            //查询唯一的结果
            Object object = query.uniqueResult();
            System.out.println(object);
        }
        
        /**
         * 想实现动态参数的绑定! 
         * 01.得拼接字符串!
         * 02.类名需要设置别名
         */
        @Test
        public  void  test05(){
            //创建部门对象
            Dept dept=new Dept();
            dept.setdName("研发部");
            dept.setLoc("1楼");
            String  hql="from Dept d where 1=1 ";
            //创建字符串拼接的对象
            StringBuffer buffer=new StringBuffer(hql);
            //开始拼接  如果部门名称不为空
            if (dept.getdName()!=null&&!(dept.getdName().equals(""))) {
                buffer.append(" and d.dName like :name ");
            }
            //如果地址不为空
            if (dept.getLoc()!=null&&!(dept.getLoc().equals(""))) {
                buffer.append(" and d.loc like :location ");
            }
            //输出buffer
            System.out.println(buffer.toString());
            //创建query
            Query query = session.createQuery(buffer.toString());
            //绑定参数   推荐时候用参数名称的绑定
            query.setParameter("name", "%"+dept.getdName()+"%");
            query.setParameter("location", "%"+dept.getLoc()+"%");
            List list = query.list();
            for (Object object : list) {
                System.out.println(object);
            }
        }
        
        /**
         *  如果参数多的情况下,肯定得使用整个对象来作为参数!
         *  必须保证  参数的名称 和 属性的名称 完全一致
         */
        
        @Test
        public  void  test06(){
            //创建部门对象
            Dept dept=new Dept();
            dept.setdName("研发部");
            dept.setLoc("1楼");
            String  hql="from Dept d where 1=1 ";
            //创建字符串拼接的对象
            StringBuffer buffer=new StringBuffer(hql);
            //开始拼接  如果部门名称不为空
            if (dept.getdName()!=null&&!(dept.getdName().equals(""))) {
                buffer.append(" and d.dName like :dName ");
            }
            //如果地址不为空
            if (dept.getLoc()!=null&&!(dept.getLoc().equals(""))) {
                buffer.append(" and d.loc like :loc ");
            }
            //输出buffer
            System.out.println(buffer.toString());
            //创建query
            Query query = session.createQuery(buffer.toString());
            //绑定参数 传递整个对象 
            query.setProperties(dept);
            List list = query.list();
            for (Object object : list) {
                System.out.println(object);
            }
        }
    
        /**
         * 模糊查询  部门信息
         */
        @Test
        public  void  test07(){
        String  hql="from Dept  where dName like :name";
        List list = session.createQuery(hql).setParameter("name", "%部%").list();
            for (Object object : list) {
                System.out.println(object);
            }
            
        }
        
        /**
         * 投影查询:就是查询指定的一部分字段!
         * 01.将每条查询结果封装成Object对象
         */
        @Test
        public  void  test08(){
        String  hql="select dName from Dept";
        //List list = session.createQuery(hql).list();
        List<Object> list = session.createQuery(hql).list();
            for (Object object : list) {
                System.out.println(object);
             }
        }
        /**
         * 02.将每条查询结果封装成Object数组
         */
        @Test
        public  void  test09(){
            String  hql="select dName,loc from Dept";
            /**List<Object> list = session.createQuery(hql).list();
             * 运行的结果是   [Ljava.lang.Object;@188db4c0
             * 我们发现这个是数组!  所以 Object  写成Object[]
             */
            List<Object[]> list = session.createQuery(hql).list();
            for (Object[] object : list) {
                System.out.println("dName==="+object[0]);
                System.out.println("loc==="+object[1]);
             }
        }
        /**
         * 03.将每条查询结果 通过  构造函数  封装成对象!
         *      001.前提是  类中 必须要有 对应的 构造方法!
         *      002.参数名称 必须和类中的属性名一致!
         */
        @Test
        public  void  test10(){
            String  hql="select  new Dept(deptNo,dName,loc) from Dept";
            List<Dept> list = session.createQuery(hql).list();
            for (Dept d : list) {
                System.out.println(d.getdName());
            }
        }
        
        /**
         * 分页查询
         * 01.查询总记录数(前提)
         * 02.每页显示多少数据
         * 03.计算总页数
         * 04.想查看第几页的内容
         * 05.配置query对象的方法参数
         * 06.开始查询
         * 
         * 
         * 每页显示两条数据 查询第2页的内容
         */
        @Test
        public  void  test11(){
            String  hql="select count(*) from Dept";
            //获取总记录数
            int  counts=((Long)session.createQuery(hql).uniqueResult()).intValue();
            //页大小
            int  pageSize=2;
            //求总页数
            int totalPage=(counts%pageSize==0)?(counts/pageSize):(counts/pageSize+1);
            //显示第2页的内容
            int  pageIndex=1;
            hql="from Dept";//查询所有
            Query query = session.createQuery(hql);
            //设置方法的参数  从那一条记录开始
            query.setFirstResult((pageIndex-1)*pageSize);
            //每页显示多少条
            query.setMaxResults(pageSize);
            List list = query.list();
            for (Object object : list) {
                System.out.println(object);
            }
        }
    }
  • 相关阅读:
    解决通用串行总线(USB)控制器有感叹号
    开发者需要了解的WebKit
    Win7系统搭建WiFi热点详细攻略
    给Qt生成的exe执行程序添加版本信息
    IIS(IISReset.exe)命令行
    .net开发微信公众平台
    使用ExitProcess()结束本进程、TerminateProcess 结束进程
    Hosts文件路径及修改方法
    本地动态SQL
    Oracle Package
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7093534.html
Copyright © 2020-2023  润新知