• mybatis02(动态sql及分页)


    目录

    一,mybatis动态sql

            1.if

            2.foreach

    二,模糊查询

            1.#{...}

            2.${...}

            3.Concat

    三,查询返回结果集的处理

            1.resultMap

            2.resultType

    四,分页查询

            1.为什么要重写mybatis的分页

            2.使用分页插件的步骤

    五,特殊字符处理


    一,mybatis动态sql

            1.if:条件语句

            2.foreach

    imp代码层: 

     与xml代码对应mapper:

     在biz层写入相应的代码:

    进行测试:

      

      运行结果:

     完整代码xml:

    1. <select id="selectByIn" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    2. select
    3. <include refid="Base_Column_List" />
    4. from t_mvc_book
    5. where bid in
    6. <foreach collection="bookIds" open="(" close= ")" separator="," item="bid">
    7. #{bid}
    8. foreach>
    9. select>

    二,模糊查询

            1.#{...}

            

    mapper:

    biz:

     impl:

    测试:

    测试结果:#{...}用的是?(占位符)

            2.${...}

    mapper:

    biz:

     impl:

    测试:

    测试结果:${...}防sql注入

            3.Concat

    mapper:

    biz:

     impl:

    测试:

    测试结果:常用的方法为concat   ------>   concat(concat('%',?),'%')----->%?%

     由上面的结果可得:

    注意:#{...}自带引号,用占位符赋值,${...}有sql注入的风险

    完整代码:

    xml:

    1. <select id="selectBooksLike1" resultType="com.ruojuan.model.book" parameterType="java.lang.String">
    2. select * from t_mvc_book where bname like #{bname}
    3. select>
    4. <select id="selectBooksLike2" resultType="com.ruojuan.model.book" parameterType="java.lang.String">
    5. select * from t_mvc_book where bname like '${bname}'
    6. select>
    7. <select id="selectBooksLike3" resultType="com.ruojuan.model.book" parameterType="java.lang.String">
    8. select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
    9. select>

    Mapper:

    1. List selectBooksLike1(@Param("bname") String bname);
    2. List selectBooksLike2(@Param("bname") String bname);
    3. List selectBooksLike3(@Param("bname") String bname);

    biz:

    1. public List selectBooksLike1( String bname);
    2. public List selectBooksLike2( String bname);
    3. public List selectBooksLike3( String bname);

    impl:

    1. @Override
    2. public List selectBooksLike1(String bname){
    3. return bookMapper.selectBooksLike1(bname);
    4. };
    5. @Override
    6. public List selectBooksLike2(String bname){
    7. return bookMapper.selectBooksLike2(bname);
    8. };
    9. @Override
    10. public List selectBooksLike3(String bname){
    11. return bookMapper.selectBooksLike3(bname);
    12. };

    test测试:

    1. @Test
    2. public void selectBooksLike1() {
    3. bookBiz.selectBooksLike1("%圣墟%").forEach(System.out::println);
    4. }
    5. @Test
    6. public void selectBooksLike2() {
    7. bookBiz.selectBooksLike2("%圣墟%").forEach(System.out::println);
    8. }
    9. @Test
    10. public void selectBooksLike3() {
    11. bookBiz.selectBooksLike3("圣墟").forEach(System.out::println);
    12. }

    三,查询返回结果集的处理

            1.resultMap

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

            2.resultType

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

     注意事项:使用resultMap返回自定义类型集合

                       使用resultType返回List

                       使用resultType返回单个对象

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

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

    xml:

    1. <select id="list1" resultMap="BaseResultMap">
    2. select * from t_mvc_book
    3. select>
    4. <select id="list2" resultType="com.ruojuan.model.book">
    5. select * from t_mvc_book
    6. select>
    7. <select id="list3" resultType="com.ruojuan.model.book" parameterType="com.ruojuan.model.BookVo">
    8. select * from t_mvc_book where bid in
    9. <foreach collection="bookIds" open="(" close=")" separator="," item="bid">
    10. #{bid}
    11. foreach>
    12. select>
    13. <select id="list4" resultType="java.util.Map">
    14. select * from t_mvc_book
    15. select>
    16. <select id="list5" resultType="java.util.Map" parameterType="java.util.Map">
    17. select * from t_mvc_book where bid = #{bid}
    18. select>

    mapper:

    1. //list1 list2的结论是 ,对于单表查询而言,可以用resultmap/resultType接收,但是多表必须用resultmap接收
    2. List list1();
    3. List list2();
    4. //如果要传入多个查询参数,必须以对象的方式进行传递
    5. List list3(BookVo vo);
    6. // 使用resultType返回List,适用于多表查询返回结果集
    7. List list4();
    8. // 使用resultType返回Map,适用于多表查询返回单个结果集
    9. Map list5(Map map);
    10. //利用第三方插件进行分页
    11. List listPager(Map map);

    biz:

    1. List list1();
    2. List list2();
    3. List list3(BookVo vo);
    4. List list4();
    5. Map list5(Map map);

    impl:

    1. @Override
    2. public List list1(){
    3. return bookMapper.list1();
    4. }
    5. @Override
    6. public List list2(){
    7. return bookMapper.list2();
    8. }
    9. @Override
    10. public List list3(BookVo vo){
    11. return bookMapper.list3(vo);
    12. }
    13. @Override
    14. public List list4(){
    15. return bookMapper.list4();
    16. }
    17. @Override
    18. public Map list5(Map map){
    19. return bookMapper.list5(map);
    20. }

    test测试类:

    1. @Test
    2. public void list1() {
    3. bookBiz.list1().forEach(System.out::println);
    4. }
    5. @Test
    6. public void list2() {
    7. bookBiz.list2().forEach(System.out::println);
    8. }
    9. @Test
    10. public void list3() {
    11. BookVo vo = new BookVo();
    12. vo.setBookIds(Arrays.asList(new Integer[]{31,32,33,34}));
    13. bookBiz.list3(vo).forEach(System.out::println);
    14. }
    15. @Test
    16. public void list4() {
    17. bookBiz.list4().forEach(System.out::println);
    18. }
    19. @Test
    20. public void list5() {
    21. Map map = new HashMap();
    22. map.put("bid",32);
    23. System.out.println(bookBiz.list5(map));
    24. }

    测试结果:

     

     

    四,分页查询

            1.为什么要重写mybatis的分页

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

            2.使用分页插件的步骤

    1. 导入pom依赖
    2. Mybatis.cfg.xml配置拦截器
    3. 使用PageHelper进行分页
    4. 处理分页结果

    Pom依赖

    <dependency>
        <groupId>com.github.pagehelpergroupId>
        <artifactId>pagehelperartifactId>
        <version>5.1.2version>
    dependency>

    Mybatis.cfg.xml配置拦截器

    <plugins>
        
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
        plugin>
    plugins>

    使用分页插件

    <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
      select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
    select>

    Mapper层

    List listPager(Map map);

     

    Service层

    List listPager(Map map, PageBean pageBean);

    @Override
    public List listPager(Map map, PageBean pageBean) {
        if(pageBean != null && pageBean.isPagination()){
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        }
        List list = bookMapper.listPager(map);
        if(pageBean != null && pageBean.isPagination()){
            PageInfo pageInfo = new PageInfo(list);
            System.out.println("页码:"+pageInfo.getPageNum());
            System.out.println("页大小:"+pageInfo.getPageSize());
            System.out.println("总记录:"+pageInfo.getTotal());
            pageBean.setTotal(pageInfo.getTotal()+"");
        }
        return list;
    }

     

     

    五,特殊字符处理

            

    >(>)   

        <(<)  

        &(&)

     空格( )

     

    相关代码配置

    <select id="list6" resultType="com.javaxl.model.Book" parameterType="com.javaxl.model.BookVo">
      select * from t_mvc_book
      <where>
        <if test="null != min and min != ''">
          
        if>
        <if test="null != max and max != ''">
           price ]]>
        if>
      where>
    select>

      <select id="list7" resultType="com.javaxl.model.Book" parameterType="com.javaxl.model.BookVo">
        select * from t_mvc_book
        <where>
          <if test="null != min and min != ''">
             and #{min} < price
          if>
          <if test="null != max and max != ''">
             and #{max} > price
          if>
        where>
      select>

    /**
     * 处理特殊字符
     * @param bookVo
     * @return
     */
    List list6(BookVo bookVo);


    /**
     * 处理特殊字符
     * @param bookVo
     * @return
     */
    List list7(BookVo bookVo);

     

     

  • 相关阅读:
    Golang swagger :missing required param comment parameters
    点餐系统数据库设计--SQL Server
    安科瑞煤矿电力监控系统的研究与应用
    手动数字哈希表-C语言
    【Linux学习笔记】基础IO
    大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )
    python3安装opencv
    自动化安装脚本(Ansible+shell)
    linux的常用命令
    JS基础——cookie常见的属性介绍
  • 原文地址:https://blog.csdn.net/weixin_67338832/article/details/126296573