网站首页 > 技术教程 正文
mybatisplus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高 效率而生。 官网:https://mybatis.plus/ 或 https://mp.baomidou.com/
特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,
更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、
SQLServer2005、SQLServer 等多种数据库
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解
决主键问题
支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操
作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,
支持模板引擎,更有超多自定义配置等您来使用
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List
查询
内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击
mybatisplus的单独使用
1 引入依赖
数据库驱动根据你的mysql数据库版本进行切换
<dependencies>
<!-- mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
<!-- mybatis-plus的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.1</version>
</dependency>
<!-- druid数据库连接池-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba</groupId>-->
<!-- <artifactId>druid</artifactId>-->
<!-- <version>1.1.17</version>-->
<!-- <!– 提供get,set等方法–>-->
<!-- </dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
2 配置文件 mybatis.xml
设置关闭驼峰规则 开启的话 比如 字段名 department_name 会与类的属性departmentName对应
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 载入外部资源文件属性文件-->
<properties resource="jdbc.properties"/>
<!--设置输入日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 设置关闭驼峰规则 开启的话 比如 字段名 department_name 会与类的属性departmentName对应-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 设置驱动 URL username password-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/DepartmentDao.xml"/>
</mappers>
</configuration>
3 实体类
@TableName("departments")指定表明 若果你使用BaseMapper里的方法 一定要声明 如果你是使用自己的SQL语句 可以不声明
TableId 声明表的主键
TableFiled(value="字段名") 属性与字段映射
TableFiled(exist=false) 该属性在表里不存在
TableFiled(select=false) 不从表里选择该字段
//如果不指定表名会默认寻找类名首字母小写的表 找不到则抛出异常 除非你在mapper.xml使用了自定义的SQL语句
@Data
@TableName("departments")
public class Department {
@TableId(value = "department_id")
private Integer department_id;
// @TableField(select = false)
private Integer manager_id;
@TableField(value = "location_id")
private Integer location_id;
// private String department_name;
}
4 dao接口
注意继承BaseMapper<实体类>
// 继承BaseMapper接口 Department为对应的实体类 继承的接口里 mybatis-plus有很多实现方法
public interface DepartmentDao extends BaseMapper<Department> {
List<Department> getAll();
}
5 进行测试
@Test
public void TestMybatisplus() throws IOException {
String resource = "mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 与mybatis的不同地方,用MybatisSqlSessionFactoryBuilder 替代 SqlSessionFactoryBuilder
SqlSessionFactory build = new MybatisSqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = build.openSession();
DepartmentDao departmentDao = sqlSession.getMapper(DepartmentDao.class);
// 使用BaseMapper里的方法
List<Department> departments = departmentDao.selectList(null);
// 使用自己的getAll方法
List<Department> all = departmentDao.getAll();
departments.forEach(System.out::println);
}
猜你喜欢
- 2025-05-11 分子动力学结合点突变揭示GPCR家族A3腺苷受体与激动剂的结合特征
- 2025-05-11 Blazor小白笔记06-使用ef core增加查询数据
- 2025-05-11 微软收购RPA供应商Softomotive,在自动化流程技术之路谋求存在感?
- 2025-05-11 创科自动化:机器视觉是自动化设备的“眼睛”
- 2025-05-11 老人怀60年钙化胎儿 盘点不可思议医学奇迹:用牙齿做眼睛
- 2025-05-11 Quartz 是什么?一文带你入坑
- 2025-05-11 牛人花8万自己造车,但大哥你为啥不直接买辆新的呢?
- 2025-05-11 CBN丨ASEAN becomes hotspot for Chinese tourists in Q1
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)