# xinxin_study **Repository Path**: yxaz68/xinxin_study ## Basic Information - **Project Name**: xinxin_study - **Description**: java学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-30 - **Last Updated**: 2021-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [Mybatis_plus](https://baomidou.com/guide/install.html#release) ## 一、特性 - **强大的Crud**:强大的增删改查功能 - **代码生成器**:代码生成的功能 ## 二、mysql以及mybatis的crud - #### 任何项目都需要数据库(数据库以最新8.0为例)的支持,所以建议安装数据库到服务器(服务器以centos7为例) (1)检查系统是否自带mysql,如果自带了卸载,没有自带就进行下一步安装 ```java // 查看系统是否自带mysql rpm -qa | grep mysql // 如果显示了mysql版本号,则安装了,若什么都没显示,则没有安装 // 如果有版本号,则卸载mysql rpm -e --nodeps mysql-libs-xxxxxxxxxxxx ``` (2)在mysql官网下载tar资源,[进行安装](https://dev.mysql.com/downloads/mysql/) ```java // 1.先把官网下载的tar包放在mysql文件夹里,mysql下载选择Red Hat // 2.解压到usr下面的mysql文件夹里(mysql文件夹需要自己新建) tar -xvf mysql-8.0.24-1.el8.x86_64.rpm-bundle.tar -C /usr/mysql // 3.安装mysql server rpm -ivh mysql-community-server-8.0.24-1.el8.x86_64.rpm --nodeps --force // 4.安装mysql client rpm -ivh mysql-community-server-8.0.24-1.el8.x86_64.rpm --nodeps --force // 5.启动mysql service mysqld start // 6.连接mysql 并且查找密码,修改密码 grep 'temporary password' /var/log/mysqld.log ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码'; // 这里会报错这个密码太简单 // 设置密码的复杂性 set global validate_password.policy=0; set global validate_password.length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码'; // 7.开启开机自启动 systemctl enable mysqld systemctl daemon-reload // 8.开启远程连接mysql // 查看user表发现root用户的host是localhost // 修改localhost为% %代表远程可以连接 update user set host='%' where user='root'; // 9.连接navicat报错,连接不到 // 登陆服务器,增加规则3306 开发这个端口 // 修改mysql8的安全策略 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; // 完结撒花,mysql安装成功 ``` - #### Mybatis-plus简单的crud操作 (1)properties中连接数据库代码 ```properties spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://47.95.11.71:3306/mybatis-plus?serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=你的密码 ``` (2)mybatis-plus基本使用 ​ ① 首先数据库有表,根据"表名"建立实体类(entity) ```java package com.preciouslove.demo.entity; import lombok.Data; import java.util.Date; @Data public class mybatisStudy { private String name; private int id; private String gender; private Date createTime; private Date updateTime; } ``` ​ ② 定义一个类的接口,让接口继承BaseMapper,BaseMapper里面有很多MP封装好的查询方法 ```java package com.preciouslove.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.preciouslove.demo.entity.mybatisStudy; import org.springframework.stereotype.Repository; // UserMapper是一个接口,接口没有对象,加这个注解交给spring来管理 @Repository public interface MybatisStudyMapper extends BaseMapper { } ``` ​ ③ 在启动类加注解@MapperScan,MapperScan来扫描mapper ```java package com.preciouslove.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; // 因为mapper是接口,没有对象,spring程序就会报错,所以通过这个注解扫描Mapper @MapperScan("com.preciouslove.demo.mapper") @SpringBootApplication public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class, args); } } ``` (3)mybatis的主键生成策略 ​ id的主键生成策略使用mp自带的19位uuid(snowflake算法) ```java @TableId(type = IdType.ID_WORKER) private Long id; ``` (4)自动填充 ​ 添加时间和修改时间使用mp的自动填充 ​ ①首先在实体类上面加上注解 ```java @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; ``` ​ ②创建一个类(MyMetaObjectHandler)来实现 ​ 因为update在增加数据的时候就需要有,所以在insertFill里面也把updateTime加上 ```java @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { //mybatis原版自动填充,使用的时间是LocalDateTime,但是我们一般都用Date,所以放弃,为了符合大众 // this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { // this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); this.setFieldValByName("updateTime", new Date(), metaObject); } } ``` (5)元数据 ​ 所谓元数据,就是表示数据的数据,这些数据五花八门,总之,只要不是我们存储到[数据库](http://www.2cto.com/database/)里的数据,大多都可以理解为元数据。描述数据库的任何数据—作为数据库内容的对立面—是元数据。因此,列名、数据库名、用户名、版本名以及从SHOW语句得到的结果中的大部分字符串是元数据。还包括INFORMATION_SCHEMA数据库中的表中的内容,因为定义的那些表存储关于数据库对象的信息。 (6)乐观锁 ​ ①什么是事务? ​ 事务是以可控的方式对数据资源进行访问的一组操作。 ​ ②事务的其属性包括? ​ 原子性、一致性、隔离性和持久性,也就是常说的ACID。 ​ ★什么是事务的隔离性 ​ 隔离性是针对数据资源的[并发](https://cloud.tencent.com/developer/article/1424249)访问,规定了各个事务之间相互影响的程度。 ​ ★如何实现乐观锁 ​ 乐观锁主要解决的问题是:丢失更新 ​ 乐观锁主要在并发条件下使用,一个人单机操作数据库还要什么锁! ​ 丢失更新:多个人修改同一条数据的时候,最后提交数据的会把之前提交的数据覆盖掉(正常应该是两个人提交只有一个人可以成功)--> 联想改工资或抢火车票列子。 ​ **具体实现**:①在数据库的表设计中加入版本号version ​ ②在实体类中加入注解 ```java @Version @TableField(fill = FieldFill.INSERT) private Integer version; ``` ​ ★③给version字段添加加数据的时候让他自动填充一个值或你自己赋个值(不要让他是 null),不然乐观锁无效 ​ ④加入配置类 ```java @MapperScan("com.preciouslove.demo.mapper") @Configuration public class MpConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } } ``` ​ ⑤@Configuration就表明这是一个配置类,就可以把MapperScan拿过来,Application中的 MapperScan就可以去掉了。原因就像打游戏一样,双击exe文件然后他会首先读取配置。 (7)分页 ​ ①配置分页插件 ​ ```java @Bean public MybatisPlusInterceptor paginationInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); return interceptor; } ``` ​ ②实例化对象传参数 ```java void page(){ Page mybatisStudyPage = new Page<>(1,10); mybatisStudyMapper.selectPage(mybatisStudyPage,null); System.out.println(mybatisStudyPage.getCurrent()); System.out.println(mybatisStudyPage.getPages());//总页数 System.out.println(mybatisStudyPage.getTotal()); } ``` ## 三、Mybatis-plus其他配置 - #### mybatis-plus日志文件配置 (1)在properties配置日志文件,启动mybatis时会将一些查找的sql语句控制台显示 出来 ```properties #配置mybatis-plus log配置文件 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl ```