目录

1、mybatis动态sql
2、模糊查询
3、查询返回结果集的处理
4、分页查询
5、特殊字符处理

PageBean


package com.liuxia.util;import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;public class PageBean implements Serializable {private static final long serialVersionUID = 2422581023658455731L;//页码private int page=1;//每页显示记录数private int rows=10;//总记录数private int total=0;//是否分页private boolean isPagination=true;//上一次的请求路径private String url;//获取所有的请求参数private Map<String,String[]> map;public PageBean() {super();}//设置请求参数public void setRequest(HttpServletRequest req) {String page=req.getParameter("page");String rows=req.getParameter("rows");String pagination=req.getParameter("pagination");this.setPage(page);this.setRows(rows);this.setPagination(pagination);this.url=req.getContextPath()+req.getServletPath();this.map=req.getParameterMap();}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Map<String, String[]> getMap() {return map;}public void setMap(Map<String, String[]> map) {this.map = map;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public void setPage(String page) {if(null!=page&&!"".equals(page.trim()))this.page = Integer.parseInt(page);}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}public void setRows(String rows) {if(null!=rows&&!"".equals(rows.trim()))this.rows = Integer.parseInt(rows);}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public void setTotal(String total) {this.total = Integer.parseInt(total);}public boolean isPagination() {return isPagination;}public void setPagination(boolean isPagination) {this.isPagination = isPagination;}public void setPagination(String isPagination) {if(null!=isPagination&&!"".equals(isPagination.trim()))this.isPagination = Boolean.parseBoolean(isPagination);}/*** 获取分页起始标记位置* @return*/public int getStartIndex() {//(当前页码-1)*显示记录数return (this.getPage()-1)*this.rows;}/*** 末页* @return*/public int getMaxPage() {int totalpage=this.total/this.rows;if(this.total%this.rows!=0)totalpage++;return totalpage;}/*** 下一页* @return*/public int getNextPage() {int nextPage=this.page+1;if(this.page>=this.getMaxPage())nextPage=this.getMaxPage();return nextPage;}/*** 上一页* @return*/public int getPreivousPage() {int previousPage=this.page-1;if(previousPage<1)previousPage=1;return previousPage;}@Overridepublic String toString() {return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination+ "]";}
}

StringUtils

package com.liuxia.util;/*** @author liuxia* @site www.liuxia.com* @company* @create 2019-10-16 17:06*/
public class StringUtils {public  static  String toLikeStr(String str){return "%"+str+"%";}
}

BookVo

vo类,就是value Object,用来处理查询条件所需要用到的而又不是数据库字段的属性


package com.liuxia.util.model.vo;import com.liuxia.util.model.Book;import java.util.List;/*** @author liuxia* @site www.liuxia.com* @company* @create 2019-10-16 17:19** vo介绍* mybatis ,hibernate 都是orm框架,表所存在的列段在实体类model都有映射* 实际开发中,会因为某一些需求该变model,破坏model封装性* 此时为了保证Model的封装性,就可以使用vo类来完成指定的需求*/
public class BookVo extends Book {private  float min;private  float max;private List<Integer> bookIds;public float getMin() {return min;}public void setMin(float min) {this.min = min;}public float getMax() {return max;}public void setMax(float max) {this.max = max;}public List<Integer> getBookIds() {return bookIds;}public void setBookIds(List<Integer> bookIds) {this.bookIds = bookIds;}
}

BookMapper

模糊查定义参数需要声明名(@Param),在xml中需要声明参数类型

