亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Spring MVC 整合 SSM(上)

1. 前言

本節課程將和大家講解在 Spring MVC 項目中如何集成 MyBatisMybatisSpring MVC 項目提供了數據庫訪問能力,通過本次課程,你需要重點掌握集成的流程。本節課程通過一個登錄小案例引出對 MyBatis 的使用。

2. 集成流程

要把 MyBatis 集成到 Spring MVC 項目中,首先要做的第一件事情,便是添加 MyBatis 依賴包。僅僅添加 MyBatis 依賴包還不夠 ,因為 Spring MVC 并不直接支持 MyBatis,所以,需要借助于第三方的 mybatis-spring 插件包充當 MyBatisSpring MVC 之間的橋梁。

既然要連接到數據庫,數據源是不能少的,本節課程使用 DBCP 做數據庫連接池,使用 MySql 做臺臺數據存儲系統。

2.1 添加依賴包

打開項目的 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 依賴包。

2.2 注冊組件

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 文件。

圖片描述

3. 登錄功能

做好了前面的基礎配置后,現在實現登錄功能。

登錄功能的業務描述很簡單:登錄者輸入個人的用戶名和密碼,發送請求到服務器,由服務器端的控制器從數據庫中檢查是否存在此登錄者的信息。

所以,在完成登錄功能之前,先在 MySQL 數據庫中創建一張 user 表:

圖片描述

3.1 創建登錄頁面

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

3.2 創建映射器接口

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=#{userLoginName}
</select>
</mapper>

Tips: 建議大家使用 MyBatis 時,SQL 語句保存在 XML 文件中。SQL 語句放置在接口之上,SQL 語法和 JAVA 語法混合在一起,不便于維護。XML 文件的命名和位置最好采用官方建議的,如此,不用再做過多設置,MyBatis 就可以找到 XML 文件。

3.3 測試

創建處理登錄請求的控制器:

@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";
}

打開瀏覽器,進入登錄頁面。

圖片描述

點擊登錄后,進入控制器,驗證當前登錄者的身份,驗證通過,進入成功頁面,驗證不通過,進入失敗頁面。

3. 小結

本章節和大家一起講解了在 Spring MVC 項目中如何使用 MyBatis JDBC 框架。整個過程和單獨使用 MyBatis 沒有什么太多不同。差異在于,需要引入一個中間模塊,作為 MyBatis 和 Spring MVC 之間的橋梁。 引入的中間模塊提供有專用于 Sprig MVC 項目的 2 大組件:

  • SqlSessionFactoryBean;
  • MapperScannerConfigurer。

利用這 2 大組件便能在 Spring MVC 中構建起和 MyBatis 核心模塊之間的連接。