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使用区别

Mapper参数多个值传递,分页查询_第1张图片
主配置文件设置连接参数
配置自带日志打印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();
	}

你可能感兴趣的:(Mybatis)