Spring mvc整合mybatis(crud+分页插件)操作mysql

发布时间 - 2026-01-11 00:50:16    点击率:

一、web.xml配置

我们都知道java ee的项目启动的第一件事就是读取web.xml,spring mvc 的web.xml我在上一篇文章中也做了详细讲解,不懂的可以回头看看,讲解的这个项目源码我也会放到github上,也可以去那里看看,这里就不做介绍了。

web.xml 配置

<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:/context.xml</param-value>
</context-param>
<!-- 监听器:启动服务器时,启动 spring -->
<listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring 核心控制器 -->
<servlet>
 <servlet-name>dispatcherServlet</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <load-on-startup>1</load-on-startup>
<init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:external-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
 <servlet-name>dispatcherServlet</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器 -->
<filter>
 <filter-name>encodingFilter</filter-name>
 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
 <param-name>encoding</param-name>
 <param-value>UTF-8</param-value>
</init-param>
<init-param>
 <param-name>forceEncoding</param-name>
 <param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
 <filter-name>encodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

二、spring(context.xml) 上下文配置

这个配置文件可以说是服务器容器第二个要读取的了,这里配置了spring启动时扫描的基础包路径、外部配置的属性文件的导入、需要连接的数据库的配置、mybatis 和 spring 的整合、开头我们说到的 mybatis 日期插件和分页插件也是在这里配置、还有就是mybatis扫描的实体包及其 mapper 文件位置了。

context.xml 配置

<!-- spring 扫描的基础包路径 -->
<context:component-scan base-package="com.qbian" />
<!-- jdbc properties -->
<bean id="propertyConfigurer"
 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
 p:location="classpath:jdbc.properties" />
<!-- define the datasource (这里用的是c3p0的数据看连接池,性能不是很好,可以唤其它更好的连接池[jdbc pool等])-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
 destroy-method="close">
 <property name="driverClass" value="${jdbc.driverClassName}" />
 <property name="jdbcUrl" value="${jdbc.url}" />
 <property name="user" value="${jdbc.username}" />
 <property name="password" value="${jdbc.password}" />
</bean>
<!-- define the SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 <property name="dataSource" ref="dataSource" />
 <property name="typeAliasesPackage" value="com.qbian.**.dto" />
 <property name="plugins">
 <list>
  <!-- 配置自己实现的日期插件 -->
  <bean class="com.qbian.common.plugin.DatePlugin" />
  <!-- 分页插件 -->
  <bean class="com.qbian.common.plugin.PagePlugin" />
 </list>
 </property>
</bean>
<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 <property name="basePackage" value="com.qbian.**.dao" />
 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<!-- 将多个配置文件读取到容器中,交给Spring管理 -->
<bean id="configProperties" class="com.qbian.common.plugin.PropertiesConfigurer">
 <property name="locations">
 <list>
  <!--<value>classpath:redis.properties</value>-->
 </list>
 </property>
</bean>

三、spring 控制器配置

这里配置的是控制器所在的位置,及其支持的请求类型和编码。

external-servlet.xml 配置

<!-- 控制器扫描 -->
<context:component-scan base-package="com.qbian.common.controller" />
<mvc:annotation-driven>
 <mvc:message-converters>
 <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  <property name="supportedMediaTypes">
  <list>
   <value>text/html;charset=UTF-8</value>
  </list>
  </property>
  <property name="writeAcceptCharset" value="false" />
 </bean>
 </mvc:message-converters>
</mvc:annotation-driven>

配置信息就是以上三个了,接下来我们来看看具体的代码,

四、代码讲解

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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# spring  # mvc整合  # mybatis  # 操作mysql  # 分页  # MySQL查询重写插件的使用  # zabbix通过percona插件监控mysql的方法  # MySql5.6使用validate password 插件加强密码强度的安装及使用方法  # MySQL 密码增强插件  # MySQL中InnoDB的Memcached插件的使用教程  # 详解MySQL下InnoDB引擎中的Memcached插件  # MySQL HandlerSocket插件安装配置教程  # 发款php蜘蛛统计插件只要有mysql就可用  # MySQL连接控制插件介绍  # 自定义  # 的是  # 测试数据  # 可以看到  # 来看看  # 不做  # 数据库中  # 小编  # 配置文件  # 连接池  # 在这里  # 很好  # 我在  # 好了  # 多个  # 在此  # 没有任何  # 不懂  # 说到 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  浅述节点的创建及常见功能的实现  如何确保FTP站点访问权限与数据传输安全?  JavaScript如何实现错误处理_try...catch如何捕获异常?  香港网站服务器数量如何影响SEO优化效果?  深圳网站制作的公司有哪些,dido官方网站?  网易LOFTER官网链接 老福特网页版登录地址  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何在宝塔面板中修改默认建站目录?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  网站建设整体流程解析,建站其实很容易!  ,交易猫的商品怎么发布到网站上去?  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  香港服务器建站指南:免备案优势与SEO优化技巧全解析  详解Oracle修改字段类型方法总结  Laravel如何处理CORS跨域请求?(配置示例)  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何彻底卸载建站之星软件?  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  移动端脚本框架Hammer.js  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Android滚轮选择时间控件使用详解  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  教你用AI润色文章,让你的文字表达更专业  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel怎么调用外部API_Laravel Http Client客户端使用  如何用腾讯建站主机快速创建免费网站?  深入理解Android中的xmlns:tools属性  免费网站制作appp,免费制作app哪个平台好?  EditPlus中的正则表达式实战(5)  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel如何实现API版本控制_Laravel版本化API设计方案  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel如何创建自定义Artisan命令?(代码示例)  Python并发异常传播_错误处理解析【教程】  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何制作一个表白网站视频,关于勇敢表白的小标题?  简单实现Android文件上传  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