Mybatis系列二-快速开发
mybatis学习系列第二篇
分页
在网页中常常用到,在查询数据库内容并想将其输出的时候,因为有时有多组数据,一页展示过于突兀,所以会用到分页操作。
在sql用limit来分页。
首先是UserMapper.xml
<!-- 实现分页的接口 -->
<select id="getUserByLimit" parameterType="map" resultType="User">
select * from mybatis.user limit #{startIndex},#{pageSize};
</select>
然后是UserMapper.java
// 实现分页查询操作
List<User> getUserByLimit(Map<String,Integer> map);
再到测试类中的代码
public void getUserByLimit() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
Map<String,Integer> map = new HashMap<>();
//通过map来传参来实现数据的交互绑定
map.put("startIndex", 1);
map.put("pageSize", 2);
List<User> userlist = mapper.getUserByLimit(map);
for (User user : userlist) {
System.out.println(user);
}
sqlSession.close();
}
还可以使用RowBounds来实现分页
UserMapper.java
// 实现分页的方法二
List<User> getUserByLimit2();
UserMapper.xml
<!-- 实现分页的方法二 -->
<select id="getUserByLimit2" resultType="User">
select * from mybatis.user ;
</select>
RowBounds构造方法,和limit相似。

test代码
public void getUserByLimit2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
RowBounds rowBounds = new RowBounds(1,2);
// 使用java代码来实现分页操作
List<User> selectList = sqlSession.selectList("com.yhy.dao.UserDao.getUserByLimit2", null, rowBounds);
for (User user : selectList) {
System.out.println(user);
}
sqlSession.close();
}
输出结果

pageHelper分页插件
注解开发
本质是使用反射,还有动态代理模式
在工具类MybatisUtils中,打开自动提交事务,这样在后续的编写代码中就不要在使用commit。

// 有了工厂就可以获得实例来使用,sqlsession就可以面向数据库操作jdbc
// 打开自动提交事务
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
注解开发流程-实例
整体文件结构

使用注解开发的时候,接口里面定义的方法就是使用注解的地方,实例如下
//使用注解的方法,之前是需要写xml文件进行配置,这里就直接使用注解的方法
//这个方法是查询所有用户信息
@Select("select * from user")
List<User> getUsers();
在主配置文件中,也是关键所在,绑定的有所不同。将文件资源标签改为class,并将所在的类位置标出。

测试类-使用的步骤和之前的没有使用注解的方法一样。
@Test
public void test() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsers();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
总的来说,注解是分散的数据配置,而xml是集中的数据配置。
使用注解可以很多程度来简化工作,省去了很多配置文件的编写,但有时注解过于分散不利于管理和维护,在一些通用配置上,像数据库连接等,还是比较建议xml文件进行配置,因为XML方式比注解的可扩展性和复杂性维护上好的多。所以注解有利有弊,看什么场景去使用,用对了就是事半功倍的效果!
了解Lombok
Lombok是一个java开发插件,目的是简化代码,方便开发,通过注解省去了一些pojo中的get、set方法和构造方法,还有一些其他的tostring和equals等。有些介绍可以参考官网中的文档,当然对于这款插件,欢呼声和骂声一直都充斥在各个平台,各种分析文章网上也有很多,我就不再去记录太多了。但任何事情都有其两面性,理性看待,喜欢觉得有用大家就用,不喜欢就当了解一些也不为过。下面是记录使用的一些图片代码。
1、插件下载--setting里面的插件

2、maven导包,在官网找到信息进行导包,选择自己所需要的版本进行使用

我选择了最新的版本,有错再去解决
<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
3、使用实例
在插件管理查看信息里面就可以看到Lombok的一些介绍吗,下面是一些注解的介绍
@Getter and @Setter //生成get和set方法
@FieldNameConstants
@ToString //tostring方法
@EqualsAndHashCode //equals和hashcode方法的生成
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor //全参构造和无参构造和一个自定义构造
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data //这个最常见了,加一个可以默认生成了一系列的方法,可以见下图使用
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@val
@var
experimental @var
@UtilityClass
Lombok config system
Code inspections
Refactoring actions (lombok and delombok)
将变量定义留着,其他方法注释掉,就可以自动生成了

默认是生成了无参的构造器,加入AllArgsConstructor就可以了

最后留下的代码就剩得这么干净。自己看的确实很舒服,当用的多了,不懂的人可能够呛哈哈哈。

最后
这是第二篇mybatis文章,谢谢阅读。有错误请多多指教,谅解!跟随b站狂神的视频记录的学习笔记
Mybatis系列二-快速开发的更多相关文章
- MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致
MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致 使用ResultMap节点配置信息 在映射文件中 ...
- 深入浅出Mybatis系列二-配置简介(mybatis源码篇)
注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(一)---Mybatis入门>, ...
- Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实体类属性名不相同的冲突
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html http://www.cnblogs.com/xdp-gacl/p/4264425.ht ...
- Mysql系列二:Mysql 开发标准规范
原文链接:http://www.cnblogs.com/liulei-LL/p/7729983.html 一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】
<Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...
- 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】
<Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 ...
随机推荐
- 转载-linux内核长什么样
来源:Linux中国 今天,我来为大家解读一幅来自 TurnOff.us 的漫画 "InSide The Linux Kernel" . TurnOff.us是一个极客漫画网站,作 ...
- JasperReports入门教程(一):快速入门
JasperReports入门教程(一):快速入门 背景 现在公司的项目需要实现一个可以配置的报表,以便快速的适应客户的需求变化.后来在网上查资料发现可以使用JasperReports + Jaspe ...
- 链表数据-PHP的实现
首先,链表数据的结构是: 其次,链表数据的结构特点: 随后,填充链表结构: 链表结构的数据,从链表尾部塞入数据. 最后,删除链表结构:
- 箭头函数的this指向问题-一看就懂
OK,对于箭头函数的this 用一句话概括:箭头函数中的this指向的是定义时的this,而不是执行时的this. 如果上面这句话听的是懂非懂或者完全不懂的,没关系,下面会有案例讲解. 举个栗子 来看 ...
- 开发机直连 Docker 中的 Redis 容器小教程
在笔者日常开发中,都是把redis装在windows系统中.虽然可以通过RedisDesktopManager等客户端工具连接操作redis,但是还是觉得low了一些.因为作为程序员,我可能更想在Li ...
- 定期清理nohup.out
事件背景 服务应用weblogic通过nohup启动. nohup的使用全部都在weblogic域中的bin目录下 但是没有做定期nohup.out的清理 导致核心服务的日志过大,在出现问题时候难以打 ...
- Asynchronous Disk I/O Appears as Synchronous on Windows
Summary File I/O on Microsoft Windows can be synchronous or asynchronous. The default behavior for I ...
- Spring绑定请求参数过程以及使用@InitBinder来注册自己的属性处理器
在工作中,经常会出现前台的请求参数由于无法被正常转型,导致请求无法进到后台的问题. 比如,我有一个User.其性别的属性被定义成了枚举,如下: public enum Gender { MALE(&q ...
- TCP链接的三次握手与四次断开
一直总觉得三次握手和四次断开,之前老师讲的有问题,经过自己再次琢磨,发现是的,老师讲的没毛病,这次也把自己的理解总结一下,让对这个知识模糊的小伙伴再换种思路去理解 首先看一下TCP三次握手发生了哪些: ...
- bind()函数的深入理解及两种兼容方法分析
在JavaScript中,bind()函数仅在IE9+.Firefox4+.Chrome.Safari5.1+可得到原生支持.本文将深入探讨bind()函数并对两种兼容方法进行分析比较.由于本文将反复 ...