在网页中常常用到,在查询数据库内容并想将其输出的时候,因为有时有多组数据,一页展示过于突兀,所以会用到分页操作。
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(); }
了解
本质是使用反射,还有动态代理模式
在工具类 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是一个 java 开发插件,目的是简化代码,方便开发,通过注解省去了一些 pojo
中的 get
、 set
方法和构造方法,还有一些其他的 tostring
和 equals
等。 有些介绍可以参考官网中的文档 ,当然对于这款插件,欢呼声和骂声一直都充斥在各个平台,各种分析文章网上也有很多,我就不再去记录太多了。但任何事情都有其两面性,理性看待,喜欢觉得有用大家就用,不喜欢就当了解一些也不为过。下面是记录使用的一些图片代码。
我选择了最新的版本,有错再去解决
<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>
在插件管理查看信息里面就可以看到 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站狂神的视频记录的学习笔记