• 动态sql和分页


    Mybatis动态SQL

    Iftrimforeach

    BookMapper

    1  /**
    2      * 如果形参要在mapper.xml中使用需要加上面注解
    3      * map.name: zs age: 12
    4      * @param bookIds
    5      * @return
    6      */
    7     List<Book> selectBooksIn(@Param("bookIds") List bookIds);
    BookService
    1 List<Book> selectBooksIn(List bookIds);
    BookServiceImpl
    1  @Override
    2     public List<Book> selectBooksIn(List bookIds) {
    3         return bookMapper.selectBooksIn(bookIds);
    4     }

    Bookmapper.xml

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

    结果:

    模糊查询

    Mybatis对模糊查询共有三种方式
    {}
    ${}
    concat
    #与$的区别
    $会引起sql攻击
    Java代码差别(#):%圣墟%
    select * from t_mvc_book where bname like #{bname}
    select * from t_mvc_book where bname like %圣墟%

    select * from t_mvc_book where bname like '${bname}' 人为加的引导
    %圣墟%正常传值
    比如:'%圣墟% or 1=1'
    select * from t_mvc_book where bname like ''%圣墟% or 1=1''
    BookMapper
     1 /**
     2      *Mybatis对模糊查询共有三种方式
     3      * #{}
     4      * ${}
     5      * concat
     6      * @param bname
     7      * @return
     8      */
     9     List<Book> selectBooksLike1(@Param("bname")String bname);
    10     List<Book> selectBooksLike2(@Param("bname")String bname);
    11     List<Book> selectBooksLike3(@Param("bname")String bname);
    BookService
     1 /**
     2      *Mybatis对模糊查询共有三种方式
     3      * #{}
     4      * ${}
     5      * concat
     6      * @param bname
     7      * @return
     8      */
     9     List<Book> selectBooksLike1(String bname);
    10     List<Book> selectBooksLike2(String bname);
    11     List<Book> selectBooksLike3(String bname);

       Bookmapper.xml

     1 <select id="selectBooksLike1" resultType="com.Mybatis.model.Book" parameterType="java.lang.String">
     2 select  * from t_mvc_book where bname like #{bname}
     3   </select>
     4 
     5   <select id="selectBooksLike2" resultType="com.Mybatis.model.Book" parameterType="java.lang.String">
     6 select  * from t_mvc_book where bname like '${bname}'
     7   </select>
     8 
     9   <select id="selectBooksLike3" resultType="com.Mybatis.model.Book" parameterType="java.lang.String">
    10 select  * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
    11   </select>
    BookServiceImpl
     1  @Override
     2     public List<Book> selectBooksLike1(String bname) {
     3         return bookMapper.selectBooksLike1(bname);
     4     }
     5 
     6     @Override
     7     public List<Book> selectBooksLike2(String bname) {
     8         return bookMapper.selectBooksLike2(bname);
     9     }
    10 
    11     @Override
    12     public List<Book> selectBooksLike3(String bname) {
    13         return bookMapper.selectBooksLike3(bname);
    14     }

    测试:

    Mybatis结果集处理的五种情况

    resultMap:适合使用返回值是自定义实体类的情况

    resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

    使用resultMap返回自定义类型集合

    使用resultType返回List<T>

    使用resultType返回单个对象

    使用resultType返回List<Map>,适用于多表查询返回结果集

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

    BookMapper
    1  List<Book> list1();
    2     List<Book> list2();
    3     List<Book> list3(BookVo bookVo);
    4     List<Map> list4(Map map);
    5     Map list5(Map map);
     Bookmapper.xml
     1   <select id="list1" resultMap="BaseResultMap">
     2 select  * from t_mvc_book
     3   </select>
     4   <select id="list2" resultMap="BaseResultMap">
     5 select  * from t_mvc_book
     6   </select>
     7   <select id="list3" resultType="com.Mybatis.model.Book" parameterType="com.Mybatis.model.vo.BookVo">
     8 select  * from t_mvc_book where bid in
     9     <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
    10       #{bid}
    11     </foreach>
    12   </select>
    13   <select id="list4" resultType="java.util.Map" parameterType="java.util.Map">
    14     select  * from t_mvc_book where bid in
    15     <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
    16       #{bid}
    17     </foreach>
    18   </select>
    19   <select id="list5" resultType="java.util.Map" parameterType="java.util.Map">
    20     select  * from t_mvc_book where bid = #{bid}
    21   </select>
    BookService
    1  List<Book> list1();
    2     List<Book> list2();
    3     List<Book> list3(BookVo bookVo);
    4     List<Map> list4(Map map);
    5     Map list5(Map map);
    BookServiceImpl
     1 @Override
     2     public List<Book> list2() {
     3         return bookMapper.list2();
     4     }
     5 
     6     @Override
     7     public List<Book> list3(BookVo bookVo) {
     8         return bookMapper.list3(bookVo);
     9     }
    10 
    11     @Override
    12     public List<Map> list4(Map map) {
    13         return bookMapper.list4(map);
    14     }
    15 
    16     @Override
    17     public Map list5(Map map) {
    18         return bookMapper.list5(map);
    19     }
    测试:

    分页查询

    为什么要重写mybatis的分页?

    Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的

    1、导入pom依赖

    1 <dependency>
    2     <groupId>com.github.pagehelper</groupId>
    3     <artifactId>pagehelper</artifactId>
    4     <version>5.1.2</version>
    5 </dependency>

    Mybatis.cfg.xml配置拦截器

    BookMapper
    1  /**
    2      * 分页
    3      * @param map
    4      * @return
    5      */
    6     List<Map> listPager(Map map);
    
    
    Bookmapper.xml
     <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
        select  * from t_mvc_book where bname like #{bname}
      </select>
    BookService
    1     /**
    2      * 分页
    3      * @param map
    4      * @return
    5      */
    6     List<Map> listPager(Map map, PageBean pageBean);
    BookServiceImpl
     1 @Override
     2     public List<Map> listPager(Map map, PageBean pageBean) {
     3         if (pageBean != null && pageBean.isPagination()){
     4             PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
     5         }
     6         List<Map> list = bookMapper.listPager(map);
     7         if (pageBean != null && pageBean.isPagination()){
     8             PageInfo pageInfo = new PageInfo(list);
     9             System.out.println("总记录数:"+pageInfo.getTotal());
    10             System.out.println("当前页:"+pageInfo.getPageNum());
    11             System.out.println("页大小:"+pageInfo.getPageSize());
    12             pageBean.setTotal(pageInfo.getTotal()+"");
    13             System.out.println("总页数:"+pageBean.getMaxPage());
    14         }
    15         return list;
    16     }

    测试:

    特殊字符处理

       >(>)   

        <(<)  

        &(&)

        空格( )

     <![CDATA[ <= ]]> 

    BookMapper
    1 /**
    2      * 特殊字符处理
    3      * @param bookVo
    4      * @return
    5      */
    6     List<Book> list6(BookVo bookVo);
    Bookmapper.xml
    1  <select id="list6" resultType="com.Mybatis.model.Book" parameterType="com.Mybatis.model.vo.BookVo">
    2        select  * from t_mvc_book where <![CDATA[  price > #{min} and price < #{max} ]]>
    3     </select>
    BookService
    1 /**
    2      * 特殊字符处理
    3      * @param bookVo
    4      * @return
    5      */
    6     List<Book> list6(BookVo bookVo);
    BookServiceImpl
    1  @Override
    2     public List<Book> list6(BookVo bookVo) {
    3         return bookMapper.list6(bookVo);
    4     }

    测试:

  • 相关阅读:
    从入门到不放弃系列之Koa2
    进击Node.js基础(二)
    进击Node.js基础(一)
    探知浏览器并发请求个数
    Elasticsearch 聚合操作
    Elasticsearch 数据查询
    Elasticsearch 数据操作
    Elasticsearch 映射操作
    Elasticsearch 索引操作
    IDEA类和方法注释模板设置
  • 原文地址:https://www.cnblogs.com/xcn123/p/11699418.html
Copyright © 2020-2023  润新知