上篇文章我们讲了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&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> {
}
从方法名也可以推断出这些方法的功能,这里就不多赘述了。