Mybatis动态sql实现CRUD操作
目录
一、.select查询
select查询也可以使用之前的机制在配置文件中直接编写sql,但是select语句的where字句中需要拼接哪些查询字段是根据
传入的值决定的,此时可以通过Mybatis提供的标签实现判断,动态的去拼接select语句,而不是按照每次传入的条件参数
不同而去分情况写一堆的sql
- 在拼接的过程中Mybatis标签会根据传入值是否为空,自动去掉多余的and
?
(1)select动态sql
<select id="selc01" resultType="cn.cn.wyy.domain.User">
select * from user
<where>
<if test="id!=0">id = #{id}</if>
<if test="name!=null">and name = #{name}</if>
<if test="age!=0">and age = #{age}</if>
</where>
</select>
(2)测试类
@Test
public void test02(){
//User user = new User(3,"ccc",25);
//User user = new User(3,null,25);
//User user = new User(0,null,25);
User user = new User();
List<User> list = session.selectList("cn.cn.wyy.mapper.UserMapper.selc01",user);
System.out.println(list);
}
?
?二、.insert插入
? ? insert插入也可以使用之前的机制在配置文件中直接编写sql,但是insert语句的参数和值的列表,需要拼接哪些字段是根据传入的值决定,此时可以通过Mybatis提供的标签来实现判断,动态的拼接insert语句。
- 在拼接的过程中Mybatis标签会根据传入值是否为空,自动去掉多余的逗号
?
下面使用几个例子中左括号开头,左括开头(prefix),右括号结尾(suffix)
(1)sql语句
<insert id="insert01">
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
id,
<if test="name!=null">name,</if>
<if test="age!=0">age,</if>
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
null,
<if test="name!=null">#{name},</if>
<if test="age!=0">#{age},</if>
</trim>
</insert>
(2)测试代码
@Test
public void test03(){
//User user = new User(0,"xxx",99);
//User user = new User(0,"zzz",0);
User user = new User(0,null,0);
session.insert("cn.cn.tedu.mapper.UserMapper.insert01",user);
session.commit();
}
?三、update修改
? ? update修改可以使用原始的机制在配置文件中直接编写sql,但是update语句的set语句中,需要拼接哪些字段。是根据传入的值决定的,此时通过Mybatis提供的标签来实现判断,动态的拼接update语句。?
update set有多个字段, 后面的逗号都需要添加,Mybatis的set标签会自动去除
如果age设置为0,那么下面的语句就会默认age传入的值为空,从而去掉该字段,不用在拼接它。
但是非要传入age的值为0,因为语句条件都是自己写的,可以将age类型由int 换为Integer那么传入为null才无效,可以传入0,也可以不用动态标签,单独写一个不带标签的sql
?
?(1)动态sql
<update id="update01">
update user
<set>
<if test="name!=null">name=#{name},</if>
<if test="age!=0">age=#{age},</if>
</set>
where id = #{id};
</update>
(2)测试类
@Test
public void test01() throws IOException {
//3.调用Sql
//User user = new User(3,"xxx",88);
//User user = new User(3,"ccc",0);
User user = new User(3,null,25);
session.update("cn.cn.wyy.mapper.UserMapper.update01",user);
session.commit();
}
四、delete 删除
? ?delete删除可以使用原始的机制在配置文件中直接编写sql,但是delete语句的删除条件,需要拼接哪些字段。是根据传入的值决定的,此时通过Mybatis提供的标签来实现判断,动态的拼接delete语句。
对于下面配置语句:
collection中是集合对象的名称
item:i变量相当于for循环中的i
open:以左括号开始
close:以右括号结束
separator:通过逗号分隔
(1)动态sql
<delete id="del02">
delete from user where id in
<foreach collection="list" item="i" open="(" close=")" separator=",">
#{i}
</foreach>
</delete>
<delete id="del01">
delete from user
<where>
<if test="id!=0">id = #{id}</if>
<if test="name!=null">and name = #{name}</if>
<if test="age!=0">and age = #{age}</if>
</where>
</delete>
(2)测试类
/**
* 删除
*/
@Test
public void test05(){
List list = Arrays.asList(2,3,5);
session.delete("cn.cn.wyy.mapper.UserMapper.del02",list);
session.commit();
}
/**
* 删除
*/
@Test
public void test04(){
//User user = new User(12,null,0);
//User user = new User(11,"zzz",0);
User user = new User(10,"xxx",99);
session.delete("cn.cn.wyy.mapper.UserMapper.del01",user);
session.commit();
}
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!