当前位置: 代码网 > it编程>编程语言>Java > SpringBoot整合MyBatis-Plus XML操作数据库实战教程

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

2026年09月29日 • Java •我要评论
前面我们已经学习使用mybatis-plus依赖实现操作数据库,mybatis-plus还支持xml文件来操作数据库,一般适合于复杂的sql操作springboot集成mybatis-plus实现数据

前面我们已经学习使用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操作数据库的资料请关注代码网其它相关文章!

赞 (0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com