今天突然听到动态sql语句这个名字,我想了一下,好像脑袋里面没有这个概念;上网查了查,动态和静态都分别是什么?
拼接sql语句来实现增删改查,可以让代码复用性增强;
静态sql就是平常写死的sql语句;
非mybatis框架的持久层
从前我的动态sql是这样拼接,通过一个str空字符串,判断传来的参数是否为空,如果为空不在where 1=1 后面拼接,如果传过来了,那么就拼接;
/**
* 获取分页数据
*/
@Override
public List> getPage(int start, int rows, Map map) {
// TODO Auto-generated method stub
//排序参数
String str = “”;
if(map.get(“sort”)!=null){
str = " order by “+map.get(“sort”)+” "+map.get(“order”);
}
System.out.println(“select id,number,driver,store,type,color,volume,capacity,state from tb_car “+setParams(map)+str+” limit “+start+”,”+rows);
return BaseDao.selectMap(“select id,number,driver,store,type,color,volume,capacity,state from tb_car “+setParams(map)+str+” limit “+start+”,”+rows, null);
}
/**
* 封装参数
* @param map
* @return
*/
private String setParams(Map map){
//查询参数
String str1 = " where 1=1 ";
Object id = map.get(“id”);
//拼接id
if(id!=null&&!"".equals(id)){
str1 += " and id ="+id;
}
//拼接numbmer
Object number = map.get(“number”);
//拼接numbmer
if(number!=null&&!"".equals(number)){
str1 += " and number ="+number;
}
return str1;
}
使用Mybatis框架
现在学了Mybatis框架,动态sql就可以更改成使用
标签嵌套标签来拼接字符串,这里有一个潜规则(mybatis底层框架封装的一个小功能),如果第一个条件是 and 或者or 那么就直接替换成where,这样的好处是我们不用在sql语句后面拼接where 1=1 这个条件,使用标签就可以替换and和or;
PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>
select * from emp and empno = #{empno} and ename like ‘%’||#{ename}||’%’ and job = #{job} and hiredate > to_date(#{beginTmie}, ‘yyyy-mm-dd’) and hiredate < to_date(#{endTmie}, ‘yyyy-mm-dd’)
补充:Map传值的大小写问题
我的mybatis版本
mybatis的sql语句的编写的字段名,可以为小写,例如第一个and之后的empno的数据库内为大写,这里写EMPNO,EMPno,EmpNo都不影响查询结果,意思就是.xml文件里面的字段名都不区分大小写。
。。。。。。此处为省略的代码。。。 and empno = #{empno1} 。。。。。。此处为省略的代码。。。 但是后面那个empno1就有讲究了,其他三个empno1,都是Map的put方法的传入的key值,key值必须得与这三个值相同。例如: Map paramMap = new HashMap(); paramMap.put(“empno1”,9876);
沈阳专业治疗疱疹医院:http://www.sdjk99.com/
沈阳性病医院:http://www.sy360jk.com/