去哪里找做网站 的客户,浙江广发建设有限公司网站,门户网站 字体,wordpress the7 使用目录
1. MyBatis-Plus简介
1.1 简介
1.2 特性
1.3 支持的数据库 1.4 框架结构
1.5 代码及文档地址
2. 入门案例
2.1 开发环境
2.2 创建数据库及表 1. 创建表
2. 添加数据
2.3 创建SpringBoot工程
1. 初始化工程 2. 引入依赖 3. IDEA中安装lombok插件
编辑
2.4 编…目录
1. MyBatis-Plus简介
1.1 简介
1.2 特性
1.3 支持的数据库 1.4 框架结构
1.5 代码及文档地址
2. 入门案例
2.1 开发环境
2.2 创建数据库及表 1. 创建表
2. 添加数据
2.3 创建SpringBoot工程
1. 初始化工程 2. 引入依赖 3. IDEA中安装lombok插件
编辑
2.4 编写代码
1. 配置application.yml
2. 启动类
3. 添加实体
4. 添加mapper
5. 测试
6. 添加日志
2.5 MapperScan和repository的区别 1. MyBatis-Plus简介
1.1 简介 MyBatis-Plus 简称 MP是一个 MyBatis的增强工具在 MyBatis 的基础上只做增强不做改变为 简化开发、提高效率而生。Mybatis-Plus提供了通用的Mapper和Service可以在不编写任何SQL语句的前提下快速的实现单表的增删改查CURD批量逻辑删除分页等操作。只要把MyBatis-Plus的特性到优秀插件以及多数据源的配置进行详细讲解。 愿景 我们的愿景是成为 MyBatis 最好的搭档就像 魂斗罗 中的 1P、2P基友搭配效率翻倍。 1.2 特性
无侵入只做增强不做改变引入它不会对现有工程产生影响如丝般顺滑损耗小启动即会自动注入基本 CURD性能基本无损耗直接面向对象操作强大的 CRUD 操作内置通用 Mapper、通用 Service仅仅通过少量配置即可实现单表大部分 CRUD 操作更有强大的条件构造器满足各类使用需求支持 Lambda 形式调用通过 Lambda 表达式方便的编写各类查询条件无需再担心字段写错支持主键自动生成支持多达 4 种主键策略内含分布式唯一 ID 生成器 - Sequence可自由配置完美解决主键问题支持 ActiveRecord 模式支持 ActiveRecord 形式调用实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作支持全局通用方法注入 Write once, use anywhere 内置代码生成器采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码支持模板引擎更有超多自定义配置等您来使用内置分页插件基于 MyBatis 物理分页开发者无需关心具体操作配置好插件之后写分页等同于普通 List 查询分页插件支持多种数据库支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件可输出 SQL 语句以及其执行时间建议开发测试时启用该功能能快速揪出慢查询内置全局拦截插件提供全表 delete 、 update 操作智能分析阻断也可自定义拦截规则预防误操作
1.3 支持的数据库
任何能使用MyBatis进行 CRUD, 并且支持标准 SQL 的数据库具体支持情况如下 1.4 框架结构 1.5 代码及文档地址
官方地址: http://mp.baomidou.com
代码发布地址:
Github: GitHub - baomidou/mybatis-plus: An powerful enhanced toolkit of MyBatis for simplify development
Gitee: mybatis-plus: mybatis 增强工具包简化 CRUD 操作。 文档 http://baomidou.com低代码组件库 http://aizuda.com
文档发布地址: https://baomidou.com/pages/24112f 2. 入门案例
2.1 开发环境 IDE idea 2017 JDKJDK1.8 构建工具 maven 3.6.0 MySQL版本 MySQL 5.6 mysql常用版本5.6 5.7 8.0 Spring Boot2.7.4 MyBatis-Plus3.5.1 2.2 创建数据库及表 1. 创建表
CREATE DATABASE mybatis_plus /*!40100 DEFAULT CHARACTER SET utf8mb4 */; use mybatis_plus;
CREATE TABLE user (
id bigint(20) NOT NULL COMMENT 主键ID,
name varchar(30) DEFAULT NULL COMMENT 姓名 ,
age int(11) DEFAULT NULL COMMENT 年龄 ,
email varchar(50) DEFAULT NULL COMMENT 邮箱 ,
PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8;
2. 添加数据
INSERT INTO user (id, name, age, email) VALUES
(1, Jone, 18, test1baomidou.com),
(2, Jack, 20, test2baomidou.com),
(3, Tom, 28, test3baomidou.com),
(4, Sandy, 21, test4baomidou.com),
(5, Billie, 24, test5baomidou.com); 2.3 创建SpringBoot工程
1. 初始化工程 使用 Spring Initializr 快速初始化一个 Spring Boot 工程 2. 引入依赖 dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.1/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependency 3. IDEA中安装lombok插件 2.4 编写代码
1. 配置application.yml
spring:# 配置数据源信息datasource:# 配置数据源类型type: com.zaxxer.hikari.HikariDataSource# 配置连接数据库信息driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis_plus?characterEncodingutf-8useSSLfalseusername: rootpassword: 2020 相关解释 数据库连接池 Spring Boot 1.x 版本默认的数据库连接池是 org.apache.tomcat.jdbc.pool.DataSource。在 Spring Boot 2.x 版本及以后默认的数据库连接池是 com.zaxxer.hikari.HikariDataSource。 驱动类 在 MySQL 5.x 版本中推荐使用的 JDBC 驱动类是 com.mysql.jdbc.Driver。不过从 MySQL Connector/J 5.1.47 版本开始官方更推荐使用 com.mysql.cj.jdbc.Driver 这个新的驱动类。 而到了 MySQL 8.0 版本com.mysql.jdbc.Driver 被标记为已过时官方只支持使用
com.mysql.cj.jdbc.Driver。 注意 1、驱动类driver-class-name spring boot 2.0内置jdbc5驱动驱动类使用 driver-class-name: com.mysql.jdbc.Driver spring boot 2.1及以上内置jdbc8驱动驱动类使用 driver-class-name: com.mysql.cj.jdbc.Driver 否则运行测试用例的时候会有 WARN 信息 2、连接地址url MySQL5.7版本的url jdbc:mysql://localhost:3306/mybatis_plus?characterEncodingutf-8useSSLfalse MySQL8.0版本的url jdbc:mysql://localhost:3306/mybatis_plus?serverTimezoneGMT%2B8characterEncodingutf-8useSSLfalse 否则运行测试用例报告如下错误 java.sql.SQLException: The server time zone valueÖйú±ê׼ʱ¼ä is unrecognized or represents more 2. 启动类 在Spring Boot启动类中添加MapperScan注解扫描mapper包。 用途是扫描指定包路径下的 Mapper 接口并且将这些接口自动注册为 Spring Bean。如此一来你就能在服务层里直接注入这些 Mapper 接口进而使用它们来操作数据库。 接口的代理实现类是由框架来提供的所以我们需要配置一个单独扫描mapper的扫描器。 SpringBootApplication
MapperScan(com.qcby.mybatisplus.mapper)
public class MybatisPlusApplication {public static void main(String[] args) {SpringApplication.run(MybatisPlusApplication.class, args);}}3. 添加实体
Data //lombok注解
AllArgsConstructor
NoArgsConstructor
Getter
Setter
ToString
public class User {private Long id;private String name;private Integer age;private String email;
}快捷键 ctrlF12 查看类结构。 只有Data注解时没有含参的构造器。 AllArgsConstructor 注解可以自动为类生成一个包含所有成员变量的构造函数。 但是如果只加 AllArgsConstructor 就没有无参的构造器了需要再加一个NoArgsConstructor,构造无参构造器。
Getter注解显然是构造访问器。
Setter注解构造更改器。
4. 添加mapper BaseMapper是MyBatis-Plus提供的模板mapper其中包含了基本的CRUD方法泛型为操作的 实体类型。 public interface UserMapper extends BaseMapperUser {
}
package com.baomidou.mybatisplus.core.mapper;public interface BaseMapperT extends MapperT {/*** 插入一条记录* param entity 实体对象 */int insert(T entity);/*** 根据 ID 删除* param id 主键ID */int deleteById(Serializable id);/*** 根据实体(ID)删除* param entity 实体对象* since 3.4.4 */int deleteById(T entity);/*** 根据 columnMap 条件删除记录* param columnMap 表字段 map 对象 */int deleteByMap(Param(Constants.COLUMN_MAP) MapString, Object columnMap);/*** 根据 entity 条件删除记录* param queryWrapper 实体对象封装操作类可以为 null,里面的 entity 用于生成 where语句*/int delete(Param(Constants.WRAPPER) WrapperT queryWrapper);/*** 删除根据ID 批量删除* param idList 主键ID列表(不能为 null 以及 empty) */int deleteBatchIds(Param(Constants.COLLECTION) Collection? extends Serializable idList);/*** 根据 ID 修改* param entity 实体对象 */int updateById(Param(Constants.ENTITY) T entity);/*** 根据 whereEntity 条件更新记录* param entity 实体对象 (set 条件值 ,可以为 null)* param updateWrapper 实体对象封装操作类可以为 null,里面的 entity 用于生成where 语句*/int update(Param(Constants.ENTITY) T entity, Param(Constants.WRAPPER) WrapperT updateWrapper);/*** 根据 ID 查询* param id 主键ID */T selectById(Serializable id);/*** 查询根据ID 批量查询* param idList 主键ID列表(不能为 null 以及 empty) */ListT selectBatchIds(Param(Constants.COLLECTION) Collection? extends Serializable idList);/*** 查询根据 columnMap 条件* param columnMap 表字段 map 对象 */ListT selectByMap(Param(Constants.COLUMN_MAP) MapString, Object columnMap);/*** 根据 entity 条件查询一条记录* p查询一条记录例如 qw.last(limit 1) 限制取一条记录 , 注意多条数据会报异常 /p* param queryWrapper 实体对象封装操作类可以为 null*/default T selectOne(Param(Constants.WRAPPER) WrapperT queryWrapper) { ListT ts this.selectList(queryWrapper);if (CollectionUtils.isNotEmpty(ts)) {if (ts.size() ! 1) {throw ExceptionUtils.mpe(One record is expected, but the query result is multiple records);}return ts.get(0);}return null;}/*** 根据 Wrapper 条件查询总记录数* param queryWrapper 实体对象封装操作类可以为 null */Long selectCount(Param(Constants.WRAPPER) WrapperT queryWrapper);/*** 根据 entity 条件查询全部记录* param queryWrapper 实体对象封装操作类可以为 null */ListT selectList(Param(Constants.WRAPPER) WrapperT queryWrapper);/*** 根据 Wrapper 条件查询全部记录* param queryWrapper 实体对象封装操作类可以为 null */ListMapString, Object selectMaps(Param(Constants.WRAPPER) WrapperT queryWrapper);/*** 根据 Wrapper 条件查询全部记录* p注意 只返回第一个字段的值/p* param queryWrapper 实体对象封装操作类可以为 null */ListObject selectObjs(Param(Constants.WRAPPER) WrapperT queryWrapper);/*** 根据 entity 条件查询全部记录并翻页* param page 分页查询条件可以为 RowBounds.DEFAULT* param queryWrapper 实体对象封装操作类可以为 null */P extends IPageT P selectPage(P page, Param(Constants.WRAPPER) WrapperT queryWrapper);/*** 根据 Wrapper 条件查询全部记录并翻页* param page 分页查询条件* param queryWrapper 实体对象封装操作类 */P extends IPageMapString, Object P selectMapsPage(P page, Param(Constants.WRAPPER) WrapperT queryWrapper);
}
5. 测试
SpringBootTest
class MybatisPlusApplicationTests {Autowiredprivate UserMapper userMapper;Testpublic void testSelectList(){//selectList()根据MP内置的条件构造器查询一个list集合null表示没有条件即查询所有userMapper.selectList(null).forEach(System.out::println);}
jdk1.8的输出格式
userMapper.selectList(null).forEach(System.out::println);
可以直接注入接口的原因是 在测试类里注入 Mapper 接口时实际上注入的是 MyBatis-Plus 为该接口生成的代理对象。MyBatis-Plus 会为扫描到的 Mapper 接口创建代理对象。这些代理对象实现了 Mapper 接口的方法并且在方法调用时会和数据库进行交互。
结果 注意 IDEA在 userMapper 处报错因为找不到注入的对象因为类是动态创建的但是程序可以正确 的执行。 为了避免报错可以在mapper接口上添加 Repository 注解 Repository
public interface UserMapper extends BaseMapperUser {
} 原因 在 Spring 框架里Repository 是一个重要的注解它主要用于将一个类标记为数据访问层DAOData Access Object的组件。 Repository 注解用于告诉 Spring 容器被注解的类是一个数据访问对象负责与数据库、文件系统等数据源进行交互。Spring 会自动将这个类注册为一个 Bean这样你就可以在其他组件中通过依赖注入的方式使用它。
6. 添加日志
在application.yml中配置日志输出
# 配置MyBatis日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 可以看到执行的sql语句。
2.5 MapperScan和repository的区别 接口的代理实现类是由框架来提供的所以我们需要配置一个单独扫描mapper的扫描器。
MapperScan是 MyBatis-Spring 框架里的注解。MyBatis 是一个优秀的持久层框架而 MyBatis-Spring 则让 MyBatis 能更好地集成到 Spring 框架中。 作用它的作用是扫描指定包下的所有接口并把这些接口自动注册为 MyBatis 的 Mapper Bean。这样一来我们就无需在每个 Mapper 接口上单独添加Mapper注解了。 Repository是 Spring 框架自带的注解。 将类这个接口的代理类交给Spring去管理而这个代理类是由mybatisPlusMyBatis的增强还是MyBatis实现的。管理着它的实现类要是没有这个注解就需要userMapperImpl但是mybatisPlus框架都给提供了。 如果不加他会报波浪线但是不出错。 如果这个接口有很多实现类加了Repository注解就明确告诉它用的是框架提供的实现类。