JdbcTemplate:实现分页功能

实现分页

在数据多的时候,不分页JVM就会挂掉.由于是用的JdbcTemplate,所以就研究了下JdbcTemplate的分页.记录如下.

java

源码

部分代码,后面看时间更新为完整.

分页实体类:

生成分页的SQL语句:

InterSystems Cache 数据库的分页工具类(下面有MySQL的):

分页查询组件:

MySQL分页实现:

Oracle分页实现:

Maven:No compiler is provided in this environment

问题

在执行maven install的时候,提示如下错误:

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

maven logo

解决

解决办法是:在maven的conf/settings.xml中,添加如下代码即可(依照版本来,我这里是jdk 1.8就写1.8):

Java 8:Stream的使用

记录

开始在工作中接触一些Java 8 的内容,也开始使用Stream处理集合.下面是一些代码,有的是自己写的,有的来源于网上.

java标志

源码

Element-UI:缓存Tabs打开的页签

竟然不缓存?

在使用Element ui 的时候,发现Tabs挺好用,于是做了这样一个页面:左侧是菜单,右侧顶部是Tabs,右侧下方是iframe.一切就绪,问题出现,就是每次点菜单的时候,Tabs就会新增一个页签,这导致iframe增加不少.于是想了个办法,来解决这个问题.

  1. 在menu菜单中,index直接为页面的名称;
  2. 在Select事件中,拿到index就可以请求页面了;
  3. 请求页面的时候,先判断页面是否已经存在于缓存中.如果存在则直接激活该页签,不存在就先添加到Tabs,然后激活,并放入缓存中.
  4. over……

但这样,存在另外一个问题:如果有几十个菜单,会堆叠几十个iframe.侧面一想,如果共用一个iframe,那么会出现另外一个问题,就是可能在上一个页面只输入了一部分文本,还没处理就切换页签,会丢失上个页面的数据.

于是,在菜单量不多的情况下,还是每个页签一个单独的iframe.便于处理.

html

源码

只有main.html是有实质内容的,其余html都是为了演示数据.

代码可以直接在本地运行,可以保存成文件,进行运行.

main.html

roleList.html

userAdd.html

userList.html

roleAdd.html

读书:《深入浅出MyBatis技术原理与实战》

介绍

在不少项目中使用过MyBatis,但一直没机会深入了解过其相关知识.这次获知这本书之后,终于得以深入了解其运行原理.因原书并未附带相关随书源码.因此在看书时,非常不方便.本文后面会附上我看书时整理的源码一份(mybatis-spring 整合,及最后一章未整理),所有源码均可运行.我的环境是JDK1.8,Idea 2017.1,MySQL5.7,关于书籍信息如下:

  • 书名:深入浅出MyBatis技术原理与实战
  • 作 者:杨开振
  • ISBN:978-7-121-29594-2

mybatis logo

笔记

下面是一些笔记,供以后参考.

MyBatis基本构成:

SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口).
SqlSessionFactory:依靠工厂来生成SqlSession(会话).
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口.
SQL Mapper:它是MyBatis新设计的组件,它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则.它负责发送SQL去执行,并返回结果.

MyBatis配置XML文件层次结构(顺序不能变)

配置示例(application.properties)

需要配合上面的文件使用.

maven如果不能读取xml或者properties配置文件?

首选配置properties文件方式进行配置.

MyBatis映射器主要元素

特殊字符串的替换和处理(#和&)

columns = “c1,c2,c3″ #{columns} 会直接显示”c1,c2,c3”,会对参数进行处理.

${columns} 不会处理参数,会直接显示.例如(c1,c2,c3)

需要注意SQL注入的问题.

常用工具类

二级缓存默认不开启. 开启需要在映射文件中(查询数据中),添加

即可开启二级缓存.

元素 作用 备注
if 判断语句 单条件分支判断
choose(when,otherwise) 相当于Java中的if else语句 多条件分支判断
trim(where,set) 辅助元素 用于处理一些SQL拼接问题
foreach 循环语句 在in语句等列举条件常用

映射器的组成

MappedStatement:它保存映射器的一个节点(select|insert|delete|update),包括许多我们配置的SQL,SQL的id,缓存信息,resultMap,parameterType,resultType,languageDriver等重要配置内容;

SqlSource:它是提供BoundSql对象的地方,它是MappedStatement的一个属性.

BoundSql:它是简历SQL和参数的地方.它有3个常用的属性:SQL,parameterObject,parameterMappings.

1.Executor是执行SQL的全过程,包括组装参数,组装结果集返回和执行SQL过程,都可以拦截;
2.StatementHandler是执行SQL的过程,我们可以重写执行SQL的过程;
3.ParameterHandler,拦截执行SQL的参数组装;
4.ResultSetHandler用于拦截执行结果的组装.

源码及使用

使用源码可遵循如下步骤:

  1. 配置JDK1.8环境
  2. 配置MySQL5.6
  3. 配置Maven或Gradle
  4. 配置IDEA,并将源码包中的mybatis.sql导入到数据库中
  5. over…

贴一个maven的配置(使用了阿里的maven仓库,速度杠杠的).

源码下载.mybatils 源码