SSM框架整合之环境配置部分
学习完了Spring、SpringMVC、Mybatis框架,我们就可以尝试系统将三者进行整合。整合并不复杂,我们只需要实现最基础的配置,即可轻松的掌握SSM框架是如何实际项目中使用的。
基于上一篇博文:maven起步,我们应该知道了如何搭建maven项目,那么在此基础上,手把手教你搭建Spring、SpringMVC、Mybatis框架的环境。
源码请 点击这里 前往我的GitHub。
关于项目
项目环境
项目框架:后端:spring+mybatis+springmvc; 前端:bootstrap+Font Awesome图标集
测试环境:IDEA+tomcat7+mysql5.7+jdk8+maven
数据库名称:ssm
项目功能
1. 用户登录
2. 客户信息的增、删、改、查
3. 客户信息的列表展示和分页查询功能
项目结构
备注
如上这是一个标准的maven项目(对maven项目的搭建有不懂的可以查看我的博文:maven起步
img: 放了一些README.md文档所需要得图片,没有实际意义。
controller: web层,存放springmvc的相关控制器类。
mapper: 存放接口和映射文件。因为本项目采用了mybatis的接口开发,所以需要将接口和映射文件放在同一目录下,并且名称相同。
pojo: 存放Java的实体类
service: 业务层,用于存放一些业务层代码。
不要奇怪为什么没有出现Dao层,因为本项目相对简单,并没有多复杂的逻辑,所以也就必要再写一个Dao层进行扩展。
resources: 是maven项目存放配置文件的根目录,在本例中包含两个子文件夹:
resource
、spring
。前者是存放一些如logback.properties
的配置文件;后者是存放spring的配置文件(spring和springmvc)。my.sql: 存放了关于项目数据库创建和表创建的SQL语句。
fonts: 存放一些字体的配置文件。为了页面的美感,我们采用了Awesome图标集。
lib: 包含了项目中用到的一些前端类库。
page: 包含所有前端页面。
整合思路
继上一篇博文:Spring MVC起步其实我们已经了解了如何整合Spring和Spring MVC框架。那么,接下来我们就需要了解如何在此基础上整合Mybatis框架。
首先须知Mybatis框架是一个持久层框架,而Spring MVC是WEB层框架,Spring框架则充当着业务层的角色。那么将三者联系起来正好组成了web--service--dao
的三层架构体系。那么整合思路就如下所示了:
- 整合dao(即mapper),实现Mybatis和Spring的整合
- 整合service,由Spring管理service接口,在service中可以调用dao(mapper)
- 整合web(controller),实现Spring MVC和Spring的整合,在controller中调用service
jar依赖
junit
junit
4.11
ch.qos.logback
logback-classic
1.1.1
mysql
mysql-connector-java
5.1.37
runtime
c3p0
c3p0
0.9.1.2
org.mybatis
mybatis
3.3.0
org.mybatis
mybatis-spring
1.2.3
jstl
jstl
1.2
com.fasterxml.jackson.core
jackson-databind
2.5.4
javax.servlet
javax.servlet-api
3.1.0
org.springframework
spring-core
4.1.7.RELEASE
org.springframework
spring-beans
4.1.7.RELEASE
org.springframework
spring-context
4.1.7.RELEASE
org.springframework
spring-jdbc
4.1.7.RELEASE
org.springframework
spring-tx
4.1.7.RELEASE
org.springframework
spring-web
4.1.7.RELEASE
org.springframework
spring-webmvc
4.1.7.RELEASE
org.springframework
spring-test
4.1.7.RELEASE
以上是SSM框架最基本的依赖配置,很多时候项目中的报错是因为jar包冲突,为避免尽量采用同一版本的jar依赖。
注: 因为本项目使用的是IDEA,我们还需要在pom.xml中写入以下配置,以便IDEA能够检测到maven工程非resources目录下的配置文件
ssm
${basedir}/src/main/java
**/*.properties
**/*.xml
${basedir}/src/main/resources
XML配置文件
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_paging?useUnicode=true&characterEncoding=UTF-8
jdbc.username=用户名
jdbc.password=密码
把数据库信息单独提取到一个文件中,在XML中先使用
加载配置文件,然后使用${jdbc.xx}
的格式调用即可。
注意:在jdbc.url属性中对应的数据库链接要规定字符编码为UTF-8,因为我遇到的情况就是我在创建数据库和表的时候都指定了字符集,但是前台保存进来的数据还是会乱码,就是项目在链接数据库时没有指定字符编码的原因
web.xml
Archetype Created Web Application
/WEB-INF/index.jsp
CharacterEncoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncoding
/*
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:spring/beans.xml
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/springmvc.xml
dispatcherServlet
*.do
在web.xml
中的配置主要是三方面:
- 配置Spring的字符编码过滤器:
CharacterEncodingFilter
(防止request请求中文乱码)。 - 配置Spring的servlet监听器:
ContextLoaderListener
,告诉Spring需要加载那哪些配置文件来完成Spring的上下文。配置文件通过contextConfigLocation
指定。 - 配置Spring MVC的前端控制器(所有的request请求都会先经过这个前端控制器)。
beans.xml
备注:
本例中beans.xml
主要配置两块内容:1.连接池;2.Mybatis-Spring的配置
(当然可能这并不很标准,例如一些事物管理器,在这里我并没有配置;同样,你还可以将相关的Mybatis的配置提取出来,只要在最后web.xml
中加载这个配置文件就可以了。
SqlSessionFactoryBean
Spring框架简化数据库访问的方式之一就是管理数据库连接的声明周期和ORM框架的Session,以确保他们正常的打开和关闭。而在mybatis-spring中,SqlSessionFactoryBean实现了Spring的FactoryBean接口,用于创建SqlSessionFactory
。
-
dataSource
是必要的配置,上面我们仅仅是写了数据源配置,接下来的数据库访问对象肯定要使用这个数据源来获取链接对象,所以必须指定数据源。 -
typeAliases
则是启用别名配置,typeAliasesPackage
则会为pojo
包下的所有类对象都配置别名,当我们在对应的XML映射中指定ResultType
等时,就可以直接写pojo的类名,而不需要写全限定名。 -
mapperLocations
: 用于指定Mapper的XML文件位置(对于那种Mapper接口和XML配置同名且在同一个配置文件夹下,Mybatis其实会根据Mapper的Class文件自动找对应的XML配置文件,但是这里我建议写上)。 -
configLocation
: 用于指定mybatis的配置文件位置,因为本项目中并没有涉及太多复杂的逻辑,所以这里我就没有特意配置mybatis的config。
MapperScannerConfigurer
在了解MapperScannerConfigurer
之前我们需要了解一下MapperFactoryBean
,Mybatis-Spring提供了一个动态代理的实现:MapperFactoryBean
,他能实现将映射器接口(因为代理创建在运行环境中,那么指定的映射器必须是接口而不是实现类)直接注入到service的Bean中。这样通过代理对象去创建编写数据访问对象,从而代替SqlSessionTepmlate
等工具。
但是在Mybatis-Spring中还提供了一个转换器MapperScannerConfigurer
,它会查找类路径下的映射器(接口)并自动将他们创建成MapperFactoryBean
。通过将接口转换成Spring容器中的Bean,在Service层直接注入接口即可,这样大大简化了Dao层实例的编写。
basePackage
正是指定接口的位置。
注意我们这里并不需要指定SqlSessionFactory
(即我们注释掉的部分),因为使用MapperScannerConfigurer
会创建MapperFactoryBean
后自动装配(XML配置)。但是如果存在多个dataSource
,该自动装配可能就会失效,这时我们必须使用sqlSessionFacoryBeanName
来指定引用哪个bean
。
在beans.xml
配置阶段算是基本告一段落,我们回想一下:在没有使用Mybatis前我们使用Spring提供的JDBC模板来访问数据库,我们发现这种方式代码量特别大,而且于Java代码的耦合性也比较大,Mybatis则正好弥补了这些缺点,它使用的XML配置更加的小巧方便且支持原生SQL的编写。
Mybatis-Spring提供了移动动态代理的方式来代替手工的SqlSessionTemplate
编写数据库访问对象,我们只需要编写一个接口,通过在Mapper对应的XML中直接写SQL就可以进行数据库访问。当然我们必须配置SqlSessionFactoryBean
和MapperScannerConfigurer
。
springmvc.xml
在博文初识Spring MVC我们已经对SpringMVC有了一定的了解。那么在这里我们回顾一下SpringMVC的架构设计:
那么SpringMVC的XML无非就是:
- 配置SpringMVC前端控制器。
- 配置SpringMVC的基本控制器(处理请求的Spring组件)。
- 配置视图解析器。
所以:
- 首先在
web.xml
中配置SpringMVC的前端控制器:DispatcherServlet
。 - 在
springmvc.xml
中配置SpringMVC的基本控制器:
(注解驱动方式)。 - 开启注解扫描:
,主要扫描Controller层的注解(因为SpringMVC是web层框架)。 - 配置SpringMVC的视图解析器:
InternalResourceViewResolver
,用于当Controller处理完请求后将处理后的数据结果返回给视图层(JSP等)。
配置pojo和sql
pojo
在项目pojo
文件夹下创建User.java
和Customer.java
以及PageBean.java
1.User
//用户id
private int uid;
//用户登录名
private String username;
//用户密码
private String password;
...
getter/setter方法省略
2.Customer
//客户的id
private int c_id;
//客户的姓名
private String c_name;
//客户的电话
private String c_telephone;
//客户的住址
private String c_address;
//客户备注
private String c_remark;
...
getter/setter方法省略
3.PageBean
PageBean
为实现分页疯转给的JavaBean,详细字段属性请查看注释。
public class PageBean implements Serializable {
//当前页
private int pageCode;
//总页数=总条数/每页显示的条数
private int totalPage;
//总记录数
private int totalCount;
//每页显示的记录条数
private int pageSize;
//每页显示的数据
private List beanList;
}
这里用了自定义泛型类
就是实现由后台决定这个分页Bean要去封装那种类型的数据,我们调用时传入类型就会封装什么类型数据。比如我们需要对Customer分页,在调用这个类是就写new PageBean
。那么数据就会强制绑定为这个Customer
类的数据。
sql
创建数据库并编写项目所需要的表结构,写入测试数据。
create database ssm character set utf8;
use ssm;
create table user(
uid int primary key auto_increment,
username varchar(100),
password varchar(100)
) default charset = utf8;
create table customer(
c_id int primary key auto_increment,
c_name varchar(100),
c_telephone varchar(100),
c_address varchar(100),
c_remark varchar(100)
) default charset = utf8;
# 插入数据
insert into user values(1,'admin','admin');
insert into customer values(1,'涂陌','123456789','你猜','不想写备注');
insert into customer values(2,'逗瓜','123456789','你猜','不想写备注');
insert into customer values(3,'愤青','123456789','你猜','不想写备注');
insert into customer values(4,'咸鱼','123456789','你猜','不想写备注');
insert into customer values(5,'小白','123456789','你猜','不想写备注');
insert into customer values(6,'菜鸡','123456789','你猜','不想写备注');
综上
到目前为止我们已经完成了Spring、SpringMVC、Mybatis的基本配置,并创建了项目所需的实体类以及数据库表。
最后我们需要将该项目部署到Tomcat服务器上。如果配置正确,那么在浏览器上回弹出index页面。
交流
如果大家有兴趣,欢迎大家加入我的Java交流群:671017003 ,一起交流学习Java技术。博主目前一直在自学JAVA中,技术有限,如果可以,会尽力给大家提供一些帮助,或是一些学习方法,当然群里的大佬都会积极给新手答疑的。所以,别犹豫,快来加入我们吧!
联系
If you have some questions after you see this article, you can contact me or you can find some info by clicking these links.
- Blog@TyCoding's blog
- GitHub@TyCoding
- ZhiHu@TyCoding