myBatis之动态sql以及分页

目标

1.mybatis动态sql

2.模糊查询

3.查询返回结果集的处理

4.分页查询

5.特殊字符处理

一、mybatis动态sql

 常用:If、foreach

if标签解释:

foreach:

1、BookMapper.xml增加foreach标签

<select id="selectBooksIn" resultType="com.mwy.model.Book" parameterType="java.util.List">
  select * from t_mvc_book where bid in
  <foreach collection="bookIds" open="(" close=")" separator="," item="bid">
    #{bid}
  </foreach>
</select>

 

2、dao层调用

 BookMapper.java

有且只有一个变量,指名

List<Book> selectBooksIn(@Param("bookIds") List bookIds);

3、做测试
①、BookService.java

List<Book> selectBooksIn(List bookIds); 

②、实现接口方法(BookServiceImpl.java)

public List<Book> selectBooksIn(List bookIds) {
    return bookMapper.selectBooksIn(bookIds);
}

③、测试类测试(BookServiceImplTest.java)

 

 二、模糊查询

(是一道面试题)

#{...}  、   ${...}  、   Concat 三个都可以实现模糊查询

注意:#{...}自带引号,${...}不带引号,有sql注入的风险

在不考虑做通用的业务功能增删改查的时候选用Concat;

做通用的业务功能增删改查的时候选用${...};

除了做模糊查询不用#{...},其他都用#{...};

#与$符号的区别:

1、BookMapper.xml增加三种写法

#{...}:%号需要在后台拼接;

<select id="selectBooksLike1" resultType="com.lsy.model.Book" parameterType="java.lang.String">
  select * from t_mvc_book where bname like #{bname}
</select>
<select id="selectBooksLike2" resultType="com.lsy.model.Book" parameterType="java.lang.String">
  select * from t_mvc_book where bname like '${bname}'
</select>
<select id="selectBooksLike3" resultType="com.lsy.model.Book" parameterType="java.lang.String">
  select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
</select>

2、dao层调用

 BookMapper.java

List<Book> selectBooksLike1(@Param("bname") String bname);
List<Book> selectBooksLike2(@Param("bname") String bname);
List<Book> selectBooksLike3(@Param("bname") String bname);

3、做测试

①、BookService.java

@Override
    public List<Book> selectBooksLike1(String bname) {
        return bookMapper.selectBooksLike1(bname);
    }
 
    @Override
    public List<Book> selectBooksLike2(String bname) {
        return bookMapper.selectBooksLike2(bname);
    }
 
    @Override
    public List<Book> selectBooksLike3(String bname) {
        return bookMapper.selectBooksLike3(bname);
    }

③、测试类测试(BookServiceImplTest.java)

@Test
public void testSelectBooksLike1() {
    System.out.println("mybatis中模糊查询#与$的区别.....");
    List<Book> books=this.bookService.selectBooksLike1("%圣墟%");
    books.forEach(System.out::println);
}

@Test
public void testSelectBooksLike2() {
    System.out.println("mybatis中模糊查询#与$的区别.....");
    List<Book> books=this.bookService.selectBooksLike2("%圣墟%");
    books.forEach(System.out::println);
}

@Test
public void testSelectBooksLike3() {
    System.out.println("mybatis中模糊查询#与$的区别.....");
    List<Book> books=this.bookService.selectBooksLike3("圣墟");
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用SpringBoot和MyBatis实现动态SQL和分页的详细流程如下: 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency> ``` 2. 配置数据源 在application.properties文件中配置数据源信息,例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 3. Mapper文件 在Mapper文件中编写动态SQL的语句,例如: ```xml <select id="queryByCondition" parameterType="map" resultMap="BaseResultMap"> select * from user <where> <if test="name != null and name != ''"> and name like concat('%', #{name}, '%') </if> <if test="age != null"> and age = #{age} </if> </where> </select> ``` 4. 接口 在接口中定义方法,例如: ```java List<User> queryByCondition(Map<String, Object> paramMap); ``` 5. Service层 在Service层中调用Mapper层的方法,例如: ```java public List<User> queryByCondition(String name, Integer age, Integer pageNum, Integer pageSize) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("name", name); paramMap.put("age", age); PageHelper.startPage(pageNum, pageSize); return userDao.queryByCondition(paramMap); } ``` 6. Controller层 在Controller层中调用Service层的方法,例如: ```java @GetMapping("/queryByCondition") public Result queryByCondition(String name, Integer age, Integer pageNum, Integer pageSize) { List<User> userList = userService.queryByCondition(name, age, pageNum, pageSize); PageInfo<User> pageInfo = new PageInfo<>(userList); return Result.success(pageInfo); } ``` 至此,SpringBoot和MyBatis实现动态SQL和分页的流程已经介绍完毕。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值