package com.liuxia.util.mapper;import com.liuxia.util.model.vo.BookVo;
import com.liuxia.util.model.Book;
import org.apache.ibatis.annotations.Param;import java.util.List;
import java.util.Map;public interface BookMapper {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);/*** Param* 如果形参要在 mapper.xml使用就需要加上面的注释** @param bookIds* @return*/List<Book> selectBooksIn(@Param("bookIds") List bookIds);/*** 模糊查*mybatis对模糊查共有三种方式* @param bname* @return*/List<Book> selectBooksIn1(@Param("bname") String bname);List<Book> selectBooksIn2(@Param("bname") String bname);List<Book> selectBooksIn3(@Param("bname") String bname);/*** mybayis结果集处理的五种情况* @return*/List<Book> list1();List<Book> list2();List<Book> list3(BookVo bookVo);List<Map> list4(Map map);Map list5(Map map);/*分页查询*/List<Map> listPager(Map map);/*** mybatis特殊字符的处理* @param bookVo* @return*/List<Book> list6(BookVo bookVo);}

BookMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.liuxia.util.mapper.BookMapper" ><resultMap id="BaseResultMap" type="com.liuxia.util.model.Book" ><constructor ><idArg column="bid" jdbcType="INTEGER" javaType="java.lang.Integer" /><arg column="bname" jdbcType="VARCHAR" javaType="java.lang.String" /><arg column="price" jdbcType="REAL" javaType="java.lang.Float" /></constructor></resultMap><sql id="Base_Column_List" >bid, bname, price</sql><select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >select <include refid="Base_Column_List" />from t_mvc_bookwhere bid = #{bid,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >delete from t_mvc_bookwhere bid = #{bid,jdbcType=INTEGER}</delete><insert id="insert" parameterType="com.liuxia.util.model.Book" >insert into t_mvc_book (bid, bname, price)values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL})</insert><insert id="insertSelective" parameterType="com.liuxia.util.model.Book" >insert into t_mvc_book<trim prefix="(" suffix=")" suffixOverrides="," ><if test="bid != null" >bid,</if><if test="bname != null" >bname,</if><if test="price != null" >price,</if></trim><trim prefix="values (" suffix=")" suffixOverrides="," ><if test="bid != null" >#{bid,jdbcType=INTEGER},</if><if test="bname != null" >#{bname,jdbcType=VARCHAR},</if><if test="price != null" >#{price,jdbcType=REAL},</if></trim></insert><update id="updateByPrimaryKeySelective" parameterType="com.liuxia.util.model.Book" >update t_mvc_book<set ><if test="bname != null" >bname = #{bname,jdbcType=VARCHAR},</if><if test="price != null" >price = #{price,jdbcType=REAL},</if></set>where bid = #{bid,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="com.liuxia.util.model.Book" >update t_mvc_bookset bname = #{bname,jdbcType=VARCHAR},price = #{price,jdbcType=REAL}where bid = #{bid,jdbcType=INTEGER}</update><!--foreach标签的使用--><select id="selectBooksIn" resultType="com.liuxia.util.model.Book" parameterType="java.util.List">select * from t_mvc_book where bid in<foreach collection="bookIds" item="bid" open="(" close=")" separator=",">#{bid}</foreach></select><!--模糊查的第一种方法--><select id="selectBooksIn1" resultType="com.liuxia.util.model.Book" parameterType="java.lang.String">select * from t_mvc_book where bname like #{bname}</select><!--模糊查第二种方法--><select id="selectBooksIn2" resultType="com.liuxia.util.model.Book" parameterType="java.lang.String">select * from t_mvc_book where bname like '${bname}'</select><!--模糊查第三种方法--><select id="selectBooksIn3" resultType="com.liuxia.util.model.Book" parameterType="java.lang.String">select * from t_mvc_book where bname like connect(connect('%',#{bname}),'%')</select><!--查询返回结果集处理的五种情况--><select id="list1" resultMap="BaseResultMap">select * from t_mvc_book</select><select id="list2" resultType="com.liuxia.util.model.Book">select * from t_mvc_book</select><select id="list3" resultType="com.liuxia.util.model.Book" parameterType="com.liuxia.util.model.vo.BookVo">select * from t_mvc_book where bid in<foreach collection="bookIds" item="bid" open="(" close=")" separator=",">#{bid}</foreach></select><select id="list4" resultType="java.util.Map" parameterType="java.util.Map">select * from t_mvc_book where bid in<foreach collection="bookIds" item="bid" open="(" close=")" separator=",">#{bid}</foreach></select><select id="list5" resultType="java.util.Map" parameterType="java.util.Map">select * from t_mvc_book where bid = #{bid}</select><!--分页查询--><select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">select * from t_mvc_book where bname like #{bname}</select><!-- //特殊字符处理--><select id="list6" resultType="com.liuxia.util.model.Book" parameterType="com.liuxia.util.model.vo.BookVo">select * from t_mvc_book where price &gt; #{min} and price &lt; #{max}</select></mapper>

