叩丁狼java学习第九天-mybatis

发布于 2021-03-16  979 次阅读


1.mybatis参数处理

只有一个参数,

错误重现:发现调用时会抛出异常,原因本质接口的底层还是原来之之前的方法,就只支持一个参数的。

User login(String username, String password);
<select id="login" resultType="User">
SELECT id, username, password FROM user
WHERE username = #{username} AND password = #{password}
</select>

解决办法

User login1(Map<String, Object> param);
User login2(User param);
<select id="login1" resultType="User">
SELECT id, username, password FROM user
WHERE username = #{username} AND password = #{password}
</select>

<select id="login2" resultType="User">
SELECT id, username, password FROM user
WHERE username = #{username} AND password = #{password}
</select>

使用 @Param 注解解决方式

// 本质相当于构建一个 Map 对象,key 为注解 @Param 的值,value 为参数的值。
User login(@Param("username")String username, @Param("password")String
password);

集合/数组参数

当传递一个 List 对象或数组对象参数给 MyBatis 时,MyBatis 会自动把它包装到一个 Map 中,此时:
List 对象会以 list 作为 key,数组对象会以 array 作为 key,也可以使用注解 @Param 设置 key 名。

2.动态sql

2.1if 和 where

<select id="queryByMinSalaryAndMaxSalary" resultType="Employee">
SELECT id, name, sn, salary, deptId
FROM employee
<where>
<if test="minSalary != null">
AND salary &gt;= #{minSalary}
</if>
<if test="maxSalary != null">
AND salary &lt;= #{maxSalary}
</if>
</where>
</select>

2.2动态 SQL 之 set

<update id="update">
UPDATE employee
<set>
<if test="name != null">
name = #{name},
</if>
<if test="sn != null">
sn = #{sn},
</if>
<if test="salary != null">
salary = #{salary},
</if>
<if test="deptId != null">
deptId = #{deptId},
</if>
</set>
WHERE id = #{id}
</update>

2.3动态 SQL 之 set

<delete id="batchDelete">
DELETE FROM employee WHERE id IN
<!--
collection 遍历数组或集合的 key 或者属性名
open 遍历开始拼接的字符串
index 遍历索引
item 遍历元素
separator 每遍历元素拼接字符串
close 遍历结束拼接字符串
-->
<foreach collection="ids" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</delete>

欢迎欢迎~热烈欢迎~