MyBatis-Plus 初级使用

简介: MyBatis-Plus作为MyBatis的升级版,没有对MyBatis进行大的改动,而是在其基础上进行功能增强与升级。MyBatis-Plus相较于MyBatis,操作更加方便,满足的需求也更加广泛。

一、前期准备

1.pom依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>2.3</version></dependency>

在对mybatis-plus配置时需要将之前的mybatis和mybatis-spring配置删掉。

2.mybatis-config.xml

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration></configuration>

3.spring-dao.xml

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:jee="http://www.springframework.org/schema/jee"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">    <!--配置整合mybatis-plus过程--><!--1、配置数据库相关参数properties的属性:${url} --><context:property-placeholderlocation="classpath:jdbc.properties"/><!--2、配置数据库连接池--><beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><propertyname="driverClass"value="${jdbc.driver}"/><propertyname="jdbcUrl"value="${jdbc.url}"/><propertyname="user"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></bean><!--mybatis的sqlsessionFactorybean:org.mybatis.spring.SqlSessionFactoryBean--><!--3、配置mybatis-plus的sqlSessionFactory--><beanid="sqlSessionFactory"class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="configLocation"value="classpath:mybatis-config.xml"/><propertyname="typeAliasesPackage"value="com.zhu.mybatisplus.entity"/></bean><!--4、DAO接口所在包名,Spring会自动查找其下的类--><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value="com.zhu.mybatisplus.dao"/><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/></bean></beans>

二、mp的初级使用

1.entity

@Data@TableName(value="tb_employee")//指定表名publicclassEmployee {
//value与数据库主键列名一致,若实体类属性名与表主键列名一致可省略value@TableId(value="id",type=IdType.AUTO)//指定自增策略privateIntegerid;
//若没有开启驼峰命名,或者表中列名不符合驼峰规则,可通过该注解指定数据库表中的列名,exist标明数据表中有没有对应列@TableField(value="last_name",exist=true)
privateStringlastName;
privateStringemail;
privateIntegergender;
privateIntegerage;
}

@TableName、@TableId、@TableField这三个注解能够快速让实体类与数据库的表关联起来。@Tableld这个注解是对主键的设置,当数据库中的主键字段名和实体类中不同时,靠这个注解能够进行实体类与字段名的映射,它还可以设置自增策略等属性。

2.mapper

publicinterfaceEmplopyeeDaoextendsBaseMapper<Employee> {
}

使用mp时,Mapper文件有一个简便的操作,继承BaseMapper.BaseMapper中包含了基础的增删改查方法。

// 插入一条记录intinsert(Tentity);
// 根据 entity 条件,删除记录intdelete(@Param(Constants.WRAPPER) Wrapper<T>wrapper);
// 删除(根据ID 批量删除)intdeleteBatchIds(@Param(Constants.COLLECTION) Collection<?extendsSerializable>idList);
// 根据 ID 删除intdeleteById(Serializableid);
// 根据 columnMap 条件,删除记录intdeleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object>columnMap);
// 根据 whereWrapper 条件,更新记录intupdate(@Param(Constants.ENTITY) TupdateEntity, @Param(Constants.WRAPPER) Wrapper<T>whereWrapper);
// 根据 ID 修改intupdateById(@Param(Constants.ENTITY) Tentity);
// 根据 ID 查询TselectById(Serializableid);
// 根据 entity 条件,查询一条记录TselectOne(@Param(Constants.WRAPPER) Wrapper<T>queryWrapper);
// 查询(根据ID 批量查询)List<T>selectBatchIds(@Param(Constants.COLLECTION) Collection<?extendsSerializable>idList);
// 根据 entity 条件,查询全部记录List<T>selectList(@Param(Constants.WRAPPER) Wrapper<T>queryWrapper);
// 查询(根据 columnMap 条件)List<T>selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object>columnMap);
// 根据 Wrapper 条件,查询全部记录List<Map<String, Object>>selectMaps(@Param(Constants.WRAPPER) Wrapper<T>queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值List<Object>selectObjs(@Param(Constants.WRAPPER) Wrapper<T>queryWrapper);
// 根据 entity 条件,查询全部记录(并翻页)IPage<T>selectPage(IPage<T>page, @Param(Constants.WRAPPER) Wrapper<T>queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)IPage<Map<String, Object>>selectMapsPage(IPage<T>page, @Param(Constants.WRAPPER) Wrapper<T>queryWrapper);
// 根据 Wrapper 条件,查询总记录数IntegerselectCount(@Param(Constants.WRAPPER) Wrapper<T>queryWrapper);

当我们使用mp时,对于简单的增删改查,我们完全可以只继承BaseMapper接口,直接调用此接口中的方法进行操作,但是当一些业务需要的复杂增删改查时,仍需要进行Mapper文件的编写。

三、ServiceCURD

mp除了能够在mapper类中写增删改查之外,还可以直接在service及其实现层写入。

publicinterfaceIService<T>

在进行service层编写时要先引入IService,然后在其实现层

/***IService:mp提供的接口。ServiceImpl:mp提供的接口实现类。*ServiceImpl<BaseMapper<T>, T>是IService 的实现类。*/@ServicepublicclassUserServiceImplextendsServiceImpl<UserMapper,User>implementsUserService{}

这样便可以直接在服务层编写增删改查方法了。

1.Save

// 插入一条记录(选择字段,策略插入)booleansave(Tentity);
// 插入(批量)booleansaveBatch(Collection<T>entityList);
// 插入(批量)booleansaveBatch(Collection<T>entityList, intbatchSize);
1.SaveOrUpdate
// TableId 注解存在更新记录,否插入一条记录booleansaveOrUpdate(Tentity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法booleansaveOrUpdate(Tentity, Wrapper<T>updateWrapper);
// 批量修改插入booleansaveOrUpdateBatch(Collection<T>entityList);
// 批量修改插入booleansaveOrUpdateBatch(Collection<T>entityList, intbatchSize);

