mybatis框架的动态sql语句

今天突然听到动态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/

猜你喜欢

转载自blog.csdn.net/a13804947436/article/details/84226033