@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
前端资料汇总