Mybatis-注解开发

举报
AAAI 发表于 2021/07/04 22:55:56 2021/07/04
【摘要】 分页 Limit HashMap<String, Integer> map = new HashMap<String, Integer>(); // 分页数据 map.put("startIndex", 1); map.put("pageSize", 2); // 查询分页接口 List<User> userList = mapp...

分页

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。