Mybatis_4

发布于:2025-07-29 ⋅ 阅读:(17) ⋅ 点赞:(0)

上篇文章我们讲了Mybatis使用动态sql选择性查询、更新、添加一些元素。本篇文章我们来使用<foreach>标签实现批量删除、<include>标签实现XML代码的复用,学会引入generator依赖来自动生成Mybatis的XML代码并对Mybatis_plus进行简单使用。

动态sql(续)

<foreach>标签

在我们使用mybatis操作数据库时,常常要涉及到批量操作,如:批量删除等。此时我们将集合作为参数进行传递,使用<foreach>对集合元素进行遍历。

Mapper:

Integer deleteByIds(List<Integer> ids);

XML: 

    <delete id="deleteByIds">
        delete from userinfo where id in
        <foreach collection="ids" open="(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </delete>

测试(删除id为2、4、7的元素): 

 @Test
    void deleteByIds() {
        List<Integer> ids = Arrays.asList(new Integer[]{2,4,7});
        mapper.deleteByIds(ids);
    }

<foreach>标签详解: 

<include>标签 

在xml映射文件中配置的sql,有时可能会存在很多重复的片段,此时就会存在很多冗余的代码。

我们可以对重复的代码片段进行抽取有,将其通过<sql>标签封装成一个sql片段,然后通过<include>标签进行引用。

mapper:

List<Userinfo> get();

XML:


    <sql id="elements">select id,username,age,gender,phone,delete_flag,create_time ,update_time from userinfo</sql>
    
    <select id="get" resultType="com.example.mybatis.model.Userinfo">
       <include refid="elements"></include>
    </select>

测试:

 @Test
    void get() {
        System.out.println(mapper.get());
    }

<include>标签详解:

MyBatis Generator

MyBatis Generator是一个为MyBatis框架设计的代码生成工具,它可以根据数据库表结构自动生成相应的JavaModel,Mapper接口以及对应的XML文件,简化数据访问层的编码工作,使得开发者可以更专注于业务逻辑的实现。

接下来我们看下,如何使用MyBatis Generator来生成代码

引入插件

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <configuration>
                    <!--generator配置⽂件所在位置-->
                    <configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.33</version>
                    </dependency>
                </dependencies>
            </plugin>

注意插件配置的位置: 

添加generatorConfig.xml

文件路径和上述配置一致: 文件内容复制粘贴即可,不过里面有几处可以进行修改,后面会讲:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 配置⽣成器 -->
<generatorConfiguration>
    <!-- ⼀个数据库⼀个context -->
    <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!--去除注释-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库链接信息-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis_test?serverTimezone=Asia/Shanghai&amp;nullCatalogMeansCurrent=true"
                        userId="root"
                        password="5028">
        </jdbcConnection>
        <!-- ⽣成实体类 -->
        <javaModelGenerator targetPackage="com.example.demo.generator.model" targetProject="src/main/java" >
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- ⽣成mapxml⽂件 -->
        <sqlMapGenerator targetPackage="mapperGenerator" targetProject="src/main/resources" >
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- ⽣成mapxml对应client,也就是接⼝dao -->
        <javaClientGenerator targetPackage="com.example.demo.generator.mapper" targetProject="src/main/java" type="XMLMAPPER" >
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- table可以有多个,每个数据库中的表都可以写⼀个table,tableName表示要匹
       配的数据库表,也可以在tableName属性中通过使⽤%通配符来匹配所有数据库表,只有匹配的表才会
       ⾃动⽣成⽂件 -->
        <table tableName="userinfo">
            <property name="useActualColumnNames" value="false" />
            <!-- 数据库表主键 -->
            <generatedKey column="id" sqlStatement="Mysql" identity="true"
            />
        </table>
        <table tableName="articleinfo">
            <property name="useActualColumnNames" value="false" />
            <!-- 数据库表主键 -->
            <generatedKey column="id" sqlStatement="Mysql" identity="true"
            />
        </table>
    </context>
</generatorConfiguration>

这里的爆红无需理会: 可修改的位置: 

配置完成之后点击这里: 自动生成的结果:

注意:

这个插件通常在项目初始化时使用,如果指定生成文件的目录,当前存在代码,则会覆盖之前的代码。 

MyBatis_Plus

官网:MyBatis-Plus 🚀 为简化开发而生 (baomidou.com) 

1、引入依赖

<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
 <version>3.5.5</version>
</dependency>

2、配置mysql

spring:
 datasource:
 url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&us
eSSL=false
 username: root
 password: root
 driver-class-name: com.mysql.cj.jdbc.Driver

这里数据库名和密码修改为所用的数据库和数据库的密码。 

3、编写数据库对应字段

@TableName("userinfo")
@Data
public class Userinfo {
    @TableId//标识主键
    private int id;
    @TableField("username")//参数映射

    private String username;
    private String password;
    private int age;
    private int gender;
    private String phone;
    private int deleteFlag;
    private Date createTime;
    private Date updateTime;
}

编写完这些之后我们的mapper类只需要继承BaseMapper就可以使用各种方法了:

@Mapper
public interface UserinfoMapper extends BaseMapper<Userinfo> {
}

从方法名也可以推断出这些方法的功能,这里就不多赘述了。 


网站公告

今日签到

点亮在社区的每一天
去签到