Mapper参数多个值传递,分页查询

三种方式注入值
AOP设计原理
面向切面编程,实现机制,使用AOP配置
动态代理技术 实现某一接口 CGLIB 工具完成了动态代理技术
Proxy
子类替代父类

Spring事务控制 底层封装AOP 声明组件
事务控制技术 使用
保证完整性
事务提交
readOnly rollback propagation isolation

Mybatis 学习 Githhub 封装了JDBC,简化数据访问
持久化框架 数据可以长时间保留
文件保留持久性 数据库的持久性
程序中的数据保存到数据库

环境包,基本定义 Mapper接口映射到接口中

Mapper 存在多个参数 #{0} #{1}

与数据库一一对应

1使用#{0}.#{1}

2.#{param1} #{param2}

3. 接口定义@Param(“id”) int id

 update  user set id=#{0},name=#{1}, jdbcType=Varchar
 将参数映射到SQL语句 jdbcType=Varchar  可以为空 
 Mapper接口可以有多个参数
 update  user set id={param1}”,name={param2}
  接口定义@Param(“id”) int id

SQL使用区别

在这里插入图片描述
主配置文件设置连接参数
配置自带日志打印sqlmap-config.xml

    <settings>
    	<setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

SQL注入 字符串拼接 修改其中参数

参数映射集合 $ 提前嵌入SQL值 非预编译
#{} 采用SQL预编译机制执行 PreparedStatement
${} 非编译 模式

#{} 可以预防注入式攻击 使用安全
${} 一般给SQL传入数据库对象 使用 列如表名 、字段名
需要使用中设置添加‘’

   <select id="findAll"   resultType="com.tracy.eneity.User">
        select * from user order by ${'name'}
    </select>

${_parameter}

<update id="update" parameterType="com.tracy.eneity.User" >
    	update user set name=#{param2},pwd=#{param3} where id=${param1}
    </update>

参数别名 定义

类型别名定义 简化类型定义使用 ParameterType ResultType 都可以使用简化配置
自定义别名 追加

  <typeAliases>
    	<typeAlias type="com.tracy.eneity.User" alias="user"/>
    </typeAliases>

分页处理 Mybatis提供了分页的封装,

Mybatis分页查询

数据分页查询语句
select * from
(
select t1.* ,rownum rn from
(select id ,login_name from user order by id) t1
)
wher rn>0 and rn<=6;

Mybatis 简化了分页查询

UserMapper.xml语句

<select id="findPage" resultType="user">
    	select * from user
    </select>

测试类

	@Test
	public void findPage() throws IOException {
		SqlSession session=MybatisUtil.getSession();
		//从第0个取 取2个
		RowBounds bounds=new RowBounds(0, 2);
		List<User> list=session.selectList("findPage",null, bounds);
		  for(User user:list) {
	           System.out.println(user.getName()+"|||| "+user.getHead_img()); 
	      }
		session.close();
	}

从0 开始抓抓5个
原始的分页查询,数据查询效率低,查询时会将前面数据全部取出

加强封装 分页处理

引入插件 PageHelper类

  <plugins>
    	<plugin interceptor="com.github.pagehelper.PageHelper"></plugin>
    </plugins>

mapper接口直接映射为 sql语句

执行查询之前 设置Page page=PaHelper.startPage(1,3);//只对后面第一个查询语句有效

	@Test
	public void findPage() throws IOException {
		SqlSession session=MybatisUtil.getSession();
		UserMapper userDao=session.getMapper(UserMapper.class);
		//取2页 每页2个
		Page page=PageHelper.startPage(2, 2);
		List<User> list=userDao.findPage();
		for(User user:list) {
			System.out.println(user.getName());
		}
		System.out.println("总页"+page.getTotal()+"页数"+page.getPageNum());
		session.close();
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MyBatis 中进行分页查询,可以通过使用 LIMIT 和 OFFSET 子句来实现。 例如,假设我们有一张名为 `user` 的表,其中包含了很多用户数据。如果我们要查询前 10 条数据,可以使用以下 SQL 语句: ``` SELECT * FROM user LIMIT 10; ``` 如果我们需要在查询结果的基础上再查询接下来的 10 条记录,可以使用 OFFSET 子句来指定起始位置。例如,下面的 SQL 语句将返回从第 11 条记录开始的 10 条记录: ``` SELECT * FROM user LIMIT 10 OFFSET 10; ``` 在 MyBatis 中,我们可以使用这些 SQL 语句来进行分页查询。具体实现方式如下: 1. 在 Mapper 接口中定义一个方法,该方法接收两个参数:起始位置和要查询的记录数。 ```java List<User> getUserList(@Param("offset") int offset, @Param("limit") int limit); ``` 2. 在 Mapper.xml 文件中编写 SQL 语句,使用 LIMIT 和 OFFSET 子句来实现分页查询。 ```xml <select id="getUserList" resultMap="userResultMap"> SELECT * FROM user LIMIT #{limit} OFFSET #{offset} </select> ``` 这里的 `#{limit}` 和 `#{offset}` 会被 MyBatis 替换成方法参数中的实际值。 3. 在 Java 代码中调用该方法,并传递起始位置和要查询的记录数。 ```java List<User> userList = userMapper.getUserList(10, 10); ``` 这里的 `10` 表示从第 11 条记录开始查询,查询 10 条记录。 以上就是使用 MyBatis 进行分页查询的基本步骤。值得注意的是,这种方式只适用于在 SQL 语句中直接指定起始位置和要查询的记录数的情况。如果要实现更复杂的分页查询,可以考虑使用 PageHelper 等第三方分页插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值