SpringBoot整合MyBatis-Plus XML操作数据库实战教程
作者:huaweichenai
前面我们已经学习使用MyBatis-Plus依赖实现操作数据库,MyBatis-Plus还支持XML文件来操作数据库,一般适合于复杂的SQL操作
SpringBoot集成MyBatis-Plus实现数据库分页功能
SpringBoot使用MyBatis-Plus依赖实现数据库操作的实战教学
前期的基础配置信息参考上面的文档操作
一、yml配置XML地址
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=True
username: root
password: xxxx
mybatis-plus:
# mapper xml文件位置(如果自定义xml才需要)
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
# 主键策略:自增
id-type: auto
configuration:
### 开启打印sql配置
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
auto-mapping-behavior: partial
map-underscore-to-camel-case: true二、启动类开启Mapper扫描
在启动类增加@MapperScan("com.example.demo.mapper"),com.example.demo.mapper对应Mapper接口地址
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}三、编写XML
根据上面配置的xml文件配置:classpath:/mapper/*/.xml,在src/main/resources/mapper/user目录下创建UserMapper.xml文件
1.查询
<?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.UserMapper">
<!-- 查询所有 -->
<select id="selectAllUser" resultType="com.example.demo.model.User">
select id,username,age from user
</select>
<!-- 根据id查询 -->
<select id="selectByUserId" resultType="com.example.demo.model.User">
select id,username,age from user where id = #{id}
</select>
<!--指定条件查询-->
<select id="selectUserByCondition" resultType="com.example.demo.model.User">
select id,username,age
from user
<where>
<if test="username != null and username != ''">
and username like concat('%',#{username},'%')
</if>
<if test="age != null">
and age = #{age}
</if>
</where>
</select>
</mapper>2.新增
<?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.UserMapper">
<!-- 新增 -->
<insert id="insertUser">
insert into user(uuid,username,age)
values(#{uuid},#{username},#{age})
</insert>
<!-- 4. foreach:批量插入多条数据 -->
<insert id="insertBatch">
insert into user(uuid,username,age)
values
<foreach collection="list" item="u" separator=",">
(#{u.uuid},#{u.username},#{u.age})
</foreach>
</insert>
</mapper>3.编辑
<?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.UserMapper">
<!-- 更新 -->
<update id="updateUser">
update user
set username=#{username}, age=#{age}
where id=#{id}
</update>
<!--动态更新-->
<update id="updateUserDynamic">
update user
<set>
<if test="username != null and username != ''">
username = #{username},
</if>
<if test="age != null">
age = #{age},
</if>
</set>
where id = #{id}
</update>
</mapper>4.删除
<?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.UserMapper">
<!-- 删除 -->
<delete id="deleteById">
delete from java_user where id=#{id}
</delete>
<!-- 3. foreach:批量删除,in语句
collection:集合参数名;item:循环项;open、close、separator拼接符号 -->
<delete id="deleteBatchIds">
delete from java_user
where id in
<foreach collection="idList" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
</mapper>四、编写Mapper接口
根据上面的xml文件中配置的namespace属性 找到对应的Mapper接口文件,根据上面配置的Mapper接口文件地址为:/src/main/java/com/example/demo/mapper/UserMapper.java
1.查询
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
//查询所有
List<User> selectAllUser();
// 根据id查询
List<User> selectByUserId(@Param("id") Long id);
//指定条件查询
List<User> selectUserByCondition(@Param("username") String username, @Param("age") Integer age);
}2.新增
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
//新增
int insertUser(User user);
// 批量新增
int insertBatch(@Param("list") List<User> list);
}3.编辑
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
// 更新
int updateUser(User user);
//动态更新
int updateUserDynamic(User user);
}4.删除
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
// 删除
int deleteById(@Param("id") Long id);
// 批量删除 根据id集合
int deleteBatchIds(@Param("idList") List<Long> idList);
}五、调用示例
1.查询
package com.example.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("/user")
public class UserController {
//注入mapper
@Resource
private UserMapper userMapper;
@GetMapping("/selectAllUser")
public List<User> selectAllUser()
{
//查询所有
return userMapper.selectAllUser();
}
@GetMapping("/selectByUserId")
public List<User> selectByUserId()
{
//根据指定ID查询
Long id = 2L;
return userMapper.selectByUserId(id);
}
@GetMapping("/selectUserByCondition")
public List<User> selectUserByCondition()
{
//指定条件查询
return userMapper.selectUserByCondition("张", null);
}
}2.新增
package com.example.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("/user")
public class UserController {
//注入mapper
@Resource
private UserMapper userMapper;
@GetMapping("/insertUser")
public String insertUser()
{
//单条新增
User user = new User();
user.setUsername("李四");
user.setAge(25);
user.setUuid(UUID.randomUUID().toString().replace("-", ""));
userMapper.insertUser(user);
return "ok";
}
@GetMapping("/insertBatch")
public String insertBatch()
{
//批量新增
List<User> userList = new ArrayList<>();
User u1 = new User();
u1.setUsername("张三");
u1.setAge(22);
u1.setUuid(UUID.randomUUID().toString().replace("-", ""));
User u2 = new User();
u2.setUsername("李四");
u2.setAge(23);
u2.setUuid(UUID.randomUUID().toString().replace("-", ""));
User u3 = new User();
u3.setUsername("王五");
u3.setAge(24);
u3.setUuid(UUID.randomUUID().toString().replace("-", ""));
userList.add(u1);
userList.add(u2);
userList.add(u3);
//执行批量插入
int rows = userMapper.insertBatch(userList);
return "成功插入行数:"+ rows;
}
}3.编辑
package com.example.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("/user")
public class UserController {
//注入mapper
@Resource
private UserMapper userMapper;
@GetMapping("/updateUser")
public String updateUser()
{
//更新
User user = new User();
user.setUsername("李四");
user.setAge(25);
user.setId(16L);
userMapper.updateUser(user);
return "ok";
}
@GetMapping("/updateUserDynamic")
public String updateUserDynamic()
{
//动态更新
User user = new User();
user.setId(12L);
user.setUsername("张三修改");
userMapper.updateUserDynamic(user);
return "ok";
}
}4.删除
package com.example.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("/user")
public class UserController {
//注入mapper
@Resource
private UserMapper userMapper;
@GetMapping("/deleteById")
public String deleteById()
{
//删除
userMapper.deleteById(10L);
return "ok";
}
@GetMapping("/deleteBatchIds")
public String deleteBatchIds()
{
//批量删除
List<Long> ids = Arrays.asList(1L,2L,3L);
userMapper.deleteBatchIds(ids);
return "ok";
}
}六、XML常用标签
1.顶层标签
mapper #根标签,namespace 必须等于 Mapper 接口全类名
<mapper namespace="com.example.demo.mapper.UserMapper"> </mapper>
2.增删改查标签
select #查询
示例:
<select id="方法名" resultType="" resultMap="" parameterType="">
sql
</select>属性说明:
- id:对应 Mapper 接口方法名(必须一致)
- resultType:返回值类型,简单对象 / 集合泛型
- resultMap:自定义映射,二选一,不能和 resultType 同时用
- parameterType:传入参数类型(可省略)
insert #新增
示例:
<insert id="add">
# <insert id="add" useGeneratedKeys="true" keyProperty="id"> 返回自增主键
insert into user(name) values(#{name})
</insert>属性说明:
- useGeneratedKeys="true":开启回填主键
- keyProperty:实体接收主键的属性名
update #修改
示例:
<update id="update">
update user set name=#{name} where id=#{id}
</update>delete #删除
示例:
<delete id="delete">
delete from user where id=#{id}
</delete>3.动态SQL标签
if # 条件判断
示例:
<if test="name != null and name != ''"> #> test 里面是 **OGNL 表达式**,不用 #{}
and name like concat('%',#{name},'%')
</if>where #where条件标签
示例:
#自动处理多余`and`,没有条件时不会生成 where 关键字
<where>
<if test="name != null">and name=#{name}</if>
</where>set #更新专用
示例:
#自动去掉最后一个多余逗号
<set>
<if test="name != null">name=#{name},</if>
</set>choose when otherwise #多选一(类似 switch‑case)
示例:
# 只会执行一个分支
<choose>
<when test="age != null">
and age = #{age}
</when>
<otherwise>
and age = 18
</otherwise>
</choose>foreach #循环(批量、in 查询)
示例:
<foreach collection="list" item="u" open="(" close=")" separator=",">
#{u.id}
</foreach>属性说明:
- collection:集合参数名,和@Param("xxx")一致
- item:循环中单个元素别名
- open:循环开始前缀
- close:循环结束后缀
- separator:元素之间分隔符
trim #万能字符串截取(where、set 底层就是 trim)
示例:
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="name != null">and name=#{name}</if>
</trim>属性说明:
- prefix:头部添加字符串
- prefixOverrides:去掉开头多余字符
- suffix:尾部添加字符串
- suffixOverrides:去掉末尾多余逗号
4.映射标签
resultMap #自定义字段映射
示例:
<resultMap id="UserMap" type="com.example.demo.model.User">
<id column="user_id" property="id"/>
<result column="user_name" property="name"/>
</resultMap>属性说明:
- id:主键映射,column = 数据库列名,property=Java 属性名
- result普通字段映射
association #多对一、单个嵌套对象
示例:
<association property="dept" javaType="com.example.demo.model.Dept">
<id column="dept_id" property="deptId"/>
</association>属性说明:
- property:实体里面嵌套对象属性名
- javaType:嵌套对象类型
collection #一对多、集合
示例:
<collection property="orderList" ofType="com.example.demo.model.Order">
<id column="order_id" property="orderId"/>
</collection>属性说明:
ofType:集合里面元素的 Java 类型
extends #resultMap 继承
示例:
<resultMap id="baseMap" type="User">...</resultMap> <resultMap id="fullMap" extends="baseMap" type="User">...</resultMap>
5.SQL复用标签
sql & include 提取公共 SQL 片段
示例:
<!--定义公共字段-->
<sql id="userColumns">id,name,age,email</sql>
<select id="selectAll" resultType="User">
select <include refid="userColumns"/> from user
</select>七、XML标签速查清单

以上就是SpringBoot整合MyBatis-Plus XML操作数据库实战教程的详细内容,更多关于SpringBoot XML操作数据库的资料请关注脚本之家其它相关文章!
