bookService和bookMapper一致
BookVo
bookServiceImpl
bookServiceImplTest
四、分页查询
1.为什么要重写mybatis的分页?
2.使用分页插件步骤
导入pom依赖
Mybatis.cfg.xml配置拦截器
BookMapper.xml
BookMapper
BookService
BookServiceImpl
bookServiceImplTest
五、特殊字符处理
BookMapper.xml
BookMapper 和 BookService 一致
BookServiceImpl
bookServiceImplTest
一、mybatis动态SQL
==============
1.if
使用if的动态SQL语句,解决了修改需要传递所有列段的问题
BookMapper.xml
insert into t_mvc_book (bid, bname, price
)
values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL}
)
insert into t_mvc_book
bid,
bname,
price,
#{bid,jdbcType=INTEGER},
#{bname,jdbcType=VARCHAR},
#{price,jdbcType=REAL},
update t_mvc_book
bname = #{bname,jdbcType=VARCHAR},
price = #{price,jdbcType=REAL},
where bid = #{bid,jdbcType=INTEGER}
update t_mvc_book
set bname = #{bname,jdbcType=VARCHAR},
price = #{price,jdbcType=REAL}
where bid = #{bid,jdbcType=INTEGER}
当接收参数时,进行if判断,判断每个列是否为空,如果为空就不增加该列段,否则就增加,
当我们进行修改时,如果只需要修改一个字段,就不要把其他字段传进来了,之前的方式是必须把其他字段传进来,否则修改之后没有传进来的参数就变为空了
2.foreach
解决后台循环拼接字符串的问题
BookMapper.xml
select * from t_mvc_book where bid in
#{bid}
**collection:集合的变量(相当于遍历里面的items)
open 自动补充的前缀
close 自动补充的后缀
separator 分隔符
item 集合变量当前元素的引用(相当于遍历里面的var)**
bookService
List selectBooksIn(List bookIds);
bookMapper
List selectBooksIn(@Param(“bookIds”) List bookIds);
bookServiceImpl
@Override
public List selectBooksIn(List bookIds) {
return bookMapper.selectBooksIn(bookIds);
}
bookServiceImplTest
@Test
public void testselectBooksIn() {
System.out.println("foreach标签");
List<Book> list = this.bookService.selectBooksIn(Arrays.asList(new Integer\[\]{67, 68, 69}));
list.forEach(System.out::println);
}
结果
二、模糊查询
========
BookMapper.xml
select * from t_mvc_book where bname like #{bname}
select * from t_mvc_book where bname like ‘${bname}’
select * from t_mvc_book where bname like concat(concat(‘%’,#{bname}),‘%’)
#{…}:自带引号,模糊查询时%要在后台自己拼接,通用的增删改查
${…}:有SQL注入的风险,模糊查询时%要在后台自己拼接,除了模糊查询不用其他都会用
concat:通过concat函数自动拼接%,不考虑通用的增删改查会用他
bookService和bookMapper一样
List selectBooksLike1(@Param(“bname”) String bname);
List selectBooksLike2(@Param(“bname”) String bname);
List selectBooksLike3(@Param(“bname”) String bname);
bookServiceImpl
@Override
public List selectBooksLike1(String bname) {
return bookMapper.selectBooksLike1(bname);
}
@Override
public List selectBooksLike2(String bname) {
return bookMapper.selectBooksLike2(bname);
}
@Override
public List selectBooksLike3(String bname) {
return bookMapper.selectBooksLike3(bname);
}
bookServiceImplTest
@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
学习分享,共勉
题外话,毕竟我工作多年,深知技术改革和创新的方向,Flutter作为跨平台开发技术、Flutter以其美观、快速、高效、开放等优势迅速俘获人心
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
O,size_20,color_FFFFFF,t_70,g_se,x_16)
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
学习分享,共勉
题外话,毕竟我工作多年,深知技术改革和创新的方向,Flutter作为跨平台开发技术、Flutter以其美观、快速、高效、开放等优势迅速俘获人心