1.了解
图片.png
图片.png
image.png
图片.png
2.快速入门
2.1.创建数据库以及表
图片.png
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=cjchnws1991 \
mysql:5.6
-- 创建测试表
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_name` varchar(20) NOT NULL COMMENT '用户名',
`password` varchar(20) NOT NULL COMMENT '密码',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
-- 插入测试数据
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES ('1', 'zhangsan', '123456', '张三', '18', 'test1@itcast.cn');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES ('2', 'lisi', '123456', '李四', '20', 'test2@itcast.cn');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES ('3', 'wangwu', '123456', '王五', '28', 'test3@itcast.cn');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES ('4', 'zhaoliu', '123456', '赵六', '21', 'test4@itcast.cn');
INSERT INTO `tb_user` (`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES ('5', 'sunqi', '123456', '孙七', '24', 'test5@itcast.cn');
2.2.mybatis查询
不用骨架创建maven工程
图片.png
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lines.mp</groupId>
<artifactId>bj-mybatis-plus</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- mybatis-plus插件依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.1</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.11</version>
</dependency>
<!--简化bean代码的工具包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.18.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
创建子模块
图片.png
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>bj-mybatis-plus</artifactId>
<groupId>com.lines.mp</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mybatis-plus-simple</artifactId>
</project>
图片.png
图片.png
图片.png
2.3.mybatis+MP查询
图片.png
图片.png
图片.png
2.4.Spring+mybatis+MP查询
图片.png
图片.png
图片.png
2.5.SpringBoot+mybatis+MP查询
图片.png
图片.png
图片.png
图片.png
3.通用crud详解
3.1.插入
图片.png
图片.png
图片.png
3.2.TableField
- 对象中的属性名和字段名不一致的问题
- 对象中的属性字段在表中不存在的问题
- 查询的时候不想查某些字段
-
上述三条实际生产不用
图片.png
3.3.更新
图片.png
3.4.删除
图片.png
实际使用基本都是根据id删除
3.5.查询
图片.png
图片.png
图片.png
图片.png
3.6.SQL注入原理
图片.png
图片.png
图片.png
图片.png
图片.png
- ISqlInjector接口负责SQL注入
- ISqlInjector的实现类AbstractSqlInjector的inspectInject方法负责检查注入
- inspectInject方法中的关键是methodList.forEach(m -> m.inject(builderAssistant, mapperClass, modelClass, tableInfo));
- AbstractMethod.inject注入自定义方法,核心方法是 injectMappedStatement(mapperClass, modelClass, tableInfo);
- injectMappedStatement是抽象方法,看看哪些类实现了这个抽象方法
- 发现BaseMapper所提供的方法都是对应一个一个的类,且这些类都实现了injectMappedStatement方法
- 以SelectById为例,生成SQL语句,最终return this.addSelectMappedStatementForTable(mapperClass, getMethod(sqlMethod), sqlSource, tableInfo);
- 最终实现BaseMapper中的一系列的方法注册到meppedStatements中
4.配置
4.1.configLocation
图片.png
图片.png
图片.png
4.2.mapperLocations
图片.png
图片.png
4.3.typeAliasesPackage
图片.png
图片.png
4.4.mapUnderscoreToCamelCase&cacheEnabled
图片.png
图片.png
图片.png
4.5.DB策略配置
图片.png
图片.png
最好的使用场景:表名统一tb_+实体类名
5.条件构造器
5.1.AllEq
图片.png
图片.png
5.2.Eq
图片.png
图片.png
5.3.模糊查询
图片.png
图片.png
5.4.排序
图片.png
图片.png
5.5.逻辑查询
图片.png
图片.png
5.6.select
在MP查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段。图片.png
6.源代码
https://gitee.com/baojun521/bj-mybatis-plus.git
https://gitee.com/baojun521/lines-mp-springboot.git