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);
}
}
}
hibernate06--参数的绑定的更多相关文章
- SpringMVC源码之参数解析绑定原理
摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...
- springmvc请求参数的绑定和获取
请求参数的绑定和获取: 获取页面请求的参数,是javaweb必不可少的一个环节,在struts中,是通过再Action中定义属性,或者Model的方式进行数据绑定和获取.需要提供setter或gett ...
- SpringMVC-请求参数的绑定
绑定的机制 表单提交的数据都是k=v格式的 username=haha&password=123 SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的 要求 ...
- 16 SpringMVC 的请求参数的绑定与常用注解
1.SpringMVC 绑定请求参数 (1)支持的数据类型 基本类型参数: 包括基本类型和 String 类型POJO 类型参数: 包括实体类,以及关联的实体类数组和集合类型参数: 包括 List 结 ...
- springmvc 参数解析绑定原理
handlerMethodArgumentResolver:方法参数解析器接口,这个接口是springmvc参数解析绑定的核心接口.不同的参数类型绑定都是通过实行这个接口来实现.也可以通过实现这个接口 ...
- 四 SpringMVC与页面之间的参数传递&高级参数的绑定&日期类型的转换
参数传递: 1 原生方式:使用Servlet API , request.getParameter("id"); 2 直接将请求参数作为Controller中的形参: publ ...
- 零基础学习java------38---------spring中关于通知类型的补充,springmvc,springmvc入门程序,访问保护资源,参数的绑定(简单数据类型,POJO,包装类),返回数据类型,三大组件,注解
一. 通知类型 spring aop通知(advice)分成五类: (1)前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常. (2)正常返回通知 ...
- SpringMVC参数自动绑定
SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") publi ...
- spring mvc 的各种参数的绑定方式
本文转自http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: ...
- ORACLE 参数设置绑定变量
使用 CURSOR_SHARING 参数 EXACT 默认,不替换 SIMIAR 当替换不会影响到执行计划时,才会将字面量替换成绑定变量 FORCE 只要有可能,字面量会被替换为绑定变量
随机推荐
- Java全栈程序员之05:Ubuntu下安装TOMCAT、集成到IDEA
使用idea绝不是开发一个Hello World这么简单,现在我们要使用idea进行企业级开发(也就是JavaEE)的准备了,那么首先,我们就得有一个web应用服务器.选什么呢?当然首选是大名鼎鼎的T ...
- 主流浏览器Css&js hack写法
参考: BROWSER HACKS 主流浏览器的Hack写法
- springMVC4(7)模型视图方法源代码综合分析
在完整web开发中.springMVC主要充当了控制层的角色.它接受视图层的请求.获取视图层请求数据,再对数据进行业务逻辑处理.然后封装成视图层须要的模型数据,再将数据导向到jsp等视图界面. 在前面 ...
- 主流CTR预估模型的演化及对比
https://zhuanlan.zhihu.com/p/35465875 学习和预测用户的反馈对于个性化推荐.信息检索和在线广告等领域都有着极其重要的作用.在这些领域,用户的反馈行为包括点击.收藏. ...
- 运维笔记10 (Linux软件的安装与管理(rpm,yum))
概述:用rpm安装和管理软件(rpm解决依赖性),用yum安装与管理软件(yum解决依赖性). 1.linux的软件 linux能够说是一款改变时代的操作系统,可是一个操作系统再优秀假设没有好用的应用 ...
- 全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件
作者: zyl910 一.缘由 RSA是一种常用的非对称加密算法.所以有时需要在不用编程语言中分别使用RSA的加密.解密.例如用Java做后台服务端,用C#开发桌面的客户端软件时. 由于 .Net.J ...
- Clion使用MinGW编译好的boost库
MinGW编译Boost库可以参考我之前写的编译Boost的文章. 以下是cmake链接boost静态库的配置: cmake_minimum_required(VERSION 3.8) project ...
- 自然语言处理中的N-Gram模型
N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理.另外一方面,N-Gram的另外一个作用是 ...
- InputStream为什么不能被重复读取?
最近上传阿里云的时候同一个文件上传两个服务地址,第一个文件读取以后第二个再去读取就拿不到了.代码如下: //内网上传OSS获取key值 String ossKey = OSSClientUtil.ge ...
- 8款基于Jquery的WEB前端动画特效
1.超炫酷的30个jQuery按钮悬停动画 按钮插件是最常见的jQuery插件之一,因为它用途广泛,而且配置起来最为方便.今天我们要分享的是30个超炫酷的jQuery悬停按钮动画,当我们将鼠标滑过按钮 ...