Spring 整合 Mybatis
引入依赖
在 pom.xml 引入 Mybatis 相关依赖。
org.mybatis
mybatis
3.2.8
org.mybatis
mybatis-spring
1.3.1
org.springframework
spring-jdbc
4.3.17.RELEASE
创建 Mybatis 配置文件
在 resource 目录下创建 mybatis-config 配置文件。
gt;
创建集成配置文件
在 resource 目录下创建一个 spring-context-mybatis.xml 的集成配置文件。
CRUD 案例
新增
INSERT INTO tb_user (
id,
username,
password,
phone,
email,
created,
updated
)
VALUES
(
#{id},
#{username},
#{password},
#{phone},
#{email},
#{created},
#{update}
)
删除
DELETE FROM tb_user WHERE id = #{id}
查询
SELECT
a.id,
a.username,
a.password,
a.phone,
a.email,
a.created,
a.updated AS "update"
FROM
tb_user AS a
WHERE
a.id = #{id}
更新
UPDATE
tb_user
SET
username = #{username},
password = #{password},
phone = #{phone},
email = #{email},
created = #{created},
updated = #{update}
WHERE id = #{id}
MyBatis 动态 SQL
动态 SQL 主要用于解决查询条件不确定的情况:在程序运行期间,根据用户提交的查询条件进行查询。提交的查询条件不同,执行的 SQL 语句不同。若将每种可能的情况均逐一列出,对所有条件进行排列组合,将会出现大量的 SQL 语句。此时,可使用动态 SQL 来解决这样的问题。这里的条件判断使用的表达式为 OGNL 表达式。常用的动态 SQL 标签有 、、、 等。
注意:在 mapper 的动态 SQL 中若出现 >、=,<= 等符号,最好将其转换为实体符号。否则,XML 可能会出现解析出错问题,特别是 < 在 XML 中是绝对不能出现的。
if 标签
对于该标签的执行,当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL 语句中。
案例
为了解决两个条件均未做设定的情况,在 where 后添加了一个“1=1”的条件。这样就不至于两个条件均未设定而出现只剩下一个 where,而没有任何可拼接的条件的不完整 SQL 语句。
gt;
SELECT
*
FROM
student
WHERE 1 = 1
AND name LIKE concat('%', #{name}, '%')
AND age > #{age}
where 标签
标签的中存在一个比较麻烦的地方:需要在 where 后手工添加 1=1 的子句。因为,若 where 后的所有 条件均为 false,而 where 后若又没有 1=1 子句,则 SQL 中就会只剩下一个空的 where,SQL 出错。所以,在 where 后,需要添加永为真子句 1=1,以防止这种情况的发生。但当数据量很大时,会严重影响查询效率。
案例
SELECT
*
FROM
student
AND name LIKE concat('%', #{name}, '%')
AND age > #{age}
choose 标签
该标签中只可以包含 、,可以包含多个 与一个 。它们联合使用,完成 Java 中的开关语句 switch case 功能。
案例
本例要完成的需求是,若姓名不空,则按照姓名查询;若姓名为空,则按照年龄查询;若没有查询条件,则没有查询结果。
SELECT
*
FROM
student
AND name LIKE concat('%', #{name}, '%')
AND age > #{age}
AND 1 != 1
foreach 标签
该标签用于实现对于数组与集合的遍历。对其使用,需要注意:collection 表示要遍历的集合类型,这里是数组,即 array。open、close、separator 为对遍历内容的 SQL 拼接。
遍历数组案例
SELECT
*
FROM
student
WHERE id IN
#{id}
遍历泛型为基本类型的集合案例
/**
使用 foreach 标签以 list 基本类型的形式查询
@param ids
@return
/
public List selectByForeachWithListBase(List ids);
SELECT
FROM
student
WHERE id IN
#{id}
遍历泛型为自定义类型的集合案例
/**
使用 foreach 标签以 list 自定义类型的形式查询
@param students
@return
/
public List selectByForeachWithListCustom(List students);
SELECT
FROM
student
WHERE id IN
#{student.id}
sql 标签
该标签用于定义 SQL 片断,以便其它 SQL 标签复用。而其它标签使用该 SQL 片断, 需要使用 子标签。该标签可以定义 SQL 语句中的任何部分,所以 子标签可以放在动态 SQL 的任何位置。
案例
SELECT
id,
name,
age,
score
FROM
student
使用 sql 标签
亚马逊测评 www.yisuping.com