SpringMVC-Mybatis-Maven项目整合
上次不知道为什么,把写好的系列文章都搞成一样了。结果,五篇文章,都变成了最后一篇文章。
悲剧,好吧,只好重新写了。
这系列文章写的是SpringMVC-Mybatis-Maven项目整合。说白了,其实就是写一个用maven构造的SpringMVC与Mybatis的demo项目。
既然是Maven项目,首先肯定看看pom.xml。
在看pom.xml之前,请自行构架一个空的maven项目。
然后打开我们的pom.xml文件。
好了。我们先看看所需要的jar包吧。
下面是maven的dependencies的截图,只需要在dependencies里面添加下面包就可以了。

看来,其实所需jar包也并不多。下面一个一个来分析。
junit,就是junit包,测试用的,这个包一般在构建maven项目的时候会自动包含。
spring-webmvc包,这个包,就是SpringMVC的包。似乎里面已经基本包含了SpringMVC所需的jar包了。
mybatis-spring包是mybatis与spring结合的包,因为使用maven来构建的项目,所以会自动把mybatis相关的包也包含进来。
aspectjweaver就是面向方面(面向切面)的包,虽然SpringMVC已经实现了aop面向方面,但是SpringMVC的aop也是基于这个包,所以必须导入。
javax.servlet-api,这个servlet的api,不用说了,你懂的。
mysql-connector-java是mysql的java驱动。
commons-dbcp-all这个是连接池。
cglib就是代理的包,通常aop都是通过代理来实现的。
jstl就是jstl的包,因为项目里面,视图层用的是jstl。
在这里,所需的jar包基本已经包含。
上一章稍微说了SpringMVC-Mybatis-Maven项目整合项目所需要的jar包,但是关是jar包还是不行的。
这章,我们看看项目的基本配置以及控制层吧。
web项目基本配置,首先肯定得看看web.xml。在这里,我这里项目的web.xml是这样子的。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<!DOCTYPE "-//Sun<web-app> <display-name>attg</display-name> <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></web-app> |
大概的意思就是配置了org.springframework.web.servlet.DispatcherServlet这个spring自带的servlet来接受所有*.do的请求。
而这个servlet的初始化参数,在classpath下面的xml文件中读取。这样子,项目启动的时候就会读取配置文件,来初始化spring自带servlet,让这个servlet来处理所有.do请求。
好吧,然后我们在resource下面,新建一个spring-servlet.xml,这是初始化住servlet的配置文件。
文件内容是:
|
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
|
<?xml="1.0"="UTF-8"?> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/tx <aop:aspectj-autoproxy/> <!-- <context:component-scan="me.idashu.attg" <!-- <context:annotation-config <!-- <bean="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" <bean="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property="viewClass" value="org.springframework.web.servlet.view.JstlView" <property="prefix"="/WEB-INF/jsp/" <property="suffix"=".jsp" </bean> </beans> |
<aop:aspectj-autoproxy/>就是关于aop的。
<context:component-scan base-package="me.idashu.attg" />配置说明要扫瞄哪些包,因为这里是用全注解的方式配置的。
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 配置会是spring自动注入。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
这个viewResolver,就是配置视图层。在这里使用的是jstl的视图。然后视图的前缀是/WEB-INF/jsp/,而且后缀是jsp。
配置这两个文件,SpringMVC就基本配置完,我们只需简单地新建一个controller,就可以处理请求了。

