mybatis动态sql及分页

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 list4();

/**

* 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集

* @return

*/

Map list5(Map book);

List listPager(Map map);

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 list4() {

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以其美观、快速、高效、开放等优势迅速俘获人心

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值