java mysql 操作 封装_java整合crud和分页插件操作mysql

18942cd0eff1934e8a6acfceba43b5b4.png

这篇文章主要介绍了Spring mvc整合mybatis(crud+分页插件)操作mysql的步骤详解,需要的朋友可以参考下

一、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,如下图:

ef1edfe6ab4b2a174c8d4536deb9fe69.png

授权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字段试一下:

061b25336a8e791e33061aaaf6b7fa80.png

请求字段校验

3、插入数据

在插入数据之前我们先看看数据库里都有哪些数据:

7d9612fc330c6ed42bcaeabe6e44a766.png

初始化数据库中的值

从上图可以看出,数据库中没有任何数据。我们来执行下插入接口。

d30c2bf2e37f2539e6740d5696e2692e.png

测试插入接口

我们再来看下数据库:

9deafc844b3cf40839d11050a2ed8b99.png

调用插入接口后

数据库已经有数据了。

4、查询数据

根据上一条数据的ID查询

7b8a28771d16f485ef078be9df083789.png

调用查询接口

刚插入的数据我们也查询出来了。

5、更新数据

更新一下查询出来的数据:

2afecc48f2c119a694199c046ee97ac3.png

调用更新接口

然后我们再查询一次该条数据

a312fc38123359ed459a1f8e8fbe39fe.png

更新后再次查询

可以看到性别和年龄都更新了,并且更新日期也是最新的了。

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);

分页查询之前我们想要导入多一点测试数据。

805c6b1863d138e5a684e6af1302379b.png


分页前测试数据

可以看到数据库目前有十条测试数据,男生有六条,年龄分别为19~24。好了,我们开始调用分页查询接口:

c902392749b639844bcf4adf82b6f374.png

调用分页查询接口返回结果

格式化一下返回数据:

d527df8a73f428b56ec9c4b9a1361c5b.png

分页查询返回结果整理

这和我们直接查询数据库看到的一样。

7、删除数据

最后就是删除数据接口了,我们将第一条测试数据删除掉。

2a731697d67d96a12b2254d6abb08fc3.png

调用删除接口返回结果

然后我们在查询一下是否真的删除了。

8ae7515075ba97cfb3d27a42c2ab4640.png

删除后查询

数据已经被删除了。

最后附上项目源码:http://github.com/Qbian61/spring-mvc-mybatis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值