controller里面,要用@Controller注解来告诉系统,这个类是一个controller类。
然后@RequestMapping("/test")注解,就是告诉spring,这个方法,处理host/test.do的请求。
最后方法里面返回了一个“test”,就是调用了test视图。因为配置文件里面视图设置了前后缀,所以这里视图应该是/WEB-INF/jsp/test.jsp。也就是说,要有一个这样子的文件,否则系统会报错。
今天先接着上次项目整合来写。
上次说到了怎么配置控制层。
当我们配好了控制层,接着当然是配置我们的数据层了。
而我们的数据层,就是由我们的Mybatis来构成的。
上一次刚说完怎么来配置controller层,今天来看看怎么配置Mybatis。
Mybatis的配置,写在src下面的applicationContext.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
|
<!-- <bean="dataSource"="org.apache.commons.dbcp.BasicDataSource"> <property="driverClassName"="com.mysql.jdbc.Driver" <property="username"="root" <property="password"="" </bean> <!-- <bean="transactionManager"="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property="dataSource"="dataSource" </bean> <!-- <tx:annotation-driven <!-- <bean="sqlSessionFactory"="org.mybatis.spring.SqlSessionFactoryBean"> <property="dataSource"="dataSource" <property="typeAliasesPackage"="me.idashu.attg.domain" </bean> <!-- <bean="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property="basePackage"="me.idashu.attg.persistence" </bean> |
首先配的,当然是我们的数据可连接池。也就是dataSource,这里用的mysql数据库。
接下来下面几行,配置了transaction manager,也就是事务管理器。这里了事务是用注解的方式配置的。
然后sqlSessionFactory,就是我们mybatis的配置,忘记叫了叫什么了。。。me.idashu.attg.domain就是说,我们的domain在这个包的下面。
最后这里:
|
1
2
3
|
<bean="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property="basePackage"="me.idashu.attg.persistence"</bean> |
就是说,我们的mybatis的mapper,是写在me.idashu.attg.persistence这个包的下面,而且,这些mapper会自动注入。
就这样,mybatis的配置就完成了。
上次说到配置Mybatis,可是,单单是配置Mybatis还是不行的,我们还要用Mybatis来开发。
相信有Mybatis开发经验的人都知道,Mybatis开发时,我们需要编写mapper。
今天我们来看看怎么使用Mybatis。
还记得上次说到,我们的mybatis的mapper是写在me.idashu.attg.persistence这个包下面的,那么,mapper就下载这个下面吧。
下看看我们的接口,我在me.idashu.attg.persistence这个包下面,新建了一个UserMapper接口:
|
1
2
3
4
5
6
7
8
9
|
public void void User} |
这只是个接口,但是我们还要有具体的操作内容,所以,要在同一个包的下面,新建一个UserMapper.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
|
<mapper="me.idashu.attg.persistence.UserMapper"> <cache <insert="insertUser"="User"> INSERT user ( username, password ) VALUES ( #{username}, #{password} ) </insert> <update="updateUser"="User"> update username password WHERE </update> <select="getUser"="User"="User"> select </select> </mapper> |
这个xml文件,就是上面的那个接口的实现。这样子就可以把我们的mapper写好。
然后我们看看service层。mapper操作数据层,而我们的事务,是service层。下面是service的截图:

在service层的类中,用@Service来说明这个类是一个实体类,方便注入,然后
|
1
2
|
@Autowiredprivate |
就是为了注入刚才上面所写的mybatis的mapper。在下面,我们就可以直接使用接口定义的方法了。
那么@Transactional(rollbackFor=Exception.class)这段代码的作用呢,就是定义了一个事物,这个事务是在update方法里面,如果这个方法抛出异常,那么就会rollback。
如果要在controller层使用我们的service,直接注入就行了。好了,mybatis的配置也说完了。
前面的四篇文章,基本上已经把SpringMVC-Mybatis-Maven项目整合说清楚了,只需按照前面四篇文章来说的那样子配置,基本上都可以把这项目跑起来。
今天说说怎么在这个项目里面使用面向切面(AOP)吧。
其实面向切面的编程可以说是面向对象编程的一种补充吧。这种编程方法,可以解决一些相同的重复的事情。
在src下面新建me.idashu.attg.aop这个包。然后在包下,新建一个ControllerSelectorInterceptor类,写上下面代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@Aspectpublic @Before("execution(*) public Object[] HttpServletRequest2]; request.setAttribute("aop","ok"); System.out.println("before"); } @After("execution(*) public Object[] HttpServletRequest2]; String"aop"); System.out.println("after+aop); }} |
这样子,我们就配置好aop了。
@Aspect这个注解,就是说,这个类是一个切面,也就是用来处理相同的事情的一个类。
@Before("execution(* me.idashu.attg..*.*Controller.*Do(..,javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse))")这一句的意思就是在执行*Do()方法之前我要执行下面的doBefore方法。其实这里还有一些约束,就是这个*Do()方法,必须在me.idashu.attg这个包或者子包的下面,而且这个方法,在一个名叫*Controller的类里面。同时,这个方法的参数最后两个分别是javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse,也就是我们常用的request和response。
我这里的代码,其实就是说,在执行*Do()方法之前,先执行doBefore()方法。在这方法里面,先获取request,然后再里面放入一个名叫aop的变量。然后再执行完这个方法折后,程序会执行doAfter()方法。先获取request,然后冲request中取出aop变量,这样子我们就可以看到这两个方法有没有正确执行了。
好了,在这里,SpringMVC-Mybatis-Maven项目整合系列终于写完了,虽然水平确实不怎么样。但是希望对有兴趣的童鞋有点参考作用。
项目源码地址:SpringMVC-Mybatis-Maven项目整合源码
SpringMVC-Mybatis-Maven项目整合的更多相关文章
- spring springmvc mybatis maven 项目整合示例-导航页面
spring原理 实践解析-简单的helloworld spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包 spring原理案例-基本项目 ...
- Spring+SpringMVC+MyBatis+Maven框架整合
本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点 一.Maven需要引入的jar包 二.Spring与SpringMVC的配置分离 三.Sprin ...
- IntelliJ IDEA 创建Spring+SpringMVC+mybatis+maven项目
参考自:https://www.cnblogs.com/hackyo/p/6646051.html 第一步: 创建maven项目 输入项目名和工程id 选择maven 默认就可以了 刚开始时间比较长, ...
- springmvc+mybatis+maven项目框架搭建
项目的目录
- SSM Spring+SpringMVC+mybatis+maven+mysql环境搭建
SSM Spring+SpringMVC+mybatis+maven环境搭建 1.首先右键点击项目区空白处,选择new->other..在弹出框中输入maven,选择Maven Project. ...
- idea spring+springmvc+mybatis环境配置整合详解
idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2. ...
- Maven项目整合SSH框架
---------------------siwuxie095 Maven 项目整合 SSH 框架 创建 ...
- Maven项目整合Struts2框架
-------------------------siwuxie095 Maven 项目整合 Struts2 框架 1. ...
- spring Boot + MyBatis + Maven 项目,日志开启打印 sql
在 spring Boot + MyBatis + Maven 项目中,日志开启打印 sql 的最简单方法,就是在文件 application.properties 中新增: logging.leve ...
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
项目结构: 1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
随机推荐
- Cannot add task 'wrapper' as a task with that name already exists.
写gradle项目的运行模板脚本 直接执行gradle clean build会报错 将原本的: task wrapper(type: Wrapper) { gradleVersion = '4.10 ...
- 淘宝订单信息获取接口,淘宝订单信息获取API
在日常电商软件开发的工作中,我们经常会遇到需要淘宝的订单信息的场景,比如:打单.发货,又比如做BI工具等.这就需要用到淘宝订单信息获取接口.只有获取到淘宝订单信息,才能进行下一步工作. 目前这个接口是 ...
- powershell 常用插件
1. z 「z」这个 zsh 下常用的跳转工具,当频繁需要进入一个比较深的目录的时候,「z」这个插件会帮我们自动记录这个目录,之后我们只需要执行z [Directory]就可以快速跳转了 PowerS ...
- C++性能优化——能用array就不要用unordered_map作为查询表
unordered_map需要哈希值计算和表查询的开销,当key值为整数且连续,直接用数组作为查询表具有更高的效率. #include <iostream> #include <ch ...
- c程序设计语言 by K&R(五)UNIX系统接口
一.文件描述符 在unix操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统的文件,因此,所有的输入.输出都要通过读/写文件来完成.也就是说,通过一个单一的接口就可以处理外围设备和程序之 ...
- 超轻量级、支持插件的 .NET 网络通信框架
前言 给大家推荐一个轻量级的.支持插件的综合网络通信库:TouchSocket. TouchSocket 的基础通信功能包括 TCP.UDP.SSL.RPC 和 HTTP.其中,HTTP 服务器支持 ...
- Angular 18+ 高级教程 – 学以致用
前言 读这么多原理,到底为了什么?真实项目中真的会用得到吗? 你正在疑惑 "知识的力量" 吗? 本篇会给一个非常非常好的案例,让你感悟 -- 知识如何用于实战. 记住,我的目的是让 ...
- USB和CAN都是用差分信号来传输数据,为什么CAN的传输距离能比USB远那么多?
USB和CAN的区别 今天在看USB项目设计实例的时候,突然想到一个问题,从而引发了一些思考.经过思考加上查阅资料,写出了这一篇文章作为记录. 问题 USB和CAN都是用两条线作为差分线以差分信号 ...
- Nuxt.js 应用中的 page:start 钩子详解
title: Nuxt.js 应用中的 page:start 钩子详解 date: 2024/10/8 updated: 2024/10/8 author: cmdragon excerpt: pag ...
- PHP中几种常见的开发模式
设计模式 单例模式 $_instance必须声明为静态的私有变量 构造函数和析构函数必须声明为私有,防止外部程序new 类从而失去单例模式的意义 getInstance()方法必须设置为公有的,必须 ...