修改MyBatis 源代码,实现数据库分页及Object[]数据结果
2010-09-20 23:26
555 查看
最近研读了MyBatis源代码,并且修改了几处代码,实现了数据库分页以及Object[]数据结果,源代码稍后放出,只因文章中不能直接携带图片之外的附件。
数据库分页不仅实现了数据库分页,而且还可以根据需求,自动返回SQL语句统计总行数。
查询结果可以返回List<Object[]> 结构的结果,兼容习惯数组操作。
map配置:
代码:
先贴上一段分页的运行日志(注意红色字为分页和统计关键日志):
INFO 09-20 23:36:40 (719) org.apache.ibatis.executor.statement.RoutingStatementHandler Pagination query prepare! (RoutingStatementHandler.java:81)
INFO 09-20 23:36:40 (906) org.apache.ibatis.executor.statement.RoutingStatementHandler Count PreparedStatement is created! (RoutingStatementHandler.java:100)
DEBUG 09-20 23:36:40 (906) java.sql.PreparedStatement ==> Executing: select * from ( select row_.*, rownum rownum_ from ( select * from student WHERE name like ? ) row_ ) where rownum_ <= 2+10 and rownum_ > 2 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (906) java.sql.PreparedStatement ==> Parameters: %心%(String) (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1000) java.sql.ResultSet <== Columns: ID, NAME, MAJOR, BIRTH, SCORE, ROWNUM_ (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1015) java.sql.ResultSet <== Row: 97575FC004874789BBF35BF4950482DD, 心目, s, 2010-09-18 14:01:33.0, 12, 3 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: D8D2B23C2CE1407CBBAD390791710972, 心目, s, 2010-09-18 14:02:56.0, 12, 4 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 4F9737FDC1F947D984A4B6645116C1A8, 心目, s, 2010-09-18 14:03:20.0, 12, 5 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: F0C0384B4E93446DA5E970BED4D2A86F, 心目, s, 2010-09-18 14:04:31.0, 12, 6 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 7E20160DE3E645BCB5BB242AE93564B0, 心目, s, 2010-09-18 14:05:01.0, 12, 7 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 82EBB84B119D4C1EA6C47524381D9087, 心目, s, 2010-09-18 14:06:29.0, 12, 8 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 5A3C622E78EE4096981B82B7649562DD, 心目, s, 2010-09-18 14:07:24.0, 12, 9 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: CDA81292ED86466F986F3CB990B8B01A, 心目, s, 2010-09-18 14:35:16.0, 12, 10 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: D912787AC77B4D06B991944FA6CE08D5, 心目, s, 2010-09-18 14:35:48.0, 12, 11 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: AED12300B24548199745EA7CDB3E604B, 心目, s, 2010-09-18 14:37:31.0, 12, 12 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.PreparedStatement ==> Executing: select count(*) from student WHERE name like ? (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.PreparedStatement ==> Parameters: %心%(String) (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Columns: COUNT(*) (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 115 (Slf4jImpl.java:28)
总行数是:115
数据库分页不仅实现了数据库分页,而且还可以根据需求,自动返回SQL语句统计总行数。
查询结果可以返回List<Object[]> 结构的结果,兼容习惯数组操作。
map配置:
<select id="findAll2" parameterType="list" resultType="object[]"> select * from student <where> <if test="array[0]">and name like #{array[0]}</if> <if test="array[1]">and score = #{array[1]}</if> </where> </select>
代码:
StudentMaper maper = session.getMapper(StudentMaper.class); List<Object[]> list = maper.findAll2(new Object[] { "%心%", null }, new RowBounds(2, 10));
先贴上一段分页的运行日志(注意红色字为分页和统计关键日志):
INFO 09-20 23:36:40 (719) org.apache.ibatis.executor.statement.RoutingStatementHandler Pagination query prepare! (RoutingStatementHandler.java:81)
INFO 09-20 23:36:40 (906) org.apache.ibatis.executor.statement.RoutingStatementHandler Count PreparedStatement is created! (RoutingStatementHandler.java:100)
DEBUG 09-20 23:36:40 (906) java.sql.PreparedStatement ==> Executing: select * from ( select row_.*, rownum rownum_ from ( select * from student WHERE name like ? ) row_ ) where rownum_ <= 2+10 and rownum_ > 2 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (906) java.sql.PreparedStatement ==> Parameters: %心%(String) (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1000) java.sql.ResultSet <== Columns: ID, NAME, MAJOR, BIRTH, SCORE, ROWNUM_ (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1015) java.sql.ResultSet <== Row: 97575FC004874789BBF35BF4950482DD, 心目, s, 2010-09-18 14:01:33.0, 12, 3 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: D8D2B23C2CE1407CBBAD390791710972, 心目, s, 2010-09-18 14:02:56.0, 12, 4 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 4F9737FDC1F947D984A4B6645116C1A8, 心目, s, 2010-09-18 14:03:20.0, 12, 5 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: F0C0384B4E93446DA5E970BED4D2A86F, 心目, s, 2010-09-18 14:04:31.0, 12, 6 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 7E20160DE3E645BCB5BB242AE93564B0, 心目, s, 2010-09-18 14:05:01.0, 12, 7 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 82EBB84B119D4C1EA6C47524381D9087, 心目, s, 2010-09-18 14:06:29.0, 12, 8 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 5A3C622E78EE4096981B82B7649562DD, 心目, s, 2010-09-18 14:07:24.0, 12, 9 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: CDA81292ED86466F986F3CB990B8B01A, 心目, s, 2010-09-18 14:35:16.0, 12, 10 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: D912787AC77B4D06B991944FA6CE08D5, 心目, s, 2010-09-18 14:35:48.0, 12, 11 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: AED12300B24548199745EA7CDB3E604B, 心目, s, 2010-09-18 14:37:31.0, 12, 12 (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.PreparedStatement ==> Executing: select count(*) from student WHERE name like ? (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.PreparedStatement ==> Parameters: %心%(String) (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Columns: COUNT(*) (Slf4jImpl.java:28)
DEBUG 09-20 23:36:40 (1031) java.sql.ResultSet <== Row: 115 (Slf4jImpl.java:28)
总行数是:115
相关文章推荐
- SSM+mybatis数据库实现百万数据分页取出并分页插入Excel中
- MySQL中数据结果集分页功能的实现方法;数据库查询返回特定结果即分页查询
- 网页实现从数据库读取数据并简单分页
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样
- Maven+Mybatis+Spring+SpringMVC实现分页查询(附源代码)
- Java的MyBatis框架中实现多表连接查询和查询结果分页
- mybatis 向数据库插入数据时获取其主键值(序列值)的实现小记
- 3.如何优化操作大数据量数据库(实现小数据量和海量数据的分页显示存储过程)
- Mybatis 数据库物理分页插件 PageHelper 前端实现
- C#实现对数据库中的表的查询、添加、修改、删除数据
- ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(三)
- springmvc+mybatis +poi实现导入exce数据l到数据库中
- 连接数据库实现添加,删除,修改,AJAX异步,分页,查询等操作,
- mybatis执行查询语句查询不到结果,控制台输出sql语句复制到数据库中能查到数据
- 主流数据库之间对SQL:2003标准的不同实现方法比较(第四部分 查询结果集中间n行数据)
- MyBatis笔记----MyBatis数据库表格数据修改更新的两种方法:XML与注解
- 修改用户信息的时候,使用Servlet对新的数据和数据库的数据进行对比,修改成功实现页面的弹窗和页面的跳转
- mybatis执行查询语句查询不到结果,控制台输出sql语句复制到数据库中能查到数据
- mybatis执行查询语句查询不到结果,控制台输出sql语句复制到数据库中能查到数据
- MyBatis知识系列之五:利用Mybatis实现数据表的分页