mybatis动态sql及分页
@Test
public void testselectBooksLike1() {
List<Book> list = this.bookService.selectBooksLike1("%圣%");
list.forEach(System.out::println);
}
@Test
public void testselectBooksLike2() {
List<Book> list = this.bookService.selectBooksLike2("%圣%");
list.forEach(System.out::println);
}@Test
public void testselectBooksLike3() {
List<Book> list = this.bookService.selectBooksLike3("圣");
list.forEach(System.out::println);
}

三、查询返回结果集的处理
=============
resultMap:适合使用返回值是自定义实体类的情况,适合多表,Mapper.xml中自定义集合
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型,适合单表
bookMapper.xml
select * from t_mvc_book
select * from t_mvc_book
select * from t_mvc_book where bid in
#{bid}
select * from t_mvc_book
select * from t_mvc_book where bid = #{bid}
bookService和bookMapper一致
/**
* 使用resultMap返回自定义类型集合
* @return
*/
List list1();
/**
* 使用resultType返回List
* @return
*/
List list2();
/**
* 使用resultType返回单个对象
* @return
*/
Book list3(BookVo bookVo);
/**
* 使用resultType返回List
* @return
*/
List
/**
* 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
* @return
*/
Map list5(Map book);
List
BookVo
package com.ltf.vo;
import com.ltf.model.Book;
import java.util.List;
public class BookVo extends Book {
private List<Integer> bookIds;
public List<Integer> getBookIds() {
return bookIds;
}
public void setBookIds(List<Integer> bookIds) {
this.bookIds = bookIds;
}
}
bookServiceImpl
@Override
public List list1() {
return bookMapper.list1();
}
@Override
public List list2() {
return bookMapper.list2();
}
@Override
public Book list3(BookVo bookVo) {
return bookMapper.list3(bookVo);
}
@Override
public List
return bookMapper.list4();
}
@Override
public Map list5(Map book) {
return bookMapper.list5(book);
}
list3如果传多个参数会报以下错误,因为他返回的是list类型,但是方法定义中是Book类型

bookServiceImplTest
@Test
public void testlist1() {
List<Book> list = this.bookService.list1();
list.forEach(System.out::println);
} @Test
public void testlist2() {
List<Book> list = this.bookService.list2();
list.forEach(System.out::println);
}
@Test
public void testlist3() {
BookVo bookVo=new BookVo();
bookVo.setBookIds(Arrays.asList(new Integer\[\]{64}));
System.out.println(this.bookService.list3(bookVo));
}
@Test
public void testlist4() {
List<Map> maps = this.bookService.list4();
maps.forEach(System.out::println);
}
@Test
public void testlist5() {
Map map=new HashMap();
map.put("bid",65);
System.out.println(this.bookService.list5(map));
}
只传一个id结果


结论:多表使用resultMap时,需要在BookMapper.xml中将表的列段进行配置
<idArg column="bid" jdbcType="INTEGER" javaType="java.lang.Integer" /><arg column="bname" jdbcType="VARCHAR" javaType="java.lang.String" /><arg column="price" jdbcType="REAL" javaType="java.lang.Float" />四、分页查询
======
1.为什么要重写mybatis的分页?
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
mybatis是借用了拦截器引入第三方完成分页的
2.使用分页插件步骤
导入pom依赖
<groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version>Mybatis.cfg.xml配置拦截器
<!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>必须配置到environments标签之前,否则会报错
BookMapper.xml
select * from t_mvc_book where bname like concat(concat(‘%’,#{bname}),‘%’)
BookMapper
/**
* 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
* @return
*/
Map list5(Map book);
List
BookService
/**
* 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
* @return
*/
Map list5(Map book);
List
BookServiceImpl
@Override
public List
if(pageBean != null && pageBean.isPagination()){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());}List<Map> list = bookMapper.listPager(map);if(pageBean != null && pageBean.isPagination()){PageInfo pageInfo = new PageInfo(list);System.out.println("页码:"+pageInfo.getPageNum());System.out.println("页大小:"+pageInfo.getPageSize());System.out.println("总记录:"+pageInfo.getTotal());pageBean.setTotal(pageInfo.getTotal()+"");}return list;}
bookServiceImplTest
@Test
public void testlistPager() {
Map map=new HashMap();map.put("bname","圣");List<Map> maps = this.bookService.listPager(map,new PageBean());maps.forEach(System.out::println);}
五、特殊字符处理
========
>(>) <(<) &(&) 空格(&) <![CDATA[ <= ]]>
sql语句映射
BookMapper.xml
select * from t_mvc_book
<if test="null != min and min != ''"><!\[CDATA\[ and #{min} < price \]\]></if><if test="null != max and max != ''"><!\[CDATA\[ and #{max} > price \]\]></if>select * from t_mvc_book
<if test="null != min and min != ''">and #{min} < price</if><if test="null != max and max != ''">and #{max} > price</if>BookMapper 和 BookService 一致
/**
* 处理特殊字符
* @param bookVo
* @return
*/
List list6(BookVo bookVo);
/**
* 处理特殊字符
* @param bookVo
* @return
*/
List list7(BookVo bookVo);
BookVo增加min和max字段并实现get、set方法
BookServiceImpl
@Override
public List list6(BookVo bookVo) {
return bookMapper.list6(bookVo);}
@Override
public List list7(BookVo bookVo) {
return bookMapper.list7(bookVo);}
bookServiceImplTest
@Test
public void testlist6() {
BookVo bookVo=new BookVo();bookVo.setMin(40f);bookVo.setMax(70f);List<Book> books = this.bookService.list6(bookVo);books.forEach(System.out::println);}
@Test
public void testlist7() {
前端面试题汇总
JavaScript
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
性能
linux
前端资料汇总
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐








所有评论(0)