网站建设毕业设计报告书,可以直接玩游戏的网址,企业搜索,wordpress黄页一.特点 
无侵入#xff1a;只做增强不做改变#xff0c;引入它不会对现有工程产生影响#xff0c;如丝般顺滑损耗小#xff1a;启动即会自动注入基本 CURD#xff0c;性能基本无损耗#xff0c;直接面向对象操作强大的 CRUD 操作#xff1a;内置通用 Mapper、通用 Serv…一.特点 
无侵入只做增强不做改变引入它不会对现有工程产生影响如丝般顺滑损耗小启动即会自动注入基本 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 操作智能分析阻断也可自定义拦截规则预防误操作
二.快速入门 
官网地址MyBatis-Plus 
按照官方文档实现步骤 
1.首先我们创建数据库和表 
CREATE DATABASE mybatis_plus;
USE mybatis_plus;DROP TABLE IF EXISTS USER;CREATE TABLE USER
(id BIGINT(20) NOT NULL COMMENT 主键ID,NAME VARCHAR(30) NULL DEFAULT NULL COMMENT 姓名,age INT(11) NULL DEFAULT NULL COMMENT 年龄,email VARCHAR(50) NULL DEFAULT NULL COMMENT 邮箱,PRIMARY KEY (id)
);DELETE FROM USER;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.创建一个springboot项目只需要添加web支持然后导入依赖 尽量不要同时导入mybatis和mybatis-plus因为版本有差异! dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.0.5/version/dependency 3.连接数据库和mybatis相同 
# mysql 5 驱动不同  com.mysql.jdbc.Driver
# mysql 8 驱动不同 com.mysql.cj.jdbc.Driver . 需要增加时区的配置 serverTimezoneGMT%2B8
# DataSource Config
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis_plus?useSSLfalseuseUnicodetruecharacterEncodingutf-8serverTimezoneGMT%2B8username: rootpassword: 201408181 
4.编写我们的dao层的User类 
Data
AllArgsConstructor
NoArgsConstructor
public class User {private Long id;private String name;private Integer age;private String email;} 5.编写我们的mapper接口 
//使用mybatis-plus后我们不用在写xml文件了所有CRUD操作都已经编写完成了
// 在对应的mapper上面继承基本的类 BaseMapper
Reference
public interface UserMapper extends BaseMapperUser {}6.在主启动类MybatisPlusApplication上扫描我们Mapper包下的所有接口 
MapperScan(com.jiu.mapper) 
7.测试类中测试 
Autowiredprivate UserMapper userMapper;Testvoid contextLoads() {//参数是一个Wrapper , 条件构造器,这里我们先不用 null//查询全部用户ListUser users  userMapper.selectList(null);users.forEach(System.out::println);} 
三.配置日志 
# 配置日志  (默认控制台输出)
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 
再次测试就会输入配置文件 
四.CRUD扩展  
1.查询操作 
查询一个数据Testpublic void testSelectById() {//查询一个数据User user  userMapper.selectById(1L);System.out.println(user);} 
查询多个数据 Testpublic void testSelectBatchIds() {;//查询多个数据ListUser users  userMapper.selectBatchIds(Arrays.asList(1, 2, 3));users.forEach(System.out::println);} 
条件查询 Testpublic void testSelectBatchId() {;//条件查询HashMapString, Object map  new HashMap();map.put(name,白泽);map.put(age,20);ListUser users  userMapper.selectByMap(map);users.forEach(System.out::println);} 
2.插入数据 Testpublic void testInsert() {User user  new User();user.setName(jiuqi);user.setAge(19);user.setEmail(2096253166qq.com);int result  userMapper.insert(user);System.out.println(result);System.out.println(user);}3.主键生成策略 
分布式系统唯一id生成:https://www.cnblogs.com/haoxinyue/p/5208136.html
雪花算法 
snowflake是Twitter开源的分布式ID生成算法结果是一个long型的ID。其核心思想是使用41bit作为毫秒数10bit作为机器的ID5个bit是数据中心5个bit的机器ID12bit作为毫秒内的流水号意味着每个节点在每毫秒可以产生 4096 个 ID最后还有一个符号位永远是0.几乎全球唯一 
在实体类上加TableId(type  IdType.ID_WORKER)     全局唯一id对应数据库中的主键(uuid.自增id.雪花算法.redis.zookeeper)  这是默认生成的id在实体类上加入TableId(type  IdType.AUTO)             主键自增当然我们数据库对应字段一定要是自增在实体类上加入TableId(type  IdType.INPUT)            手动输入我们需要手动添加否则为null当我们不添加任何注解是手动添加id也能成功如果使用上面俩个注解手动添加无效
4.更新数据  sql语句是动态sql Testpublic void testUpdate() {User user  new User();user.setId(6L);user.setName(九七哟);user.setAge(20);user.setEmail(2096253166qq.com);userMapper.updateById(user);          //updateById()参数是 一个对象!}5.自动填充 
阿里巴巴开发手册:所有的数据库表:gmt_create .gmt_modified几乎所有的表都要配置上!而且需要自动化! 
第一种方法我们需要在数据库新增对应字段一般不使用 在实体类上也要加上新增的字段 
private Date createTime;
private Date updateTime; 第二种方法在代码上修改 
删除数据库默认值取消更新  实体类上加上注解TableField(fill  FieldFill.INSERT)private Date creatseTime;TableField(fill  FieldFill.INSERT_UPDATE)private Date updateTime; 创建handler包写MyMetaObjectHandler类 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;Slf4j
Component
public class MyMetaObjectHandler implements MetaObjectHandler {Overridepublic void insertFill(MetaObject metaObject) {log.info(start insert fill ....);this.setFieldValByName(createTime,new Date(),metaObject);this.setFieldValByName(updateTime,new Date(),metaObject);}Overridepublic void updateFill(MetaObject metaObject) {log.info(start update fill ....);this.setFieldValByName(updateTime,new Date(),metaObject);}
}6.乐观锁悲观锁 
乐观锁: 顾名思义十分乐观,他总是认为不会出现问题,无论干什么都不去上锁!如果出现了问题,再次更新值测试 
悲观锁;顾名思义十分悲观,他总是认为出现问题,无论干什么都会上锁!再去操作! 
乐观锁实现方式: 
取出记录时,获取当前version更新时,带上这个version执行更新时,set version  newVersion where version  oldVersion如果version不对,就更新失败
测试下乐观锁 
给数据库添加version 给我们实体类加上versionVersionprivate int version; 注册组件   我们新建config包写MyBatisPlusConfig类这是配置类我们可以把读取mapper文件的注解拿过来MapperScan(com.jiu.mapper)
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;EnableTransactionManagement   //自动管理事务默认开启可以不用写
MapperScan(com.jiu.mapper)  //这是配置类我们可以把读取mapper文件的注解拿过来
Configuration
public class MyBatisPlusConfig {Beanpublic OptimisticLockerInterceptor optimisticLockerInterceptor() {return new OptimisticLockerInterceptor();}
}7.分页查询 
配置类上添加配置//分页插件public PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();} 
测试Testpublic void testPage() {PageUser page  new Page(2, 5);userMapper.selectPage(page, null);page.getRecords().forEach(System.out::println);System.out.println(page.getTotal());  //获取查询的总数} 
8.删除操作和查询操作一样把select换成delete就行 
9.逻辑删除 
物理删除:从数据库中直接移除 
逻辑删除: 在数据库中没有被移除,而是通过一个变量来让他失效! deleted0deleted1执行的是一个update操作再次查询也没有这个数据管理员可以查看被删除的记录!防止数据的丢失,类似于回收站! 
首先我们在数据库表上填上我们要测试的数据实体类加上deleteTableLogicprivate Integer del; 配置类中添加配置 
//注册逻辑删除
Bean
public ISqlInjector sqlInjector(){return new LogicSqlInjector();
} yaml加添加配置
# 配置日志  (默认控制台输出)
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 配置逻辑删除global-cb-config:logic-delete-value: 1logic-not-delete-value: 0