HibernateTemplate回调函数的使用以及条件语句的拼接
2017-02-09 17:39
295 查看
一:查询框架流程(架构)
为了实现查询代码复用的效率,因此需要给所有的查询写一个抽象类BaseQuery,因此在将来收到页面的查询条件数据,就以BaseQuery的格式传递,action到serrvice层以BaseQuery的格式传递,service传到dao的数据也以BaseQuery的格式传递,在BaseQuey里边有一个map类型的属性,查询条件的拼接都在调用basequery.buildWhere的时候拼接好了,
这个架构应该是项目的一个亮点应为如何根据用户输入的条件来查询具体的数据,这个架构大大的提高了代码的复用率
BaseQuery是一个基础的约束类,这个类用于获取到用户在页面输入的查询条件,并且将查询条件进行封装,封装成map的形式,然后再后台查询的时候进行hql语句的拼接,hql语句的拼接也是其中的一个亮点
条件语句的拼接类,这个类使用到了hibernateTemplate的回调函数,在页面数据查询的时候,回调函数扮演者极为重要的作用,所以这个地方的重点是回调函数的使用,下面以查询某张表的记录的总的条数为例子来展示
为了实现查询代码复用的效率,因此需要给所有的查询写一个抽象类BaseQuery,因此在将来收到页面的查询条件数据,就以BaseQuery的格式传递,action到serrvice层以BaseQuery的格式传递,service传到dao的数据也以BaseQuery的格式传递,在BaseQuey里边有一个map类型的属性,查询条件的拼接都在调用basequery.buildWhere的时候拼接好了,
这个架构应该是项目的一个亮点应为如何根据用户输入的条件来查询具体的数据,这个架构大大的提高了代码的复用率
BaseQuery是一个基础的约束类,这个类用于获取到用户在页面输入的查询条件,并且将查询条件进行封装,封装成map的形式,然后再后台查询的时候进行hql语句的拼接,hql语句的拼接也是其中的一个亮点
package cn.edu.nwsuaf.GYL.query; import java.util.HashMap; import java.util.Map; //两个功能 //1:提供一个抽象方法,把具体页面上的表单元素封装成map, //2:提供一个map,供子类使用 public abstract class BaseQuery { //把页面上表单中的表单元素封装成map结构 private Map<String, Object> keyValues = new HashMap<String, Object>(); //当前页码,初始化的值为1 private int currentPage = 1; //一页显示的条数 private int pageSize = 2; //把页面上的查询条件进行封装,封装成一个map(String ,object)类型 //并且进行返回 public abstract Map<String, Object> buildWhere(); public Map<String, Object> getKeyValues() { return keyValues; } public void setKeyValues(Map<String, Object> keyValues) { this.keyValues = keyValues; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } }
条件语句的拼接类,这个类使用到了hibernateTemplate的回调函数,在页面数据查询的时候,回调函数扮演者极为重要的作用,所以这个地方的重点是回调函数的使用,下面以查询某张表的记录的总的条数为例子来展示
@Override public int getCount(final BaseQuery baseQuery) { //hibernate的回调函数 return this.hibernateTemplate.execute(new HibernateCallback<Integer>() { @Override public Integer doInHibernate(Session session) throws HibernateException, SQLException { // StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("select count(*) from Department"); stringBuffer.append(" where 1=1 "); //获取所有的查询条件 Map<String, Object> keyValues = baseQuery.buildWhere(); //拼接查询条件,也就是拼接where条件语句,这个语句是条件的拼接 for(Entry<String, Object> entry:keyValues.entrySet()) { stringBuffer.append("and "+entry.getKey()+"=:"+entry.getKey()); } Query query = session.createQuery(stringBuffer.toString());//存放一个hql语句 System.out.println("拼接的条件语句是:"+stringBuffer.toString()); //接下来进行值的拼接,把where条件中的参数传递值的过程 for(Entry<String, Object> entry:keyValues.entrySet()) { query.setParameter(entry.getKey(),entry.getValue()); } //获取记录的条数 Long count = (Long) query.uniqueResult(); return count.intValue(); } }); }
相关文章推荐
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句
- 求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A? B:C)
- C/C++学习(一)题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- yii框架中findall方法取数据使用总结,包括select各种条件,where条件,order by条件,limit限制以及使用单纯sql语句query时占位符的使用等
- 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
- 求1+2+…+n 要求不能使用 乘 除 法、for、while、if、else、switch、case等关键字以及条件判断语句
- 使用Hibernate的session执行任意SQL语句以及整个事务
- PHP 不用求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- C语言奇思妙想:求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- 求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句
- 求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句
- 每天学习一算法系列(12) (求1+2+…+n,不能使用乘除法,for、while、if 、else、switch、case 等关键字以及条件判断语句)
- C语言奇思妙想:求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法