当前位置: 首页 > news >正文

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

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

http://www.lryc.cn/news/602193.html

相关文章:

  • Focusing on Tracks for Online Multi-Object Tracking—CVPR2025多目标跟踪(TrackTrack)
  • Ethereum:Geth运维实战,geth export与geth import命令的实用性深度评估
  • 使用 Qt Installer Framework(IFW)进行打包
  • 网络安全第14集
  • 8.1 ESP32CAM 服务器 网络摄像头
  • 【mysql】—— mysql中的timestamp 和 datetime(6) 有什么区别,为什么有的地方不建议使用timestamp
  • 深入探索Linux:忙碌的车间“进程”间通信
  • 【Linux】基本指令(2)
  • Linux DNS解析1--终端通过网关或者路由器进行域名解析的原理
  • WAIC 2025深度解析:当“养虎”警示遇上机器人拳击赛
  • 设计模式(二十二)行为型:策略模式详解
  • 发布“悟能”具身智能平台,商汤让机器人像人一样和现实世界交互
  • 枚举策略模式实战:优雅消除支付场景的if-else
  • 时序数据基座升维:Apache IoTDB 以“端边云AI一体化”重构工业智能决策
  • 企业级JWT验证最佳方案:StringUtils.hasText()
  • 【学习路线】AI开发工程师成长指南:从机器学习基础到大模型应用
  • Ubuntu服务器上JSP运行缓慢怎么办?全面排查与优化方案
  • Python 列表内存存储本质:存储差异原因与优化建议
  • 【Linux | 网络】传输层(UDP和TCP) - 两万字详细讲解!!
  • 二级域名分发源码最新开源版
  • uni-datetime-picker兼容ios
  • 无界设计新生态:Penpot开源平台与cpolar的云端协同创新实践
  • CacheGen:用于快速大语言模型推理服务的 KV 缓存压缩与流式传输
  • 【Unity笔记】Unity Camera.cullingMask 使用指南:Layer 精准控制、XR 多视图与性能提升
  • Python + Requests库爬取动态Ajax分页数据
  • 云原生作业(haproxy)
  • 迅为RK3568开发板OpeHarmony学习开发手册-配置电源管理芯片和点亮HDMI屏幕-配置电源管理芯片
  • Vue2-封装一个含所有表单控件且支持动态增减行列的表格组件
  • 行业案例:杰和科技为智慧教育构建数字化硬件底座
  • vue如何在data里使用this