MyBatis中的XML实现和动态SQL实现示例详解
一、XML实现
先在新建的XML文件中写入如下内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserInfoMapper"> </mapper>
再在mapper标签里写入操作数据库的增删查改。
1.1增
mapper层声明的方法为:
Integer insert(UserInfo userInfo);
XML文件中的实现为:
<insert id = "insert">
insert into
userinfo
(username, password, age, gender, phone)
values
(#{username}, #{password}, #{age}, #{gender}, #{phone})
</insert> 1.2删
mapper层声明的方法为:
Integer delete(Integer id);
XML文件中的实现为:
<delete id="delete">
delete from userinfo where id = #{id}
</delete>1.3查
mapper层声明的方法为:
List<UserInfo> queryUserList();
XML文件中的实现为:
<select id="queryUserList" resultType="com.example.demo.model.UserInfo">
select * from userinfo
</select>1.4改
mapper层声明的方法为:
Integer update(UserInfo userInfo);
XML文件中的实现为:
<update id="update">
update userinfo
set password = #{password}
where id = #{id}
</update>二、XML方式实现动态SQL
2.1if标签
使用示例:
<update id = "updateBook">
update book_info
<set>
<if test = "bookName != null">
book_name = #{bookName},
</if>
<if test = "author != null">
author = #{author},
</if>
<if test = "count != null">
count = #{count},
</if>
<if test = "price != null">
price = #{price},
</if>
<if test = "publish != null">
publish = #{publish},
</if>
<if test = "status != null">
status = #{status},
</if>
</set>
where id = #{id}
</update>
如果满足bookName!=null这个条件,则会显示if标签里的内容。
2.2trim标签
使用示例:
<insert id="insert2" useGeneratedKeys="true" keyProperty="id">
insert into
userinfo
<trim prefixOverrides="," prefix="(" suffix=")" suffixOverrides=",">
<if test="username!=null">
username,
</if>
<if test="password!=null">
password,
</if>
<if test="age!=null">
age,
</if>
<if test="gender!=null">
gender,
</if>
<if test="phone!=null">
phone,
</if>
</trim>
values
<trim prefixOverrides="," prefix="(" suffix=")" suffixOverrides=",">
<if test="username!=null">
#{username},
</if>
<if test="password!=null">
#{password},
</if>
<if test="age!=null">
#{age},
</if>
<if test="gender!=null">
#{gender},
</if>
<if test="phone!=null">
#{phone},
</if>
</trim>
</insert>
2.3where标签
使用示例:
<select id="queryUserByWhere" resultType="com.yixing.mybatis.model.UserInfo">
select * from userinfo
<where>
<if test="userName!=null">
username= #{userName}
</if>
<if test="age!=null">
and age=#{age}
</if>
</where>
</select>where标签的作用是删除代码块最前面的and;当查询条件为空时,会去掉where关键字。
2.4set标签
使用示例:
<update id="update2">
update userinfo
<set>
<if test="username!=null">
username = #{username},
</if>
<if test="password!=null">
password = #{password},
</if>
<if test="age!=null">
age = #{age}
</if>
</set>
where id = #{id}
</update>set标签会删除代码块最后面的逗号。
2.5foreach标签
使用示例:
<update id="batchDelete">
update book_info
set `status` = 0
where id in
<foreach collection="ids" open="(" close=")" separator="," item="id">
#{id}
</foreach>
</update>默认情况下,如果mapper层声明方法的参数是List类型,则foreach标签里的collection会等于"list";如果mapper层声明方法的参数是数组类型,则foreach标签里的collection会等于"array",这时mybatis自动做的。我们可以在mapper层声明方法中用@Param注解对声明方法的参数进行重命名。
2.6include标签和sql标签
<sql id="cols">
id, username,password,gender,age,phone,
</sql>
<select id="queryUserList" resultType="com.yixing.mybatis.model.UserInfo">
select
<include refid="cols"></include>
delete_flag,
create_time,
update_time
from userinfo
</select>我们可以将XML中重复出现的内容提取出来放到sql标签中,当需要用到sql标签中的内容时,用include标签将sql标签中的内容引进来即可。
到此这篇关于MyBatis中的XML实现和动态SQL实现的文章就介绍到这了,更多相关MyBatis XML和动态SQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解决Maven项目pom.xml导入了Junit包还是用不了@Test注解问题
在Maven项目中,如果在非test目录下使用@Test注解,可能会因为pom.xml中<scope>test</scope>的设置而无法使用,正确做法是将测试代码放在src/test/java目录下,或去除<scope>test</scope>限制,这样可以确保Junit依赖正确加载并应用于适当的代码部分2024-10-10
Java中构造方法set/get和toString的使用详解
这篇文章主要介绍了Java中构造方法set/get和toString的使用详解,构造函数的最大作用就是创建对象时完成初始化,当我们在new一个对象并传入参数的时候,会自动调用构造函数并完成参数的初始化,需要的朋友可以参考下2019-07-07
java操作json对象出现StackOverflow错误的问题及解决
这篇文章主要介绍了java操作json对象出现StackOverflow错误的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06
Mybatis之解决collection一对多问题(显示的结果没有整合到一起)
这篇文章主要介绍了Mybatis之解决collection一对多问题(显示的结果没有整合到一起),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-03-03


最新评论