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); 
        } 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12114.html

(0)
上一篇 2021年7月19日 14:24
下一篇 2021年7月19日 14:24

相关推荐

发表回复

登录后才能评论