MyBatis中实现动态的SQL语句、分页以及mybatis的常用的配置

1.动态SQL:在SQL语句中加入流程控制。比如加入ifforeach等。
 重点掌握if语句:

 案例1

[java]  view plain  copy
  1. <update id="updateItem" parameterType="com.gxa.bj.modle.UserInfo">  
  2.        update UserInfo set   
  3.        <if test="userName!=null">  
  4.            userName=#{userName},  
  5.        </if>  
  6.        <if test="userPwd!=null">  
  7.            userPwd=#{userPwd},  
  8.        </if>  
  9.        <if test="userEmail!=null">  
  10.            userEmail=#{userEmail},  
  11.        </if>  
  12.        userId=#{userId} where userId=#{userId}         
  13.  </update>  

实现列:

[java]  view plain  copy
  1. UserInfo u=new UserInfo();  
  2.    u.setUserId(7);  
  3.    u.setUserName("李大名");  
  4.    u.setUserPwd("123");  
  5.    u.setUserEmail("www.@66.oo");  
  6.    userMapper.updateItem(u);  
  7.    sqlSessin.commit();     
  8.    System.out.println("修改成功");  

案列2:

[java]  view plain  copy
  1. <select id="getList" resultType="com.gxa.bj.modle.UserInfo" parameterType="com.gxa.bj.modle.UserInfo">  
  2.         select * from UserInfo where 1=1  
  3.         <if test="userName!=null">  
  4.             and userName like #{userName}  
  5.         </if>  
  6.         <if test="userId>0">  
  7.             and userId=#{userId}  
  8.         </if>  
  9.         <if test="userPwd!=null and userPwd!=''">  
  10.             and userPwd like #{userName}  
  11.         </if>  
  12.  </select>  

实现列:


[java]  view plain  copy
  1. u.setUserName("小白");  
  2.    List<UserInfo> list= userMapper.getList(u);  
  3.    for(UserInfo u1:list){  
  4.     System.out.println("用户信息:"+u1.getUserPwd());  
  5.    }  

2.分页的实现?

分页的时候考虑的问题:

分页的大小,分页的索引。

比如:分页的大小为10,分页的起始索引为1(索引从1开始)

第一页:110.    起始行号: (页的索引-1*分页大小+1

                   结束行号: 页的索引*分页大小

 

实现方案:

1)比如针对UserInfo的实体对象做分页处理,那么先创建一个分页的实体类,该类继承自UserInfo package com.gxa.bj.modle

[java]  view plain  copy
  1. package com.gxa.bj.modle;  
  2. public class UserInfoPage extends UserInfo{   
  3. private int pageIndex;//分页的索引  
  4.   
  5.      private int pageSize;//分页的大小  
  6.   
  7. private int startNum;//分页起始行  
  8.      private int endNum;//分页结束行  
  9.   
  10. public int getPageIndex() {  
  11. return pageIndex;  
  12. }  
  13. public void setPageIndex(int pageIndex) {  
  14. this.pageIndex = pageIndex;  
  15. }  
  16. public int getPageSize() {  
  17. return pageSize;  
  18. }  
  19. public void setPageSize(int pageSize) {  
  20. this.pageSize = pageSize;  
  21. }  
  22. public int getStartNum() {  
  23. return startNum;  
  24. }  
  25. public void setStartNum(int startNum) {  
  26. this.startNum = startNum;  
  27. }  
  28. public int getEndNum() {  
  29. return endNum;  
  30. }  
  31. public void setEndNum(int endNum) {  
  32. this.endNum = endNum;  
  33. }   
  34. }  

2)在接口只陪你过定义一个方法:

[java]  view plain  copy
  1. public List<UserInfo> getListByPage(UserInfoPage upage);  

3)在Mapper文件中编写SQL语句:

[java]  view plain  copy
  1. <select id="getListByPage" resultType="com.gxa.bj.modle.UserInfoPage" parameterType="com.gxa.bj.modle.UserInfoPage">  
  2.         select u.*  
  3.         From(select rownum as num, userinfo.*  
  4.               from userinfo  
  5.               <where>  
  6.                       <if test="userName!=null">  
  7.                           and userName like #{userName}  
  8.                       </if>  
  9.                       <if test="userId>0">  
  10.                           and userId=#{userId}  
  11.                       </if>  
  12.                       <if test="userPwd!=null and userPwd!=''">  
  13.                           and userPwd like #{userName}  
  14.                       </if>  
  15.               </where>  
  16.               ) u where u.num between #{startNum}and#{endNum}  
  17.  </select>  


4)测试代码:

 
[java]  view plain  copy
  1. UserInfoPage u1= new UserInfoPage();  
  2.    u1.setUserName("userName");  
  3.    u1.setPageIndex(2);//查询第几页  
  4.       u1.setPageSize(2);//分布每页的条数  
  5.       int startNum=(u1.getPageIndex()-1)*u1.getPageSize()+1;  
  6.       int endNum=u1.getPageIndex()*u1.getPageSize();  
  7.       u1.setStartNum(startNum);  
  8.       u1.setEndNum(endNum);  
  9.       List<UserInfo> list=userMapper.getListByPage(u1);  
  10.       for(UserInfo t :list){  
  11.     System.out.println("id:"+t.getUserId());  
  12.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值