Mybatis-注解开发
分页
Limit
HashMap<String, Integer> map = new HashMap<String, Integer>();
// 分页数据
map.put("startIndex", 1);
map.put("pageSize", 2);
// 查询分页接口
List<User> userList = mapper.getUserByLimit(map);
- 1
- 2
- 3
- 4
- 5
- 6
Mapper.xml
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
select # from xx.xxx limit #{startIndex}, #{pageSize}
</select>
- 1
- 2
- 3
实际中分页都是pageHelper
pageHelper
在 pom.xml 中添加如下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List list = countryMapper.selectIf(1);
使用pagehelper非常的简单,只需要在你想要分页的查询逻辑前添加一行代码即可,代码:
PageHelper.startPage(pageNum, pageSize);
pageNum:页数(第几页)
pageSize:每页的数据行数
使用注解进行开发
面向接口编程,解耦。
接口:
public interface UserMapper{ @Select("select * from user") List<User> getUsers();
}
- 1
- 2
- 3
- 4
配置文件:mybatis-config.xml
<!--绑定接口-->
<mappers>
<mapper class = "com.xx.dao.UserMapper"/>
</mappers>
- 1
- 2
- 3
- 4
底层核心使用反射+动态代理。
MapperProxyFactory、newInstance、mapperProxy、invoke() 动态代理
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
@param
public interface UserMapper{ // 方法存在多个参数,每一个参数必须加上@param("id") // 引用类型不加 @Select("select * from user where id=#{id}") List<User> getUserById(@param("id" int id) );
}
- 1
- 2
- 3
- 4
- 5
- 6
#{} ${} 区别:
${}代表statement,#{}代表preparestarement
${}方式无法防止SQL注入。传入数据会直接显示在生成的sql中。
Mybatis详细过程
-
Resource获取全局配置文件
-
实例化SqlSessionFactoryBuilder构造器
-
解析配置文件流XMLConfigBuilder
-
Configuration所有的配置信息,解析的所有信息
-
SqlSessionFactory实例化
-
transactional事务管理
-
创建executor执行器,
-
简单执行器SimpleExecutor:执行事务,缓存,查询栈,close
-
事务缓存TransactionalCacheManager
-
-
创建sqlSession----包括Configuration+executor+事务自动提交+dirty+cursorList
-
实现CRUD
-
成功进行提交事务,关闭
执行器去执行mapper,mapper—sqlSession+反射加载的类信息(sql,由接口(CRUD)读出)
文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_38022166/article/details/118463624
- 点赞
- 收藏
- 关注作者
评论(0)