mybatis 动态sql及分页

1.mybatis 动态sql 

①:if 一样的用拼接条件

<if test="bname != null" >
  bname = #{bname,jdbcType=VARCHAR},
</if>

②:trim 格式化标签

prefix:前缀

suffix :后缀

suffixOverrides :减除最后一个“  , ”

<trim prefix="values (" suffix=")" suffixOverrides="," >
</trim>

③:foreach

遍历集合,批量查询,通常用于in关键字

<select id="list2" resultType="com.zking.mybatis01.model.Book" parameterType="com.zking.mybatis01.model.Book" >
  select
  <include refid="Base_Column_List" />
  from t_mvc_book
  where bid in
  <foreach collection="bookIds" separator="," item="bid" open="(" close=")">
      #{bid}
  </foreach>
</select>

2.模糊查询

    2.1 参数中直接加入%%

    2.2 使用${...}代替#{...}(不建议使用该方式,有SQL注入风险)
       
          关键:#{...}与${...}区别?
          参数类型为字符串,#会在前后加单引号[ ' ],$则直接插入值

          注:
          1) mybatis中使用OGNL表达式传递参数
          2) 优先使用#{...}
          3) ${...}方式存在SQL注入风险

    2.3 SQL字符串拼接CONCAT

3.查询返回结果集

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

    3.1 使用resultMap返回自定义类型集合
    
    3.2 使用resultType返回List<T>

    3.3 使用resultType返回单个对象

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

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

4.分页查询

①:mybatis分页

<select id="list3" resultType="java.util.Map" parameterType="java.util.Map" >
  select
  <include refid="Base_Column_List" />
  from t_mvc_book
  limit #{start},#{offset}
</select>

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

②:

在mybatis的配置文件中加入拦截器

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
    </plugin>
</plugins>
/*
       jdbc :
       map-->来自于jsp
       baseDao
           1、getCountSql-->total-->pageBean.setTotal
           2、set PageSqL-->list<T>-->返回

        hibernate:
        map-->来自于jsp
           baseDao
           1、getCountHql-->total-->pageBean.setTotal
           2、不需要拼接出pageHql-->hibernate.setFirst../setMaxRows..
        mybatis中借助 github提供的pageHelper
           pageHelper.start
           业务流程
           total-->pageBean.setTotal
    */

方法:

public List<Map> list3(Map map, PageBean pageBean) {
    if(pageBean!=null && pageBean.isPagination()){
        PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    }
    List<Map> maps = this.bookMapper.list3(map);
    if(pageBean!=null && pageBean.isPagination()){
        PageInfo pageInfo = new PageInfo(maps);
        pageBean.setTotal(pageInfo.getTotal()+"");
    }
    return  maps;
}

猜你喜欢

转载自blog.csdn.net/qq_40979551/article/details/85028917