Spring MVC 整合 SSM(上)
本节课程将和大家讲解在
Spring MVC
项目中如何集成
MyBatis
。
Mybatis
为
Spring MVC
项目提供了数据库访问能力,通过本次课程,你需要重点掌握集成的流程。本节课程通过一个登录小案例引出对
MyBatis
的使用。
要把
MyBatis
集成到
Spring MVC
项目中,首先要做的第一件事情,便是添加
MyBatis
依赖包。仅仅添加
MyBatis
依赖包还不够 ,因为
Spring MVC
并不直接支持
MyBatis
,所以,需要借助于第三方的
mybatis-spring
插件包充当
MyBatis
和
Spring MVC
之间的桥梁。
既然要连接到数据库,数据源是不能少的,本节课程使用
DBCP
做数据库连接池,使用
MySql
做台台数据存储系统。
打开项目的
pom.xml
文件,在其中添加如下内容:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- 数据库驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.13.RELEASE</version>
<scope>compile</scope>
</dependency>
Tips:Spring MVC 连接数据库时,需要添加 spring-jdbc 依赖包。
MyBatis
依赖
2
个很重要的核心组件:
-
SqlSessionFactory:
创建与数据库的连接,用来创建管理
SqlSession
组件;
-
SqlSession:
提供相关的数据库操作方法。
为
Spring MVC
项目添加的
mybatis-spring
依赖包中,提供了 2 个类似的组件。打开项目中的
RootConfig
类文件,在文件中添加如下的组件配置信息:
@Bean
public DataSource dataSource() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://localhost:3306/mystus");
basicDataSource.setUsername("root");
basicDataSource.setPassword("abc123");
// 其它与数据库连接池有关的配置
return basicDataSource;
}
@Bean(name="sqlSessionFactory")
public SqlSessionFactoryBean SqlSessionFactory() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
//注入数据源组件
sqlSessionFactoryBean.setDataSource(this.dataSource());
//指定 MyBatis 主配置文件的位置
Resource configResource=new ClassPathResource("com/hm/config/mybatis-config.xml");
sqlSessionFactoryBean.setConfigLocation(configResource);
return sqlSessionFactoryBean;
}
@Bean
public MapperScannerConfigurer scannerConfigurer() {
//接口映射
MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer();
//依赖会话工厂
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
//指定扫描的 DAO 接口位置
mapperScannerConfigurer.setBasePackage("com.hm.web.dao");
return mapperScannerConfigurer;
}
解释一下上面的 3 个 Bean :
-
BasicDataSource:
DBCP 提供的数据源连接对象;
-
SqlSessionFactoryBean:
用来替代
MyBatis
中的
SqlSessionFactory
;
-
MapperScannerConfigurer:
用来指定
MyBatis
映射器的位置。
Tips:
Spring MVC
中集成
MyBatis
时,可以让
MyBatis
有自己独立的配置文件,也可以没有。但一般情况下,建议还是提供。如下面的代码。
Resource configResource=new ClassPathResource("com/hm/config/mybatis-config.xml");
sqlSessionFactoryBean.setConfigLocation(configResource);
所以,需要创建一个 mybatis-config.xml 文件。
做好了前面的基础配置后,现在实现登录功能。
登录功能的业务描述很简单:登录者输入个人的用户名和密码,发送请求到服务器,由服务器端的控制器从数据库中检查是否存在此登录者的信息。
所以,在完成登录功能之前,先在
MySQL
数据库中创建一张
user
表:
<h1>用户登录</h1>
<form action="user/login" method="post">
姓名:<input name="userLoginName" value="" type="text">
<br />
密码:<input name="userPassword" value="" type="password">
<br />
<input name="btnLogin" value="登录" type="submit">
<input name="btnRe" value="重置" type="reset">
</form>
Tips:
当使用者点击登录按钮,发送登录请求之前,可以在客户端使用 JS 验证数据格式的合法性。
既然是
OOP
编码,自然少不了构建用户类,此类的数据结构与用户表的表结构有对等关系。
public class User {
private Integer userId;
//登录名
private String userLoginName;
//真实姓名
private String userName;
private String userPassword;
}
MyBatis
是一个很有意思的地方,可以使用接口的方式映射对应的 SQL 语句,这个接口也叫映射器。
public interface UserMapper {
@Select("SELECT user_id userId,user_login_name userLoginName ,user_password userPassword
FROM user where user_login_name=#{userLoginName}")
public User getUser(String userLoginName);
}
SQL
语句可以使用
@select
等类似注解直接放置在映射器的方法之上。也可以把
SQL
语句存放在
XML
文件中。
如果
SQL
存放在
XML
中,官方文档有 2 点建议:
-
XML 的文件名最好保持和映射器接口同名,如
UserMapper.xml
;
-
文件建议放在
UserMapper
接口所在的包中。
MyBatis
能根据接口位置自动找到 XML 文件。
UserMapper.xml
内容如下面所示:
<mapper namespace="com.mk.web.dao.UserMapper">
<select id="getUser">
SELECT user_id userId,user_login_name userLoginName ,user_password userPassword
FROM user where user_login_name=
</select>
</mapper>
Tips:
建议大家使用 MyBatis 时,SQL 语句保存在 XML 文件中。SQL 语句放置在接口之上,SQL 语法和 JAVA 语法混合在一起,不便于维护。XML 文件的命名和位置最好采用官方建议的,如此,不用再做过多设置,MyBatis 就可以找到 XML 文件。
创建处理登录请求的控制器:
@Autowired
private UserMapper UserMapper;
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(User user,ModelMap map) {
String pwd=user.getUserPassword();
user= this.UserMapper.getUser(user.getUserLoginName());
if(user!=null) {
if (user.getUserPassword().equals(pwd)) {
map.addAttribute("loginUser", user);
return "index";
}
}
return "fail";
}
打开浏览器,进入登录页面。
点击登录后,进入控制器,验证当前登录者的身份,验证通过,进入成功页面,验证不通过,进入失败页面。
本章节和大家一起讲解了在 Spring MVC 项目中如何使用 MyBatis JDBC 框架。整个过程和单独使用 MyBatis 没有什么太多不同。差异在于,需要引入一个中间模块,作为 MyBatis 和 Spring MVC 之间的桥梁。 引入的中间模块提供有专用于 Sprig MVC 项目的 2 大组件:
-
SqlSessionFactoryBean;
-
MapperScannerConfigurer。
利用这 2 大组件便能在 Spring MVC 中构建起和 MyBatis 核心模块之间的连接。