java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot XML操作数据库

SpringBoot整合MyBatis-Plus XML操作数据库实战教程

作者:huaweichenai

这篇文章主要为大家详细介绍了SpringBoot如何通过配置MyBatis-Plus中的XML文件,实现数据库的增删改查基本操作功能,文中的示例代码讲解详细,有需要的小伙伴可以参考下

前面我们已经学习使用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>

属性说明:

insert   #新增

示例:

<insert id="add">
# <insert id="add" useGeneratedKeys="true" keyProperty="id">  返回自增主键
    insert into user(name) values(#{name})
</insert>

属性说明:

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>

属性说明:

trim   #万能字符串截取(where、set 底层就是 trim)

示例:

<trim prefix="WHERE" prefixOverrides="AND|OR">
    <if test="name != null">and name=#{name}</if>
</trim>

属性说明:

4.映射标签

resultMap   #自定义字段映射

示例:

<resultMap id="UserMap" type="com.example.demo.model.User">
    <id column="user_id" property="id"/>
    <result column="user_name" property="name"/>
</resultMap>

属性说明:

association   #多对一、单个嵌套对象

示例:

<association property="dept" javaType="com.example.demo.model.Dept">
    <id column="dept_id" property="deptId"/>
</association>

属性说明:

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操作数据库的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文