2.Remove

// 根据 entity 条件,删除记录booleanremove(Wrapper<T>queryWrapper);
// 根据 ID 删除booleanremoveById(Serializableid);
// 根据 columnMap 条件,删除记录booleanremoveByMap(Map<String, Object>columnMap);
// 删除(根据ID 批量删除)booleanremoveByIds(Collection<?extendsSerializable>idList);

3.Update

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlsetbooleanupdate(Wrapper<T>updateWrapper);
// 根据 whereWrapper 条件,更新记录booleanupdate(TupdateEntity, Wrapper<T>whereWrapper);
// 根据 ID 选择修改booleanupdateById(Tentity);
// 根据ID 批量更新booleanupdateBatchById(Collection<T>entityList);
// 根据ID 批量更新booleanupdateBatchById(Collection<T>entityList, intbatchSize)

4.Get

// 根据 ID 查询TgetById(Serializableid);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")TgetOne(Wrapper<T>queryWrapper);
// 根据 Wrapper,查询一条记录TgetOne(Wrapper<T>queryWrapper, booleanthrowEx);
// 根据 Wrapper,查询一条记录Map<String, Object>getMap(Wrapper<T>queryWrapper);
// 根据 Wrapper,查询一条记录<V>VgetObj(Wrapper<T>queryWrapper, Function<?superObject, V>mapper);

5.List

// 查询所有List<T>list();
// 查询列表List<T>list(Wrapper<T>queryWrapper);
// 查询(根据ID 批量查询)Collection<T>listByIds(Collection<?extendsSerializable>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();
// 查询全部记录<V>List<V>listObjs(Function<?superObject, V>mapper);
// 根据 Wrapper 条件,查询全部记录List<Object>listObjs(Wrapper<T>queryWrapper);
// 根据 Wrapper 条件,查询全部记录<V>List<V>listObjs(Wrapper<T>queryWrapper, Function<?superObject, V>mapper);

6.Page

// 无条件分页查询IPage<T>page(IPage<T>page);
// 条件分页查询IPage<T>page(IPage<T>page, Wrapper<T>queryWrapper);
// 无条件分页查询IPage<Map<String, Object>>pageMaps(IPage<T>page);
// 条件分页查询IPage<Map<String, Object>>pageMaps(IPage<T>page, Wrapper<T>queryWrapper);

7.Count

// 查询总记录数intcount();
// 根据 Wrapper 条件,查询总记录数intcount(Wrapper<T>queryWrapper);

8.query

// 链式查询 普通QueryChainWrapper<T>query();
// 链式查询 lambda 式。注意:不支持 KotlinLambdaQueryChainWrapper<T>lambdaQuery(); 
// 示例:query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();

9.update

// 链式更改 普通UpdateChainWrapper<T>update();
// 链式更改 lambda 式。注意:不支持 Kotlin LambdaUpdateChainWrapper<T>lambdaUpdate();
// 示例:update().eq("column", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);

以上便是对MyBatis-Plus的初级使用,作为MyBatis的升级,MP用起来更加方便简洁,能够让我们更快速的进行开发任务,当然MP的使用不止这些,仍需继续进行学习深化。


相关文章
|
消息中间件 弹性计算 Java
Rocketmq-spring入门与实践
本场景带您体验如何在 Spring 生态中优雅地使用 Apache RocketMQ,感受最受欢迎业务开发框架与最受欢迎消息平台结合的魅力。
|
Java Maven
IDEA 2018 2020 2021 2022 各版本对Maven版本兼容问题汇总
Maven3.6.3版本兼容问题 错误信息如下: 测试范围如下图: 注意:针对一些老项目 还是尽量采用 3.6.3版本,针对idea各个版本的兼容性就很兼容 0.IDEA 2022 兼容maven 3.8.1及之前的所用版本 1.IDEA 2021 兼容maven 3.8.1及之前的所用版本 2.IDEA 2020 兼容Maven 3.6.3及之前所有版本 3.IDEA 2018 兼容Maven3.6.1及之前所有版本
5396 0
IDEA 2018 2020 2021 2022 各版本对Maven版本兼容问题汇总
|
3月前
|
机器学习/深度学习 人工智能 缓存
中国AI又赢了!成本砍到前代1/10!DeepSeek V4为什么能这么便宜?
DeepSeek V4以自研CSA+HCA混合稀疏注意力架构,实现百万上下文算力需求降至前代1/10;KV缓存压缩至7%,消费级显卡即可运行;全量开源、免费商用。精度不妥协——MRCR检索准确率83.5%,超越Gemini 3.1 Pro,真正让长文本AI从“奢侈品”变为普惠“水电煤”。(239字)
626 2
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
972 2
|
消息中间件 监控 Java
开发者如何使用云消息队列 RocketMQ 版
【10月更文挑战第12天】开发者如何使用云消息队列 RocketMQ 版
2010 111
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
685 3
|
消息中间件 Java RocketMQ
【RocketMQ系列九】SpringCloudStream整合RocketMQ
【RocketMQ系列九】SpringCloudStream整合RocketMQ
1644 1
|
敏捷开发 持续交付
【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅
【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅
[已解决]npm淘宝镜像最新官方指引(2023.08.31)
[已解决]npm淘宝镜像最新官方指引(2023.08.31)
8126 0
|
XML Java 关系型数据库
MyBatis Plus入门实践详解
MyBatis Plus入门实践详解
543 0