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