一、web.xml配置
我们都知道java ee的项目启动的第一件事就是读取web.xml,spring mvc 的web.xml我在上一篇文章中也做了详细讲解,不懂的可以回头看看,讲解的这个项目源码我也会放到github上,也可以去那里看看,这里就不做介绍了。
web.xml 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<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 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<!-- 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 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<!-- 控制器扫描 --> <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包下)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
common | annotation | @interface now : 插入|更新数据的日期注解。 @interface uuid :插入数据的uuid注解。 controller | externalcontroller. class :核心控制器,拦截所有请求,异常处理,跨域设置等功能。 dao | 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文件夹下)
1
2
3
4
5
6
|
common | dao | studentdao.xml :对应common.dao.studentdao接口。 other | dao | studentextdao.xml :对应other.dao.studentextdao接口。 |
五、功能演示
1、token校验
这里的token我写死在代码里了,123456表示校验成功。我们先用插入数据接口测试一下,传个错误的token,如下图:
授权token校验
2、请求参数校验
我们来看看插入数据接口还需要校验哪些值。
1
2
3
4
5
6
7
|
// 校验请求参数 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、分页查询
先来看一下代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
// 校验请求参数 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,,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.jianshu.com/p/f32c58b683fe