Mybatis_4
上篇文章我们讲了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的元素):
@Testvoid 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>
测试:
@Testvoid 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 generatorConfigurationPUBLIC "-//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=falseusername: rootpassword: rootdriver-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> {
}
从方法名也可以推断出这些方法的功能,这里就不多赘述了。