动态sql、结果集处理和特殊字符处理上面注释写的都很清楚了,后面主要提一下分页的插件
导入分页插件pom

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>

将pagehelper插件配置到mybatis中,注意要配在运行环境之前

<!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>

BookService


package com.liuxia.util.srevive;import com.liuxia.util.model.Book;
import com.liuxia.util.model.vo.BookVo;
import com.liuxia.util.PageBean;
import org.apache.ibatis.annotations.Param;import java.util.List;
import java.util.Map;/*** @author liuxia* @site www.liuxia.com* @company* @create 2019-10-14 13:52*/
public interface BookServier {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);List<Book> selectBooksIn(List bookIds);/*** 模糊查*mybatis对模糊查共有三种方式* @param bname* @return*/List<Book> selectBooksIn1(@Param("bname") String bname);List<Book> selectBooksIn2(@Param("bname") String bname);List<Book> selectBooksIn3(@Param("bname") String bname);/*** mybayis结果集处理的五种情况* @return*/List<Book> list1();List<Book> list2();List<Book> list3(BookVo bookVo);List<Map> list4(Map map);Map list5(Map map);/*分页查询*/List<Map> listPager(Map map, PageBean pageBean);//特殊字符处理List<Book> list6(BookVo bookVo);}

BookServiceImpl

package com.liuxia.util.srevive.impl;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liuxia.util.mapper.BookMapper;
import com.liuxia.util.model.Book;
import com.liuxia.util.model.vo.BookVo;
import com.liuxia.util.srevive.BookServier;
import com.liuxia.util.PageBean;import java.util.List;
import java.util.Map;/*** @author liuxia* @site www.liuxia.com* @company* @create 2019-10-14 13:54*/
public class BookServierImpl implements BookServier {private BookMapper bookMapper;public BookMapper getBookMapper() {return bookMapper;}public void setBookMapper(BookMapper bookMapper) {this.bookMapper = bookMapper;}@Overridepublic int deleteByPrimaryKey(Integer bid) {return bookMapper.deleteByPrimaryKey(bid);}@Overridepublic int insert(Book record) {return 0;}@Overridepublic int insertSelective(Book record) {return bookMapper.insert(record);}@Overridepublic Book selectByPrimaryKey(Integer bid) {return bookMapper.selectByPrimaryKey(bid);}@Overridepublic int updateByPrimaryKeySelective(Book record) {return bookMapper.updateByPrimaryKeySelective(record);}@Overridepublic int updateByPrimaryKey(Book record) {return bookMapper.updateByPrimaryKey(record);}@Overridepublic List<Book> selectBooksIn(List bookIds) {return bookMapper.selectBooksIn(bookIds);}/*模糊查*/@Overridepublic List<Book> selectBooksIn1(String bname) {return bookMapper.selectBooksIn1(bname);}@Overridepublic List<Book> selectBooksIn2(String bname) {return bookMapper.selectBooksIn2(bname);}@Overridepublic List<Book> selectBooksIn3(String bname) {return bookMapper.selectBooksIn3(bname);}/* mybayis结果集处理的五种情况*/@Overridepublic List<Book> list1() {return bookMapper.list1();}@Overridepublic List<Book> list2() {return bookMapper.list2();}@Overridepublic List<Book> list3(BookVo bookVo) {return bookMapper.list3(bookVo);}@Overridepublic List<Map> list4(Map map) {return bookMapper.list4(map);}@Overridepublic Map list5(Map map) {return bookMapper.list5(map);}/*分页查询*/@Overridepublic List<Map> listPager(Map map, PageBean pageBean) {if (pageBean !=null && pageBean.isPagination()){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());}List<Map> list= bookMapper.listPager(map);if (pageBean !=null && pageBean.isPagination()){PageInfo pageInfo=new PageInfo(list);System.out.println("总记录数:" + pageInfo.getTotal());System.out.println("当前页:" + pageInfo.getPageNum());System.out.println("页大小:" + pageInfo.getPageSize());pageBean.setTotal(pageInfo.getTotal()+"");System.out.println("总页数:" + pageBean.getMaxPage());}return list;}@Overridepublic List<Book> list6(BookVo bookVo) {return bookMapper.list6(bookVo);}
}

