创建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