mybatis中mappper写分页查询和批量删除的方法
2016-11-08 00:00
337 查看
摘要: 分页查询在sql语句中用到limit关键字。
批量删除则是in和for each的方法。
用mybatis做项目非常方便,因为它解放了dao的实现类,并且在生成的mapper文件中已有一些基础的被大量使用的对数据库增删改查的语句。让我们编程开发更加注重业务逻辑这块重点。
现在来总结一下我在项目编程中遇到分页查询和批量删除这两个点的解决办法。
使用框架:springMVC+mybatis+mysql
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方便。
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:
![](http://static.oschina.net/uploads/space/2016/1108/200149_GjYy_2884176.png)
dao接口方法:
![](https://static.oschina.net/uploads/space/2016/1108/200219_FdHl_2884176.png)
service层方法:
![](https://static.oschina.net/uploads/space/2016/1108/200300_vLYg_2884176.png)
controller中方法:
![](http://static.oschina.net/uploads/space/2016/1108/200342_S0Ux_2884176.png)
好了,说完了批量删除,也可以看看其他的批量操作。模板是一样的。
批量更新:
<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>
批量删除则是in和for each的方法。
用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:
![](http://static.oschina.net/uploads/space/2016/1108/200149_GjYy_2884176.png)
dao接口方法:
![](https://static.oschina.net/uploads/space/2016/1108/200219_FdHl_2884176.png)
service层方法:
![](https://static.oschina.net/uploads/space/2016/1108/200300_vLYg_2884176.png)
controller中方法:
![](http://static.oschina.net/uploads/space/2016/1108/200342_S0Ux_2884176.png)
好了,说完了批量删除,也可以看看其他的批量操作。模板是一样的。
批量更新:
<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>
相关文章推荐
- Mybatis操作(批量插入,批量修改,批量删除, 分页查询)
- mybatis 操作(批量插入,批量修改,批量删除, 分页查询)
- Mybatis关联结果查询分页方法
- mybatis里面批量删除的使用方法:
- Mybatis中的foreach方法,批量插入和批量删除
- Mybatis关联结果查询分页方法
- JAVAWEB开发之分页显示、批量删除、条件查询 以及Listener监听器
- Mybatis实现增删改查及分页查询的方法
- Mybatis的插件 PageHelper 分页查询使用方法
- MyBatis实现CRUD(增加,删除,修改,查询,分页)
- JAVAEE——BOS物流项目04:学习计划、datagrid、分页查询、批量删除、修改功能
- 修改,批量删除,查询升降,分页
- mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页
- redid 分页 查询 批量删除
- Mybatis动态SQL 条件查询,批量删除
- 参数为集合时,mybatis3 分页查询问题及其对应的解决方法
- Mybatis的插件 PageHelper 分页查询使用方法
- mybatis 批量增加、删除、修改、查询
- Mybatis的插件 PageHelper 分页查询使用方法
- mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页