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的使用不止这些,仍需继续进行学习深化。


相关文章
|
机器学习/深度学习 存储 人工智能
一文读懂云计算、大数据和AI间的关系和区别
相信大家都听说过云计算、大数据和人工智能,并且它们之间好像互相有关系:一般谈云计算的时候会提到大数据、大数据的时候会提人工智能、谈人工智能的时候会提云计算……三者之间相辅相成又不可分割,那么这三者之间到底是怎么一回事呢,今天小编就来讲讲。
4409 0
一文读懂云计算、大数据和AI间的关系和区别
【已解决】TypeError: Cannot destructure property `createHash` of ‘undefined‘ or ‘null‘
【已解决】TypeError: Cannot destructure property `createHash` of ‘undefined‘ or ‘null‘
1287 1
|
11月前
|
Kubernetes 持续交付 微服务
深入浅出:理解 Kubernetes 核心概念
Kubernetes 是一个由 Google 开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它已成为微服务架构下的行业标准。本文深入浅出地介绍了 Kubernetes 的核心概念和组件,包括 Master 和 Node 组件、Pod、Service、Deployment 等,并提供了基本操作示例和实战应用,帮助你更好地管理和利用容器环境。
|
11月前
|
监控 关系型数据库 MySQL
MySQL数据表索引命名规范
MySQL数据表索引命名规范
746 1
|
Kubernetes 网络协议 网络安全
在K8S中,k8s中service访问有问题,该如何排查?
在K8S中,k8s中service访问有问题,该如何排查?
|
机器学习/深度学习 存储 边缘计算
深度学习之稀疏感知器设计
基于深度学习的稀疏感知器(Sparse Perceptron)设计旨在构建高效的神经网络结构,通过在网络中引入稀疏性来减少计算和存储需求,同时保持模型的性能。
187 0
|
网络协议 Java Go
技术笔记:KCP协议学习
技术笔记:KCP协议学习
571 0
|
Web App开发 JavaScript 前端开发
重复创建多个定时器,是否会导致内存溢出
重复创建多个定时器,是否会导致内存溢出
|
数据采集 存储 SQL
数据资产入表在即,企业如何把握机遇,进行数据资产管理?
数据资产入表在即,对于企业而言,如何在充满机遇的环境下调整策略、适应变化,成为了焦点问题。数据资产入表,离不开前期扎实的数据治理准备,那么究竟应然如何实现数据资产的规范化管理?本文告诉你答案。
430 0
|
测试技术 API 数据安全/隐私保护
『App自动化测试之Appium应用篇』| Appium常用API及操作
『App自动化测试之Appium应用篇』| Appium常用API及操作
635 1