一 MyBatis 与 jdbc
MyBatis 自带连接池;jdbc不带。
二 模糊查询
第一种
XML配置
```
UserMapper.xml
<select id="findByName" parameterType="String" resultType="com.tutu.domain.User">
SELECT * FROM USER WHERE username LIKE #{username}
</select>
测试
List<User> byName = mapper.findByName("%王%");
```
第二种
```
UserMapper.xml
<select id="findByName" parameterType="String" resultType="com.tutu.domain.User">
SELECT * FROM USER WHERE username LIKE "%"#{username}"%"
</select>
测试
List<User> byName = mapper.findByName("王");
注:如果想用#号,只能是 "%"#{username}"%",Oracle中除了别名都不能用双引号。
```
第三种
```
UserMapper.xml
<select id="findByName" parameterType="String" resultType="com.tutu.domain.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
测试
List<User> byName = mapper.findByName("王");
```
三 #{} 和 ${} 的区别
1 #{}
·是一个占位符;
·可以自动进行 java 类型 和 jdbc类型 的自动转换;
· 里面如果是字符类型 和 简单类型, 可以写任意值;
·如果是对象类型,接卸符合OGNL表达式规则;
·可以防止sql注入;
2 ${}
·是原封不动的sql拼接;
·不会进行自动转换;
· 里面如果是字符类型 和 简单类型,只能写 value;
·如果是对象类型,接卸符合OGNL表达式规则;
·无法防止sql注入
总结:
除了模糊查询 都用 #{}
四 包装类型做参数
1 概念
一次查询需要多个对象中的属性当条件的情况。
2 resultMap 和 resultType 的区别
如果数据库中的列名 和 pojo 中的属性名一致,使用resultType,否则用resultMap;
(需要起别名)
```
<resultMap id="userMap" type="com.tutu.domain.User">
<id property="id" column="_id"></id>
<result property="username" column="_username"></result>
//id 一般用于主键 result 一般用于普通列名
</resultMap>
<select id="findAllMap" resultMap="userMap">
...
</select>
```