MybatisPlus开发文档
AI-摘要
切换
KunKun GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
一、pom.xml依赖引入
<!--1.数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--2.lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--3.mybatis-plus 版本很重要3.0.5-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!--4.h2-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!--5.模板引擎 依赖:mybatis-plus代码生成的时候报异常-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!--6.配置ApiModel在实体类中不生效-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>spring-boot-starter-swagger</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<!--7.freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<!--8.beetl-->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.3.2.RELEASE</version>
</dependency>
<!--默认系统已经拥有以下两个依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
二、application.yml文件中的常用配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/else?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF8
username: root
password: 123
profiles:
active: dev
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
//下面需要修改成当前项目包的路径
mapper-locations: classpath:com/example/demo/mapper/xml/*.xml
# 配置逻辑删除
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
三、mybatisPlusconfig配置文件
//这里具体到mapper文件夹
@MapperScan("com.example.demo.mapper")
@EnableTransactionManagement
@Configuration
注意加上
public class MyBatisPlusConfig {
// 注册乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
// 逻辑删除组件!
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
//SQL执行效率插件
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启,保证我们的效率
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new
PerformanceInterceptor();
performanceInterceptor.setMaxTime(1000); // ms设置sql执行的最大时间,如果超过了则不执行
performanceInterceptor.setFormat(true); // 是否格式化代码
return performanceInterceptor;
}
}
四、Handler处理器
处理时间字段的填充策略(数据库中的添加时间字段为gmt_create、修改时间字段为gmt_modified)。
@Slf4j
@Component // 一定不要忘记把处理器加到IOC容器中!
public class MyMetaObjectHandler implements MetaObjectHandler {
// 插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
// setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject
this.setFieldValByName("gmtCreate",new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
// 更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
}
五、代码生成器
public class AutoClass {
public static void main(String[] args) {
// 需要构建一个 代码自动生成器 对象
AutoGenerator mpg = new AutoGenerator();
// 配置策略
// 1、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");// 不用改,表示获取当去用户
gc.setOutputDir(projectPath+"/src/main/java");// 不用改,表示项目路径
gc.setAuthor("高垚淼"); // 作者名
gc.setOpen(false); // 创建后是否打开目录,没必要
gc.setFileOverride(false); // 重名文件是否覆盖
gc.setServiceName("%sService"); // 去Service的I前缀
gc.setIdType(IdType.ID_WORKER); // 表示id的生成策略,默认是雪花算法
gc.setDateType(DateType.ONLY_DATE); //表示时间默认采用date类型,秒级别以上转datetime不会存在精度丢失
gc.setSwagger2(true); // 开启后自动添加相关注解,方便生成API文档
mpg.setGlobalConfig(gc); //设置以上配置作用于全局
//2、设置数据源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/else?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123");
dsc.setDbType(DbType.MYSQL); //根据不同数据库进行适配
mpg.setDataSource(dsc);
//3、包的配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("demo"); // 设置在哪个项目名
pc.setParent("com.example"); // 设置在那个com.公司名
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
//4、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("stu","course","score","stu_course"); // 设置要映射的表名
strategy.setNaming(NamingStrategy.underline_to_camel); //设置开启驼峰命名,将数据库中的表_转为java驼峰命名
strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 设置开启驼峰命名,将数据库表中的属性_转为java驼峰命名
strategy.setEntityLombokModel(true); // 自动lombok;
strategy.setLogicDeleteFieldName("deleted"); // 在逻辑删除属性上加注解
// 自动填充配置
TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT); // 设置自动填充时的策略
TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
// 乐观锁
strategy.setVersionFieldName("version"); // 在乐观锁属性上加注解
strategy.setRestControllerStyle(true); // 设置返回实体,这里要注意,如果要后端返回excel表格,这里要false
strategy.setControllerMappingHyphenStyle(true); //设置Controller的请求路径开启驼峰命名
mpg.setStrategy(strategy);
mpg.execute(); //执行
}
}
六、通用Service
Service可以直接实现增删改查操作,不过底层依旧依靠Mapper,但是功能没有mapper多。常见service方法:
Save:
// 插入一条记录(选择字段,策略插入)
👍boolean save(T entity);
// 插入(批量)
👍boolean saveBatch(Collection<T> entityList);
Update :;
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
👍boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
👍boolean updateById(T entity);
// 根据ID 批量更新
👍boolean updateBatchById(Collection<T> entityList);
SaveOrUpdate:
// TableId 注解存在更新记录,否插入一条记录
👍boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
👍boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
👍boolean saveOrUpdateBatch(Collection<T> entityList)
Remove:
// 根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 根据 ID 删除
👍boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
👍boolean removeByIds(Collection<? extends Serializable> idList);
单查询Get:
// 根据 ID 查询
👍T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
👍T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
多查询List:
// 查询所有
👍List<T> list(null);
// 查询列表
👍List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
Count :
// 查询总记录数
👍count(null);
// 根据 Wrapper 条件,查询总记录数
👍int count(Wrapper<T> queryWrapper)
七、状态类R
MybatisPlus提供了类似自定义的responseEntity。
return R.ok(666).setCode(200).setMsg("success");
return R.failed("400").setCode(400).setData(666);
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Gavana
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果