JUnit测试代码

BookServierTest


package com.liuxia.service;import com.liuxia.util.mapper.BookMapper;
import com.liuxia.util.model.Book;
import com.liuxia.util.model.vo.BookVo;
import com.liuxia.util.srevive.BookServier;
import com.liuxia.util.srevive.impl.BookServierImpl;
import com.liuxia.util.PageBean;
import com.liuxia.util.SessionUtil;
import com.liuxia.util.StringUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author liuxia* @site www.liuxia.com* @company* @create 2019-10-14 14:19*/
public class BookServierTest {private BookServier bookServier;private SqlSession sqlSession;@Beforepublic void setUp() {BookServierImpl bookServier = new BookServierImpl();sqlSession = SessionUtil.openSession();BookMapper mapper = sqlSession.getMapper(BookMapper.class);bookServier.setBookMapper(mapper);this.bookServier = bookServier;}@Testpublic void insert() {Book book = new Book();book.setBid(10);book.setBname("mybatis插入");book.setPrice(22f);bookServier.insert(book);}@Testpublic void selectByPrimaryKey() {//查询/*  Book book = this.bookServier.selectByPrimaryKey(27);*///删除this.bookServier.deleteByPrimaryKey(27);// System.out.println(book);}@Afterpublic void tearDown() throws Exception {sqlSession.commit();sqlSession.close();}/*foreach标签的使用测试*/@Testpublic void selectBooksIn() {List list = new ArrayList();list.add(13);list.add(16);list.add(20);List<Book> books = this.bookServier.selectBooksIn(list);for (Book b : books) {System.out.println(b);}}/*** 模糊的方法测试* # 与$ 的区别* $ 会引起sql的攻击*/@Testpublic void selectBookse() {String bname="圣墟";//  List<Book> books = this.bookServier.selectBooksIn1(StringUtils.toLikeStr(bname));List<Book> books = this.bookServier.selectBooksIn2(StringUtils.toLikeStr(bname));// List<Book> books = this.bookServier.selectBooksIn3(bname);for (Book book : books) {System.out.println(book);}}/*** 查询返回结果集的处理*/@Testpublic void list() {/* List<Book> books = this.bookServier.list1();*/// List<Book> books = this.bookServier.list2();List list = new ArrayList();list.add(13);list.add(16);list.add(20);
//        BookVo bookVo=new BookVo();
//        bookVo.setBookIds(list);
//        List<Book> books = this.bookServier.list3(bookVo);
//
//        for (Book b: books) {
//            System.out.println(b);
//        }
//        Map map=new HashMap();
//        map.put("bookIds",list);
//        List<Map> mapList= this.bookServier.list4(map);
//        for (Map m: mapList) {
//            System.out.println(m);
//        }Map map=new HashMap();map.put("bid",13);System.out.println(this.bookServier.list5(map));}@Testpublic void listPager(){Map map=new HashMap();map.put("bname","%圣墟%");PageBean pageBean=new PageBean();//  pageBean.setPagination(false);//不想分页pageBean.setPage(2);List<Map> list = this.bookServier.listPager(map,pageBean);for (Map map1: list) {System.out.println(map1);}}@Testpublic void list6(){BookVo bookVo=new BookVo();bookVo.setMax(25f);bookVo.setMin(15f);List<Book> books = this.bookServier.list6(bookVo);for (Book book : books) {System.out.println(book);}}
}

mybatis(动态sql、结果集处理、分页、特殊字符处理)相关推荐

