数据库
首页 > 数据库> > mybatis动态sql,分页

mybatis动态sql,分页

作者:互联网

1、基础增删改查

来自逆向生成

代码示例:只选取了新增和查询

 <insert id="insert" parameterType="com.csf.model.Book" >
    insert into t_mvc_book (bid, bname, price
      )
    values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL}
      )
  </insert>

 查

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bid = #{bid,jdbcType=INTEGER}
</select>

 标签名就是方法类型,各属性:

id:方法名

parameterType:返回类型

然后具体的sql语句在标签内容中,这里就可以通过if和foreach实现动态sql。

例如:

使用foreach进行查询

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

 使用foreach循环,得到一个数据集合,再根据数据集合进行查询。

if实现在默认生成的那几个方法中有。

2、#与$的区别

都用于在sql语句中引用参数的值

#:在语句中会自带单引号,不需要手动加入单引号,不过灵活性欠缺

$:用法与上面的差不多,不过不会带单引号,所以在使用时更加灵活,不过因此也有sql注入的风险。

3、查询语句结果集的配置

五种情况

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

2 使用resultType返回List<T>

3 使用resultType返回单个对象

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

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

分别对应各种应用场景

其中resultMap适合在查询自定义实体类的情况

而其他的,适用于返回值是由jdk提供的数据类型而非自定义实体类的情况

4、分页查询

在pom.xml中导入分页插件的pom依赖

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

在mybatis的主配置文件中将pagehelper插件配置到mybatis中

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

 在具体的使用时,需要在查询语句前开启分页

if(pageBean != null && pageBean.isPagination()){
        PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
}

这里传入的参数是起始下标和偏移量

在查询语句后,对结果集进行处理

这里借助pageBean,更方便我们查看结果

 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()+"");
 }

5、特殊字符的处理

因为是使用xml文件来写sql语句,像大于、小于号就不能再使用了,因为会与xml文件格式有冲突。

1、使用特殊标签包裹

<![CDATA[ ]]>

使用:

<select id="userInfo" parameterType="java.util.HashMap" resultMap="user">   
     SELECT id,newTitle, newsDay FROM newsTable WHERE 1=1  
     AND  newsday <![CDATA[>=]]> #{startTime}
     AND newsday <![CDATA[<= ]]>#{endTime}  
  ]]>  
 </select>  

2、转义

    特殊字符     转义序列
    <           &lt;
    >           &gt;
    &           &amp;
    "           &quot;
    '           &apos;

标签:语句,分页,bid,sql,查询,pageBean,mybatis,pageInfo
来源: https://blog.csdn.net/weixin_55966394/article/details/121904474