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> {
}

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

相关推荐
青云交27 分钟前
Java 大视界 -- Java 大数据机器学习模型在金融信用评级模型优化与信用风险动态管理中的应用(371)
java·大数据·机器学习·信用评级·动态风控·跨境金融·小贷风控
二哈喇子!3 小时前
若依【(前后端分离版)SpringBoot+Vue3】
java·spring boot·后端
paopaokaka_luck4 小时前
婚纱摄影管理系统(发送邮箱、腾讯地图API、物流API、webSocket实时聊天、协同过滤算法、Echarts图形化分析)
vue.js·spring boot·后端·websocket·算法·echarts
Monkey-旭7 小时前
Android Handler 完全指南
android·java·handler
秃狼7 小时前
Execel文档批量替换标签实现方案
java
Brookty7 小时前
Java线程安全与中断机制详解
java·开发语言·后端·学习·java-ee
Sylvia-girl7 小时前
排序查找算法,Map集合,集合的嵌套,Collections工具类
java·算法·排序算法
TT哇7 小时前
【分治】归并排序——排序数组(medium)
java·算法·排序算法
给力学长7 小时前
自习室预约小程序的设计与实现
java·数据库·vue.js·elementui·小程序·uni-app·node.js
试着7 小时前
零基础学习性能测试第五章:JVM性能分析与调优-JVM概念,java程序运行原理
java·jvm·学习·零基础·性能测试