MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。
这篇文章主要介绍了 Spring mvc 整合 mybatis(crud+分页插件)操作 mysql 的步骤详解, 需要的朋友可以参考下
一、web.xml 配置
我们都知道 java ee 的项目启动的第一件事就是读取 web.xml,spring mvc 的 web.xml 我在上一篇文章中也做了详细讲解,不懂的可以回头看看,讲解的这个项目源码我也会放到 github 上,也可以去那里看看,这里就不做介绍了。
web.xml 配置
- contextConfigLocation
- classpath:/context.xml
- org.springframework.web.context.ContextLoaderListener
- dispatcherServlet
- org.springframework.web.servlet.DispatcherServlet
- 1
- contextConfigLocation
- classpath:external-servlet.xml
- dispatcherServlet
- /
- encodingFilter
- org.springframework.web.filter.CharacterEncodingFilter
- encoding
- UTF-8
- forceEncoding
- true
- encodingFilter
- /*
二、spring(context.xml) 上下文配置
这个配置文件可以说是服务器容器第二个要读取的了,这里配置了 spring 启动时扫描的基础包路径、外部配置的属性文件的导入、需要连接的数据库的配置、mybatis 和 spring 的整合、开头我们说到的 mybatis 日期插件和分页插件也是在这里配置、还有就是 mybatis 扫描的实体包及其 mapper 文件位置了。
context.xml 配置
- base-package="com.qbian" />
- id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
- p:location="classpath:jdbc.properties" />
- id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
- destroy-method="close">
- name="driverClass" value="${jdbc.driverClassName}" />
- name="jdbcUrl" value="${jdbc.url}" />
- name="user" value="${jdbc.username}" />
- name="password" value="${jdbc.password}" />
- id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- name="dataSource" ref="dataSource" />
- name="typeAliasesPackage" value="com.qbian.**.dto" />
- name="plugins">
- class="com.qbian.common.plugin.DatePlugin" />
- class="com.qbian.common.plugin.PagePlugin" />
- class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- name="basePackage" value="com.qbian.**.dao" />
- name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
- id="configProperties" class="com.qbian.common.plugin.PropertiesConfigurer">
- name="locations">
三、spring 控制器配置
这里配置的是控制器所在的位置,及其支持的请求类型和编码。
external-servlet.xml 配置
- base-package="com.qbian.common.controller" />
- class="org.springframework.http.converter.StringHttpMessageConverter">
- name="supportedMediaTypes">
- text/html;charset=UTF-8
- name="writeAcceptCharset" value="false" />
配置信息就是以上三个了,接下来我们来看看具体的代码,
四、代码讲解
1、java 代码讲解,以下不做排序,只是按编辑器显示顺序排列讲解。(以下内容均在 java.com.qbian 包下)
- common |
- annotation |
- @interface Now : 插入|更新数据的日期注解。
- @interface UUID :插入数据的uuid注解。
- controller |
- ExternalController.class :核心控制器,拦截所有请求,异常处理,跨域设置等功能。
- dao |
- interface StudentDao :使用例子,crud 共通方法。
- dto |
- PageInfoDto.class :分页使用的基础dto对象。
- ResponseDto.class :响应数据的基本模型。
- entity |
- Student.class :使用例子,自定义注解的使用。
- enums |
- enum MessageEnum :统一的返回状态码及描述信息。
- exception |
- ExternalServiceException.class :自定义异常,业务相关都抛出该异常对象。
- factory |
- BeanFactoryUtil.class :根据bean name获取spring管理的bean实例。
- hadle |
- ExceptionHandle.class :spring自带的统一异常捕获处理。
- plugin |
- DatePlugin.class :自定义mybatis日期插件。
- PagePlugin.class :自定义mybatis分页插件。
- PropertiesConfigurer.class :将外部配置的属性文件读取到 spring 容器中统一管理。
- service |
- interface IbaseServie :基础的service接口。
- BaseService.class :基础的service抽象类。
- TokenService.class :鉴权token服务类。
- util |
- CheckUtil.class :请求信息校验相关工具类。
- DateUtil.class :日期相关工具类。
- ResponseUtil.class :响应信息工具类。
- SecondsFormatSerializer.class :java.util.Date类型转时间戳工具类。
- TimestampSecondsFormatSerializer.class :java.sql.Timestamp类型转时间戳工具类。
- StringUtil.class :字符串相关工具类。
- other |
- dao |
- interface StudentExtDao :使用例子,业务相关crud操作。
- dto |
- QueryStudentSexPageDto.class :根据学生性别分页查询返回对象dto。
- StudentPageDto.class :根据学生性别分页查询封装的对象。
- service |
- AddStudentService.class :插入学生数据接口。
- DeleteStudentService.class :删除学生数据接口。
- FindStudentService.class :查询学生数据接口。
- UpdateStudentService.class :更新学生数据接口。
- QueryStudentBySexService.class :根据学生性别分页查询接口。
2、mybatis 的 mapper.xml 讲解(以下内容均在 resources/com/qbian 文件夹下)
- common |
- dao |
- StudentDao.xml :对应common.dao.StudentDao接口。
- other |
- dao |
- StudentExtDao.xml :对应other.dao.StudentExtDao接口。
五、功能演示
1、token 校验
这里的 token 我写死在代码里了,123456 表示校验成功。我们先用插入数据接口测试一下,传个错误的 token,如下图:
授权 token 校验
2、请求参数校验
我们来看看插入数据接口还需要校验哪些值。
- // 校验请求参数
- CheckUtil.checkEmpty(params, "token", "sex", "age");
- // 校验 token
- tokenService.checkUserLogin(params.getString("token"));
- Student student = JSONObject.parseObject(params.toJSONString(), Student.class);
- studentDao.insert(student);
- return ResponseUtil.success();
然后我们少传 age 字段试一下:
请求字段校验
3、插入数据
在插入数据之前我们先看看数据库里都有哪些数据:
初始化数据库中的值
从上图可以看出,数据库中没有任何数据。我们来执行下插入接口。
测试插入接口
我们再来看下数据库:
调用插入接口后
数据库已经有数据了。
4、查询数据
根据上一条数据的 ID 查询
调用查询接口
刚插入的数据我们也查询出来了。
5、更新数据
更新一下查询出来的数据:
调用更新接口
然后我们再查询一次该条数据
更新后再次查询
可以看到性别和年龄都更新了,并且更新日期也是最新的了。
6、分页查询
先来看一下代码:
- // 校验请求参数
- CheckUtil.checkEmpty(params, "token", "sex", "pageNo", "pageSize");
- // 校验 token
- tokenService.checkUserLogin(params.getString("token"));
- // 根据性别分页查询 Student,查询总数会自动封装到pageDto对象上
- QueryStudentSexPageDto pageDto = JSONObject.parseObject(params.toJSONString(), QueryStudentSexPageDto.class);
- List < Student > students = studentExtDao.queryBySexWithPage(pageDto);
- StudentPageDto studentPageDto = new StudentPageDto();
- // 查询总数会自动封装到pageDto对象上
- studentPageDto.setTotalSize(pageDto.getTotalSize());
- studentPageDto.setStudents(students);
- return ResponseUtil.success(studentPageDto);
分页查询之前我们想要导入多一点测试数据。
分页前测试数据
可以看到数据库目前有十条测试数据,男生有六条,年龄分别为 19~24。好了,我们开始调用分页查询接口:
调用分页查询接口返回结果
格式化一下返回数据:
分页查询返回结果整理
这和我们直接查询数据库看到的一样。
7、删除数据
最后就是删除数据接口了,我们将第一条测试数据删除掉。
调用删除接口返回结果
然后我们在查询一下是否真的删除了。
删除后查询
数据已经被删除了。
最后附上项目源码: https://github.com/Qbian61/spring-mvc-mybatis
以上所述是小编给大家介绍的 Spring mvc 整合 mybatis(crud+分页插件)操作 mysql,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/1212/357367.html