Mybatis-Plus 真好用(乡村爱情加持)
写在前面
MyBatis的增强方案确实有不少,甚至有种感觉是现在如果只用 “裸MyBatis”,不来点增强插件都不好意思了。这不,在上一篇文章《Spring Boot项目利用MyBatis Generator进行数据层代码自动生成》 中尝试了一下 MyBatis Generator。这次来点更加先进的 Mybatis-Plus,SQL语句都不用写了,分页也是自动完成,嗯,真香!
数据库准备
CREATE TABLE tbl_user ( user_id BIGINT(20) NOT NULL COMMENT '主键ID', user_name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', user_age INT(11) NULL DEFAULT NULL COMMENT '年龄', PRIMARY KEY (user_id) ) charset = utf8;
MyBatis-Plus加持
-
工程搭建 (不赘述了)
-
依赖引入
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.12</version> </dependency>
主要是 Mybatis Plus、Lombok(不知道Lombok干嘛的?可以看这里)、Druid连接池 等依赖。
- MyBatis Plus配置
项目配置
mybatis-plus: mapper-locations: classpath:/mapper/*Mapper.xml
新增 MyBatis Plus配置类
@Configuration @MapperScan("cn.codesheep.springbtmybatisplus.mapper") public class MyBatisConfig { }
看到没,几乎零配置啊,下面就可以写业务逻辑了
业务编写
- 实体类
@Data @TableName("tbl_user") public class User { @TableId(value = "user_id") private Long userId; private String userName; private Integer userAge; }
- Mapper类
public interface UserMapper extends BaseMapper<User> { }
这里啥接口方法也不用写,就可以实现增删改查了!
- Service类
Service接口:
public interface UserService extends IService<User> { int insertUser( User user ); int updateUser( User user ); int deleteUser( User user ); User findUserByName( String userName ); IPage getUserPage( Page page, User user ); }
Service实现:
@Service @AllArgsConstructor public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { // 增 @Override public int insertUser(User user) { return baseMapper.insert( user ); } // 改 @Override public int updateUser(User user) { return baseMapper.updateById( user ); } // 删 @Override public int deleteUser(User user) { return baseMapper.deleteById( user.getUserId() ); } // 查 @Override public User findUserByName( String userName ) { return baseMapper.getUserByName( userName ); } }
- Controller类
@RestController @RequestMapping("/user") public class UserContorller { @Autowired private UserService userService; // 增 @PostMapping( value = "/insert") public Object insert( @RequestBody User user ) { return userService.insertUser( user ); } // 改 @PostMapping( value = "/update") public Object update( @RequestBody User user ) { return userService.updateUser( user ); } // 删 @PostMapping( value = "/delete") public Object delete( @RequestBody User user ) { return userService.deleteUser( user ); } // 查 @GetMapping( value = "/getUserByName") public Object getUserByName( @RequestParam String userName ) { return userService.findUserByName( userName ); } }
通过以上几个简单的步骤,我们就实现了 tbl_user
表的增删改查,传统 MyBatis的 XML文件一个都不需要写!
实际实验【《乡爱》加持】
- 启动项目
很牛批的 logo就会出现
接下来通过 Postman来发送增删改查的请求
- 插入记录
通过 Postman随便插入几条记录 POST localhost:8089/user/insert
{"userId":3,"userName":"刘能","userAge":"58"} {"userId":4,"userName":"赵四","userAge":"58"} {"userId":5,"userName":"谢广坤","userAge":"58"} {"userId":6,"userName":"刘大脑袋","userAge":"58"}
- 修改记录
修改记录时需要带用户ID,比如我们修改 赵四
那条记录的名字为 赵四(Zhao Four)
- 删除记录
修改记录时同样需要带用户ID,比如删除ID=6 那条 刘大脑袋
的记录
- 查询记录(普通查询,下文讲分页查询)
比如,按照名字来查询:GET localhost:8089/user/getUserByName?userName=刘能
最关心的分页问题
- 首先装配分页插件
@Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }
- Mapper类
public interface UserMapper extends BaseMapper<User> { // 普通查询 User getUserByName( String userName ); // 分页查询 IPage<List<User>> getUsersPage( Page page, @Param("query") User user ); }
- Service类
@Service @AllArgsConstructor public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { // 查:普通查 @Override public User findUserByName( String userName ) { return baseMapper.getUserByName( userName ); } // 分页查 @Override public IPage getUserPage(Page page, User user) { return baseMapper.getUsersPage( page, user ); } }
- Controller类
@GetMapping( value = "/page") public Object getUserPage( Page page, User user ) { return userService.getUserPage( page, user ); }
实际实验一下,我们分页查询 年龄 = 58
的多条记录:
可以看到结果数据中,除了给到当前页数据,还把总记录条数,总页数等一并返回了,很是优雅呢 !
写在最后
由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!
- My Personal Blog:CodeSheep 程序羊

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
tensorflow 之 卷积神经网络
应用场景 图像识别与检索 人脸识别 性别/年龄/情绪识别 物体检测 视频处理 语音分析 概述 一般一个卷积神经网络由多个卷积层构成,在卷基层内部通常会有如下几个操作: 图像通过多个卷积核滤波,添加偏置,提取局部特征每个卷积核会映射出一个新的2D图像。 卷积核的滤波结果输出到激活函数中,激活函数通常选ReLU 对激活函数的结果进行池化操作,池化就是对图像分割成不同的小区域后取平均值或最大值。一般取最大值。 上述几个步骤就构成了最常见的卷积层。在池化的后面还可以加上batch normalization等操作。 一个卷积层中可以有不同的卷积核,而每一个卷积核都对应一个滤波后映射出的新图像,同一个新图像的每一个像素都来自完全相同的卷积核。这种卷积核的权值共享可以有效降低模型负责度,减轻过拟合,减少计算量。 卷积神经网络结构 建立卷积神经网络对手写数字识别问题进行优化,构建由两个卷积层(包含池化层),两个全连接层构成的卷积神经网络。输入图像是28×28的单通道数据,输出是10×1的one_hot编码的向量。 第一层:卷积核大小是[5,5],输入通道1,输出通道32,padding选择SAME模...
- 下一篇
状态机在马蜂窝机票订单交易系统中的应用与优化实践
在设计交易系统时,稳定性、可扩展性、可维护性都是我们需要关注的重点。本文将对如何通过状态机在交易系统中的应用解决上述问题做出一些探讨。 关于马蜂窝机票订单交易系统 交易系统往往存在订单维度多、状态多、交易链路长、流程复杂等特点。以马蜂窝大交通业务中的机票交易为例,用户提交的一个订单除了机票信息之外可能还包含很多信息,比如保险或者其他附加产品。其中保险又分为很多类型,如航意险、航延险、组合险等。 从用户的维度看,一个订单是由购买的主产品机票和附加产品共同构成,支付的时候是作为一个整体去支付,而如果想要退票、退保也是可以部分操作的;从供应商的维度看,一个订单中的每个产品背后都有独立的供应商,机票有机票的供应商,保险有保险的供应商,每个供应商的订单都需要分开出票、独立结算。 用户的购买支付流程、供应商的出票出保流程,构成一个有机的整体穿插在机票交易系统中,密不可分。 状态机在机票交易系统中的应用与优化 有限状态机的概念 有限状态机(以下简称状态机)是一种用于对事物或者对象行为进行建模的工具。 状态机将复杂的逻辑简化为有限个稳定状态,构建在这些状态之间的转移和动作等行为的数学模型,在稳定状态中...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6