博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate06--参数的绑定
阅读量:5128 次
发布时间:2019-06-13

本文共 8932 字,大约阅读时间需要 29 分钟。

创建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                + "]";    }        }
sq_student_id

 

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

jdbc:oracle:thin:@localhost:1521:orcl
t10
t10
oracle.jdbc.OracleDriver
org.hibernate.dialect.Oracle9Dialect
true
update

创建对应的测试类

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 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 list = session.createQuery(hql).list();         * 运行的结果是   [Ljava.lang.Object;@188db4c0         * 我们发现这个是数组!  所以 Object  写成Object[]         */        List
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
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); } }}

转载于:https://www.cnblogs.com/HHR-SUN/p/7190717.html

你可能感兴趣的文章
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>