Mybatis_4

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

动态sql(续)

<foreach>标签

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

Mapper:

java 复制代码
Integer deleteByIds(List<Integer> ids);

XML:

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的元素):

java 复制代码
 @Test
    void deleteByIds() {
        List<Integer> ids = Arrays.asList(new Integer[]{2,4,7});
        mapper.deleteByIds(ids);
    }
<foreach>标签详解:

<include>标签

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

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

mapper:

java 复制代码
List<Userinfo> get();

XML:

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>

测试:

java 复制代码
 @Test
    void get() {
        System.out.println(mapper.get());
    }
<include>标签详解:

MyBatis Generator

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

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

引入插件

XML 复制代码
            <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 复制代码
<?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、引入依赖

XML 复制代码
<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
 <version>3.5.5</version>
</dependency>

2、配置mysql

XML 复制代码
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、编写数据库对应字段

java 复制代码
@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就可以使用各种方法了:

java 复制代码
@Mapper
public interface UserinfoMapper extends BaseMapper<Userinfo> {
}

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

相关推荐
华如锦21 分钟前
四:从零搭建一个RAG
java·开发语言·人工智能·python·机器学习·spring cloud·计算机视觉
Tony_yitao23 分钟前
22.华为OD机试真题:数组拼接(Java实现,100分通关)
java·算法·华为od·algorithm
JavaGuru_LiuYu24 分钟前
Spring Boot 整合 SSE(Server-Sent Events)
java·spring boot·后端·sse
爬山算法28 分钟前
Hibernate(26)什么是Hibernate的透明持久化?
java·后端·hibernate
彭于晏Yan30 分钟前
Springboot实现数据脱敏
java·spring boot·后端
luming-0235 分钟前
java报错解决:sun.net.utils不存
java·经验分享·bug·.net·intellij-idea
北海有初拥43 分钟前
Python基础语法万字详解
java·开发语言·python
alonewolf_991 小时前
Spring IOC容器扩展点全景:深入探索与实践演练
java·后端·spring
super_lzb1 小时前
springboot打war包时将外部配置文件打入到war包内
java·spring boot·后端·maven
毛小茛1 小时前
芋道管理系统学习——项目结构
java·学习