MyBatis 开发使用笔记(一)

  1. mybatis中的${} 和#{} 的作用和区别

    当使用parameterType向SQL传递参数的时候,可以使用基本数据类型int,String,Map和自定义的Model类,在SQL中引用这些参数的时候两种方式都可以使用。

示例1:
执行SQL:Select * from emp where name = #{employeeName}
参数:employeeName=>Smith
解析后执行的SQL:Select * from emp where name = ?  ==》Select * from emp where name = ‘Simith’

执行SQL:Select * from emp where name = ${employeeName}
参数:employeeName传入值为:Smith
解析后执行的SQL:Select * from emp where name =Smith

#{} 会生成preparedStatement .预编译SQL语句,这样比较安全,防止SQL注入,而且传入的值是字符串类型

${} : 相当于直接赋值,不能防止SQL注入和预编译

总结,建议使用#{}方式,但是在order by ${name} 这些固定不变的情况下,也可以使用${} 方式。

参考:http://blog.csdn.net/szwangdf/article/details/26714603

http://blog.csdn.net/kobi521/article/details/16941403

http://blog.csdn.net/shaozengwei/article/details/17446247


二.mybatis 中使用模糊语句查询


模糊查询:

工作中用到,写三种用法吧,第四种为大小写匹配查询

 

1. sql中字符串拼接

   SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');

 

2. 使用 ${...} 代替 #{...}

   SELECT * FROM tableName WHERE name LIKE '%${text}%'; 

 

3. 程序中拼接

   Java

   // or String searchText = "%" + text + "%";

   String searchText = new StringBuilder("%").append(text).append("%").toString();

   parameterMap.put("text", searchText);

 

   SqlMap.xml

   SELECT * FROM tableName WHERE name LIKE #{text};

 

4. 大小写匹配查询

[sql] view plaincopy

SELECT *  FROM TABLENAME  WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'  

 --或者是  

SELECT *   FROM TABLENAME  WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'  

参考:http://blog.csdn.net/luqin1988/article/details/7865643

三 ,mybatis中resultMap 和resultType 的区别

MyBatis 开发使用笔记(一)_第1张图片

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时存在。

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

参考:http://www.tuicool.com/articles/ju2Y7n

你可能感兴趣的:(mybatis)