mybatis中mappper写分页查询和批量删除的方法

原创
2016/11/08 20:12
阅读数 1.6K

用mybatis做项目非常方便,因为它解放了dao的实现类,并且在生成的mapper文件中已有一些基础的被大量使用的对数据库增删改查的语句。让我们编程开发更加注重业务逻辑这块重点。

现在来总结一下我在项目编程中遇到分页查询和批量删除这两个点的解决办法。

使用框架:springMVC+mybatis+mysql

1.分页查询

基础的sql语句如下:

select *<字段名> from tableName limit #{ (page-1)*pagesize },#{pageSize}

其中tablename即表名。

两个参数。其中page表示起始页,pageSize表示每页显示的数据行数

limit关键字的意思就是从哪里开始总共查询多少行了。

例如select *<字段名> from tableName limit  1,5

即表示从第2行开始到第5行的数据

注意是从第2行开始,这就可以解释page=1的问题了,因为数据库是从limit 紧跟着后面参数加1行开始查询的,因此page=1的时候,即从第一页第一行开始查。

另外,提一下oracle的分页语句格式为:

select  * from(select a.*,rownum r from tablename a where 1=1 and 查询条件) where r<(page*pageSize) and r>((page-1)*pageSize)

这里用到了rownum这个参数,是一个嵌套查询语句,至少在这里看上去没有,mysql方便。

2.批量删除

基本的sql语句先贴出来:

DELETE FROM 表名 WHERE id<id对应字段名> IN
        <foreach collection="list" index="index" item="item" open="("
            separator="," close=")">
            #{item}
        </foreach>

其中<foreach></foreach>标签学过jsp的应该挺眼熟,是的,就是遍历的作用。传进来的collection="list",其中list就是被遍历的参数,就是你要批量删除选中的一个或多个id的集合。

通过foreach遍历集合,每个item是遍历出来的一个id,再根据id依次删除表中对应id行的内容。

具体实现代码贴图所示。

mapper.xml:

dao接口方法:

service层方法:

controller中方法:

好了,说完了批量删除,也可以看看其他的批量操作。模板是一样的。

批量更新:

<update id="dao层方法名" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" open="begin" close="end;" separator="" >
            update tablename
            <set>       
                age = #{item.age}+1,name=#{item.name}
            </set>
            where id = #{item.id};
        </foreach>
    </update>

批量插入:

注意的是mysql和oracle批量插入的语句有差别。

mysql:
<insert id="batchInsertStudent" parameterType="java.util.List">  
    INSERT INTO STUDENT (id,name,sex,tel,address)  
    VALUES   
    <foreach collection="list" item="item" index="index" separator="," >  
        (#{item.id},#{item.name},#{item.sex},#{item.tel},#{item.address})  
    </foreach>  
</insert>

oracle:
<insert id="insertBatch4Oracle" parameterType="List">
        insert into aa(a,b)
        <foreach collection="list" item="item" index="index" separator="union all" >
         select  #{item.a},#{item.b} from dual
        </foreach>
 </insert>

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部