Mybatis-注解开发

分页

Limit

HashMap<String, Integer> map = new HashMap<String, Integer>();
// 分页数据
map.put("startIndex", 1);
map.put("pageSize", 2);
// 查询分页接口
List<User> userList = mapper.getUserByLimit(map);

Mapper.xml

<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
	select # from xx.xxx limit #{startIndex}, #{pageSize}
</select>

实际中分页都是pageHelper

pageHelper

在 pom.xml 中添加如下依赖:

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>

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();
}

配置文件:mybatis-config.xml

<!--绑定接口-->
<mappers>
	<mapper class = "com.xx.dao.UserMapper"/>
</mappers>

底层核心使用反射+动态代理。

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)  );
}

#{} ${} 区别:

${}代表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)读出)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值