  1. Mybatis动态sql和分页

    mybatis动态sql 1.1 if1.2 trim1.3 foreach1.4 其他choose/set/where 动态sql代码展示 <select id="list1&quo ...

  2. mybatis动态sql及分页

    1. 动态sql简述 mybatis的动态sql语句是基于OGNL表达式的.可以方便的在sql语句中实现某些逻辑. 总体说来mybatis动态SQL语句主要有以下几类: if 语句 (简单的条件判断) ...

  3. MyBatis动态SQL语法详解(二)

    文章目录 一.MyBatis查询返回 1.1.MyBatis查询返回对象 1.2.MyBatis查询返回list集合 1.3.MyBatis查询返回Map 1.4.MyBatis查询自定义结果映射规则 ...

  4. Mybatis 动态SQL

    Mybatis 动态SQL 一 .动态SQL 数组 array 使用foreach 标签 <!-- mybatis的集合操作知识点: 如果遇到集合参数传递,需要将集合遍历标签: foreach ...

  5. MyBatis动态SQL之 set 和 trim标记的使用示例

    2019独角兽企业重金招聘Python工程师标准>>> 和之前的where一样,set和trim也是智能标记 在之前的user.xml中添加 <update id=" ...

  6. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...

  7. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  8. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

  9. MyBatis动态SQL,写SQL更爽

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

  10. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 整理 ...

最新文章

  1. 白盒测试之基本路径覆盖测试
  2. Unity UGUI——遮罩效果(Mask)
  3. [持续交付实践] 最后一公里,你需要一套具备质量思维的发布平台!
  4. Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法
  5. 少儿编程python课程-选好课程很重要,极客晨星让孩子喜欢上少儿编程
  6. Mysql在Windows上离线安装与配置
  7. LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”
  8. java常用简略语含义
  9. 2020年阿里云年中大促【福利】【选品】全攻略
  10. java process 中断_从Java运行外部程序,读取输出,允许中断
  11. 安装ps时无法验证订阅状态_免费申请office E5开发者订阅,附无限续期+私人网盘教程...
  12. 图论算法——最短路径算法
  13. 单片机涡轮流量传感器_青天仪表为您介绍安装涡轮流量计需要注意问题
  14. excel npoi 连接_C#操作Excel(NPOI)
  15. 分布式定时任务框架Uncode-Schedule技术介绍
  16. HANA数据库备份脚本案例(刘欣)
  17. 【tkinter】用不到50行Python代码,写一个扫雷小游戏
  18. sonar代码质量检测告警“static“ base class members should not be accessed via derived types
  19. ppt里插入python(code)代码高亮
  20. java的强类型语言与JavaScript(js)的弱类型语言

热门文章

  1. git安装包百度网盘下载
  2. System进程的启动流程第一部分
  3. 灵魂拷问:为什么5G路由器比2.4G路由器快?
  4. oracle自增序列带字母,[原创]Oracle自增序列
  5. oracle 实现自增序列
  6. python bt_linux平台使用Python制作BT种子并获取BT种子信息的方法
  7. C语言实验——圆柱体计算
  8. windows 10 安装jira进行开发管理
  9. Unity Graph View打造图形化对话编辑系统(三)
  10. 全球及中国生活用纸市场营销策略与盈利前景预测报告2022版