List selectBooksLike1(@Param("bname")String bname);
List selectBooksLike2(@Param("bname")String bname);
List selectBooksLike3(@Param("bname")String bname);
加入方法到BookService.java接口类中:
List selectBookLike1(String bname);
List selectBookLike2(String bname);
List selectBookLike3(String bname);
在BookServiceImpl.java实现类中实现此方法:
@Override
public List selectBookLike1(String bname) {
return bookMapper.selectBooksLike1(bname);
}
@Override
public List selectBookLike2(String bname) {
return bookMapper.selectBooksLike2(bname);
}
@Override
public List selectBookLike3(String bname) {
return bookMapper.selectBooksLike3(bname);
}
在BookServiceImplTest.java测试类中测试此方法:
public void testSelectBookLike1() {
System.out.println("模糊查询1--");
List books = this.bookService.selectBookLike1("%圣墟%");
books.forEach(System.out::println);
}
public void testSelectBookLike2() {
System.out.println("模糊查询2--");
List books = this.bookService.selectBookLike2("%圣墟%");
books.forEach(System.out::println);
}
public void testSelectBookLike3() {
System.out.println("模糊查询3--");
List books = this.bookService.selectBookLike3("圣墟");
books.forEach(System.out::println);
}
测试结果:
三,查询返回结果集的处理
语法:
resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型
3.1 使用resultMap返回自定义类型集合
3.2 使用resultType返回List
3.3 使用resultType返回单个对象
3.4 使用resultType返回List
3.5 使用resultType返回Map,适用于多表查询返回单个结果集
首先建一个BooKVo实体类用于多表查询返回一个集合:
package com.lgs.vo;
import com.lgs.model.Book;
import java.util.List;
public class BooKVo extends Book {
private List bookIds;
public List getBookIds() {
return bookIds;
}
public void setBookIds(List bookIds) {
this.bookIds = bookIds;
}
}
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}
BookMapper.java中的方法:
List list1();
List list2();
List list3(BooKVo bookVo);
List
加入方法到BookService.java接口类中:
List list1();
List list2();
Book list3(BooKVo bookVo);
List
在BookServiceImpl.java实现类中实现此方法:
@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
在BookServiceImplTest.java测试类中测试此方法:
public void testList1() {
System.out.println("五种返回类型--");
List books = this.bookService.list1();
books.forEach(System.out::println);
}
public void testList2() {
System.out.println("五种返回类型--");
List books = this.bookService.list2();
books.forEach(System.out::println);
}
public void testList3() {
System.out.println("五种返回类型--");
BooKVo booKVo = new BooKVo();
booKVo.setBookIds(Arrays.asList(new Integer[]{40}));
System.out.println(this.bookService.list3(booKVo));
}
public void testList4() {
System.out.println("五种返回类型--");
List
select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
注意放置的先后顺序
其中要用到来个分页的工具类
PageBean
package com.lgs.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
public class PageBean {
private int page = 1;// 当前页码
private int rows = 5;// 页大小
private int total = 0;//总记录数
//上一次查询的url
private String url;
//上一次查询所携带的查询条件
private Map parameterMap=new HashMap();
//对pagebean进行初始化
public void setRequest(HttpServletRequest req) {
//初始化jsp页面传递过来的当前页
this.setPage(req.getParameter("page"));
//初始化jsp页面传递过来的页大小
this.setRows(req.getParameter("rows"));
//初始化jsp页面 传递过来是否分页
this.setPagination(req.getParameter("pagination"));
//保留上一次的查询请求
this.setUrl(req.getRequestURL().toString());
//保留上一次的查询条件
this.setParameterMap(req.getParameterMap());
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Map getParameterMap() {
return parameterMap;
}
public void setParameterMap(Map parameterMap) {
this.parameterMap = parameterMap;
}
private void setPage(String page) {
if(StringUtils.isNotBlank(page)) {
this.setPage(Integer.valueOf(page));
}
}
private void setRows(String rows) {
if(StringUtils.isNotBlank(rows)) {
this.setRows(Integer.valueOf(rows));
}
}
private void setPagination(String pagination) {
//只有填了false字符串,才代表不分页
this.setPagination(!"false".equals(pagination));;
}
private boolean pagination = true;// 是否分页
public PageBean() {
super();
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public void setTotal(String total) {
this.total = Integer.parseInt(total);
}
public boolean isPagination() {
return pagination;
}
public void setPagination(boolean pagination) {
this.pagination = pagination;
}
public int getStartIndex() {
return (this.page - 1) * this.rows;
}
@Override
public String toString() {
return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
}
//上一页
public int getPrevPage() {
return this.page>1?this.page-1:this.page;
}
//下一页
public int getNextPage() {
return this.page
StringUtils工具类:附属pagebean工具类
package com.lgs.util;
public class StringUtils {
// 私有的构造方法,保护此类不能在外部实例化
private StringUtils() {
}
public static boolean isBlank(String s) {
boolean b = false;
if (null == s || s.trim().equals("")) {
b = true;
}
return b;
}
public static boolean isNotBlank(String s) {
return !isBlank(s);
}
}
接下来开始测试
BookMapper.xml中的配置标签:
select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
BookMapper.java中的方法:
List
加入方法到BookService.java接口类中:
List
在BookServiceImpl.java实现类中实现此方法:
@Override
public List
在BookServiceImplTest.java测试类中测试此方法:
public void testPager() {
System.out.println("分页--");
Map map = new HashMap();
map.put("bname","圣墟");
PageBean pageBean = new PageBean();
pageBean.setPage(4);
// 不分页
// pageBean.setPagination(false);
List m = this.bookService.listPager(map,pageBean);
System.out.println(m);
}
测试结果:
五,特殊字符的处理
语法:
<(<) >(>)
如:
BookVo.java实体类添加两个属性: min与max
package com.lgs.vo;
import com.lgs.model.Book;
import java.util.List;
public class BooKVo extends Book {
private List bookIds;
private float min;
private float max;
public float getMin() {
return min;
}
public void setMin(float min) {
this.min = min;
}
public float getMax() {
return max;
}
public void setMax(float max) {
this.max = max;
}
public List getBookIds() {
return bookIds;
}
public void setBookIds(List bookIds) {
this.bookIds = bookIds;
}
}
BookMapper.xml中的配置标签:
select * from t_mvc_book
price ]]>
select * from t_mvc_book
and #{min} < price
and #{max} > price
BookMapper.java中的方法:
List list6(BookVo bookVo);
List list7(BookVo bookVo);
加入方法到BookService.java接口类中:
List list6(BooKVo bookVo);
List list7(BooKVo bookVo);
在BookServiceImpl.java实现类中实现此方法:
@Override
public List list6(BooKVo bookVo) {
return bookMapper.list6(bookVo);
}
@Override
public List list7(BooKVo bookVo) {
return bookMapper.list7(bookVo);
}
在BookServiceImplTest.java测试类中测试此方法:
public void testlist6(){
System.out.println("特殊字符的处理--");
BooKVo booKVo = new BooKVo();
booKVo.setMin(20f);
booKVo.setMax(50f);
List books = this.bookService.list6(booKVo);
books.forEach(System.out::println);
}
public void testlist7(){
System.out.println("特殊字符的处理--");
BooKVo booKVo = new BooKVo();
booKVo.setMin(20f);
booKVo.setMax(50f);
List books = this.bookService.list7(booKVo);
books.forEach(System.out::println);
}