http://blog.csdn.net/future_it_daniel/article/details/51810489 MyBatis中实现动态的SQL语句,分页以及mybatis的常用的配置

http://blog.csdn.net/future_it_daniel/article/details/51810489



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

原创  2016年07月02日 11:49:11

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("[email protected]");  
  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.     }  


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("[email protected]");  
  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.     }  


猜你喜欢

转载自blog.csdn.net/ww598260073/article/details/78321694