springboot 集成mybatisPlus之基本的CURD操作
1.项目的整体目录构成如下(最后附上源代码):
2.在pom.xml文件里加入相关的依赖 如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>net.longjin</groupId> <artifactId>mybatis_plus</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybatis_plus</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.0</version> </dependency> <!-- <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency>--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.74</version> </dependency> <!--spring切面aop依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3.配置文件如下:
application.yml:
server: port: 9730 servlet: context-path: /case max-http-header-size: 10240 tomcat: uri-encoding: UTF-8 max-threads: 500 max-connections: 10000 spring: profiles: active: dev application: name: caseCenter #mybatis-plus: # mapper-locations: classpath:mapper/**/*Mapper.xml # configuration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
application-dev.yml配置:
config: casedb: ip: 127.0.0.1 port: 3306 username: root password: 123456 #当前使用配置配置 spring: datasource: url: jdbc:mysql://${config.casedb.ip}:${config.casedb.port}/test?characterEncoding=utf8&useSSL=false&allowMultiQueries=true password: ${config.casedb.password} username: ${config.casedb.username} servlet: multipart: max-file-size: 300MB max-request-size: 1024MB logging: config: classpath:logback-spring-dev.xml
application-prod.yml配置:
config: casedb: ip: 127.0.0.1 port: 3306 username: root password: 123456 #当前使用配置配置 spring: profiles: prod datasource: url: jdbc:mysql://${config.casedb.ip}:${config.casedb.port}/test?characterEncoding=utf8&useSSL=false&allowMultiQueries=true password: ${config.casedb.password} username: ${config.casedb.username} servlet: multipart: max-file-size: 300MB max-request-size: 1024MB logging: config: classpath:logback-spring-dev.xml
logback-spring-dev.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 此xml在spring-boot-2.2.2.RELEASE.jar里 --> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration>
4.创建一个AdviseInfo的实体类:
package net.longjin.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; import java.util.Date; /** * (AdviseInfo)实体类 * * @author 何志鹏 * @since 2020-11-19 13:43:55 */ @Data @TableName("advise_info") public class AdviseInfo implements Serializable { private static final long serialVersionUID = -94704944729049233L; /** * 主键 */ @TableId("advise_id") private String adviseId; /** * 用户名称 */ private String userName; /** * 用户id */ private String userId; /** * 内容 */ private String content; private String mobile; /** * 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date createDate; }
5.AdviseInfoMapper层:
package net.longjin.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import net.longjin.entity.AdviseInfo; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Component; import java.util.List; /** * (AdviseInfo)表数据库访问层 * * @author 何志鹏 * @since 2020-11-19 13:43:56 */ @Mapper public interface AdviseInfoMapper extends BaseMapper<AdviseInfo> { /** * 查询所有吐槽 自定义xml查询 * * @param adviseInfo * @return */ List<AdviseInfo> queryAll(AdviseInfo adviseInfo); }
6.AdviseInfoService层:
package net.longjin.service; import com.baomidou.mybatisplus.core.metadata.IPage; import net.longjin.entity.AdviseInfo; import net.longjin.parms.AdviseInfoParms; import java.util.List; /** * (AdviseInfo)表服务接口 * * @author 何志鹏 * @since 2020-11-19 13:43:57 */ public interface AdviseInfoService { /** * 通过ID查询单条数据 * * @param adviseId 主键 * @return 实例对象 */ AdviseInfo queryById(String adviseId); /** * 查询多条数据 * * @return 对象列表 */ IPage<AdviseInfo> queryAllByLimit(AdviseInfoParms adviseInfoParms); /** * 新增数据 * * @param adviseInfo 实例对象 * @return 实例对象 */ int insert(AdviseInfo adviseInfo); /** * 修改数据 * * @param adviseInfo 实例对象 * @return 实例对象 */ int update(AdviseInfo adviseInfo); /** * 通过主键删除数据 * * @param adviseId 主键 * @return 是否成功 */ int deleteById(String adviseId); /** * 查询所有吐槽 自定义xml查询 * * @param adviseInfo * @return */ List<AdviseInfo> queryAll(AdviseInfo adviseInfo); }
7.AdviseInfoServiceImpl层:
package net.longjin.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import net.longjin.entity.AdviseInfo; import net.longjin.mapper.AdviseInfoMapper; import net.longjin.parms.AdviseInfoParms; import net.longjin.service.AdviseInfoService; import net.longjin.utils.StringStrUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * (AdviseInfo)表服务实现类 * * @author 何志鹏 * @since 2020-11-19 13:43:57 */ @Service("adviseInfoService") public class AdviseInfoServiceImpl implements AdviseInfoService { @Autowired private AdviseInfoMapper adviseInfoMapper; /** * 通过ID查询单条数据 * * @param adviseId 主键 * @return 实例对象 */ @Override public AdviseInfo queryById(String adviseId) { return this.adviseInfoMapper.selectById(adviseId); } /** * 查询多条数据 * * @return 对象列表 */ @Override public IPage<AdviseInfo> queryAllByLimit(AdviseInfoParms adviseInfoParms) { Page<AdviseInfo> page = new Page<>(adviseInfoParms.getPageNum(),adviseInfoParms.getPageSize()); QueryWrapper<AdviseInfo> queryWrapper = buildQueryWrapper(adviseInfoParms); return adviseInfoMapper.selectPage(page, queryWrapper); } /** * * * @param adviseInfoParms * @return */ private QueryWrapper<AdviseInfo> buildQueryWrapper(AdviseInfoParms adviseInfoParms) { QueryWrapper<AdviseInfo> queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(adviseInfoParms.getUserName())){ queryWrapper.and(wrapper->wrapper.like("user_name",adviseInfoParms.getUserName())); } return queryWrapper; } /** * 新增数据 * * @param adviseInfo 实例对象 * @return 实例对象 */ @Override public int insert(AdviseInfo adviseInfo) { adviseInfo.setAdviseId(StringStrUtils.getUUID()); return this.adviseInfoMapper.insert(adviseInfo); } /** * 修改数据 * * @param adviseInfo 实例对象 * @return 实例对象 */ @Override public int update(AdviseInfo adviseInfo) { return this.adviseInfoMapper.updateById(adviseInfo); } /** * 通过主键删除数据 * * @param adviseId 主键 * @return 是否成功 */ @Override public int deleteById(String adviseId) { return this.adviseInfoMapper.deleteById(adviseId); } /** * 查询所有吐槽 自定义xml查询 * * @param adviseInfo * @return */ @Override public List<AdviseInfo> queryAll(AdviseInfo adviseInfo) { return adviseInfoMapper.queryAll(adviseInfo); } }
8.AdviseInfoController层
package net.longjin.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.pagehelper.PageInfo; import net.longjin.entity.AdviseInfo; import net.longjin.entity.ResultsCode; import net.longjin.parms.AdviseInfoParms; import net.longjin.service.AdviseInfoService; import net.longjin.utils.MyBatisPageUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * 吐槽模块 * * @author 何志鹏 * @since 2020-11-19 13:43:58 */ @RestController @RequestMapping("api/adviseInfo") public class AdviseInfoController { /** * 服务对象 */ @Autowired private AdviseInfoService adviseInfoService; /** * 根据id查询详情 * */ @PostMapping("queryById") public ResultsCode selectOne(@RequestBody AdviseInfoParms adviseInfoParms) { AdviseInfo adviseInfo = this.adviseInfoService.queryById(adviseInfoParms.getAdviseId()); return ResultsCode.success(adviseInfo); } /** * 添加建议 * * @param adviseInfoParms * @return */ @PostMapping("insert") public ResultsCode insert(@RequestBody AdviseInfoParms adviseInfoParms) { AdviseInfo adviseInfo = new AdviseInfo(); BeanUtils.copyProperties(adviseInfoParms,adviseInfo); int insert = this.adviseInfoService.insert(adviseInfo); if(insert>0){ return ResultsCode.success(); } return ResultsCode.Fail(); } /** * 修改建议 * * @param adviseInfoParms * @return */ @PostMapping("update") public ResultsCode update(@RequestBody AdviseInfoParms adviseInfoParms) { AdviseInfo adviseInfo = new AdviseInfo(); BeanUtils.copyProperties(adviseInfoParms,adviseInfo); int update = this.adviseInfoService.update(adviseInfo); if(update>0){ return ResultsCode.success(); } return ResultsCode.Fail(); } /** * 删除建议 * * @param adviseInfoParms * @return */ @PostMapping("deleteById") public ResultsCode deleteById(@RequestBody AdviseInfoParms adviseInfoParms) { int delete = this.adviseInfoService.deleteById(adviseInfoParms.getAdviseId()); if(delete>0){ return ResultsCode.success(); } return ResultsCode.Fail(); } /** * 吐槽列表分页查询 * * @param adviseInfoParms * @return */ @PostMapping("queryAllByLimit") public ResultsCode queryAllByLimit(@RequestBody AdviseInfoParms adviseInfoParms) { IPage<AdviseInfo> adviseInfoIPage = this.adviseInfoService.queryAllByLimit(adviseInfoParms); return ResultsCode.success(adviseInfoIPage); } /** * 查询所有吐槽 自定义xml查询 * * @param adviseInfoParms * @return */ @PostMapping("queryAll") public ResultsCode queryAll(@RequestBody AdviseInfoParms adviseInfoParms) { AdviseInfo adviseInfo = new AdviseInfo(); BeanUtils.copyProperties(adviseInfoParms,adviseInfo); MyBatisPageUtils.startPage(adviseInfoParms.getPageNum(), adviseInfoParms.getPageSize()); List<AdviseInfo> adviseInfos = this.adviseInfoService.queryAll(adviseInfo); PageInfo<AdviseInfo> page = new PageInfo<>(adviseInfos); return ResultsCode.success(page); } }
9.参数接收实体AdviseInfoParms类:
package net.longjin.parms; import lombok.Data; import net.longjin.entity.BaseCondition; /** * 描述:AdviseInfoParms * * @author 何志鹏 * @ClassName:AdviseInfoParms * @create 2020-11-23 14:26 * Version 1.0 */ @Data public class AdviseInfoParms extends BaseCondition { /** * 主键 */ private String adviseId; /** * 用户名称 */ private String userName; /** * 用户id */ private String userId; /** * 内容 */ private String content; private String mobile; }
10.公共参数实体类:
package net.longjin.entity; import lombok.Data; /** * 描述:BaseCondition * * @author 何志鹏 * @ClassName:BaseCondition * @create 2020-11-23 14:00 * Version 1.0 */ @Data public class BaseCondition { /** * 页数 */ private int pageNum; /** * 每页显示的记录数 */ private int pageSize; /** * 开始时间 */ private Long startTime; /** * 结束时间 */ private Long endTime; }
11.自定义xml查询:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="net.longjin.mapper.AdviseInfoMapper"> <resultMap type="net.longjin.entity.AdviseInfo" id="AdviseInfoMap"> <result property="adviseId" column="advise_id" jdbcType="VARCHAR"/> <result property="userName" column="user_name" jdbcType="VARCHAR"/> <result property="userId" column="user_id" jdbcType="VARCHAR"/> <result property="content" column="content" jdbcType="VARCHAR"/> <result property="mobile" column="mobile" jdbcType="VARCHAR"/> <result property="createDate" column="create_date" jdbcType="OTHER"/> </resultMap> <!--通过实体作为筛选条件查询--> <select id="queryAll" resultMap="AdviseInfoMap"> select advise_id, user_name, user_id, content, mobile, create_date from test.advise_info <where> <if test="adviseId != null and adviseId != ''"> and advise_id = #{adviseId} </if> <if test="userName != null and userName != ''"> and user_name = #{userName} </if> <if test="userId != null and userId != ''"> and user_id = #{userId} </if> <if test="content != null and content != ''"> and content = #{content} </if> <if test="mobile != null and mobile != ''"> and mobile = #{mobile} </if> <if test="createDate != null"> and create_date = #{createDate} </if> </where> </select> </mapper>
12.最后用postman调用(附源码地址:https://gitee.com/hezhipeng_ek/mybatis_plus.git):