MyBatis-Spring 會幫助你將 MyBatis 代碼無縫地整合到 Spring 中。 使用這個類庫中的類, Spring 將會加載必要的MyBatis工廠類和 session 類。 這個類庫也提供一個簡單的方式來注入MyBatis數據映射器和SqlSession到業務層的bean中。 而且它也會處理事務, 翻譯MyBatis的異常到Spring的 DataAccessException異常(數據訪問異常,譯者注)中。最終它並不會依賴於MyBatis,Spring或MyBatis-Spring來構建應用程序代碼。更多內容請查看官網幫助。
一、 使用Maven創建一個Web項目
為了完成Spring4.x與MyBatis3.X的整合更加順利,先回顧在Maven環境下創建Web項目並使用MyBatis3.X,第一、二點內容多數是回顧過去的內容 。完成第一階段與第二階段的項目結構如下所示:
下載階段一、階段二、階段散、階段四示例
到Linux公社資源站下載:
------------------------------------------分割線------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2016年資料/7月/7日/Spring整合MyBatis(Maven+MySQL)/
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
------------------------------------------分割線------------------------------------------
MyBatis入門學習教程 http://www.linuxidc.com/Linux/2015-02/113771.htm
Java實戰應用:Mybatis實現單表的增刪改 http://www.linuxidc.com/Linux/2014-06/103456.htm
[Java][Mybatis]物理分頁實現 http://www.linuxidc.com/Linux/2014-04/99889.htm
Mybatis快速入門教程 http://www.linuxidc.com/Linux/2013-06/85762.htm
Mybatis的關於批量數據操作的測試 http://www.linuxidc.com/Linux/2012-05/60863.htm
Mybatis中對List<Object> 對象List的批處理插入操作 http://www.linuxidc.com/Linux/2014-02/96916.htm
1.2、點擊“File”->“New”->"Other"->輸入“Maven”,新建一個“Maven Project”,如下圖所示:
1.2、請勾選“Create a simple project”,創建一個簡單的項目,不使用模板。也可以使用模板,選擇WebApp,不過這裡就不應該勾選。如下圖所示:
1.3、填寫好包名、項目名,選擇打包類型為:war,如下圖所示:
1.4、項目創建好後可能會發現有錯誤,選擇項目,右鍵“屬性properties”->"層面Project Facets"->"Java"修改版本號為1.7,默認為1.5;點擊“Ok”保存後關閉。如下圖所示:
1.5、重復上一個步驟,反勾Dynamic Web Module,將項目暫時變成非Web項目。點擊“Ok”保存後關閉。
1.6、重復上一步驟,再進層面屬性,勾選“Dynamic Web Module”選擇Version為3.0。點擊左下角的超鏈接“Further Configuration available...“。
1.7、勾選“Generate web.xml deployment descriptor”生成web.xml部署描述文件。點擊“Ok”保存後關閉。
1.8、將生成的WebContent目錄下的兩個文件夾“META-INF”與“WEB-INF”復制到src/main/webapp目錄下。
1.9、刪除WebContent目錄。
1.10、刪除後會發現項目的pom.xml文件報錯,是因為找不到指定位置的web.xml文件引起的。再進入項目的屬性,選擇“Deployment Assembly”項目部署項,刪除“src/test/java”、“src/test/resources”與“WebContent”目錄,因為這三項不需要部署出去。
1.11、點擊“Add添加”後選擇“Folder文件夾”為項目的最終部署結果指定Web內容根文件夾。
1.12、選擇src\main\webapp目錄為目標目錄,點擊“Finish完成”保存並關閉。
1.13、如果此時項目還報錯,隨便修改pom.xml文件後保存後應該錯誤會消失。
1.14、在src\main\webapp目錄下新建一個index.jsp文件,作為測試使用。
1.15、新建完成後發現有錯誤,是因為沒有JavaEE Server Runtime引起的,在項目上右鍵屬性選擇“Java Build Path”項,點擊“Add Library...”添加引用。
1.16、選擇Server Runtime項,點擊“Next下一步”,再選擇“Apache Tomcat v7.0”,這裡可能要根據自己的運行環境選擇了,如果還沒Server,則應該先整合Tomcat。
1.17、在index.jsp文件中寫上測試內容。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello World!</title> </head> <body> Hello World! <p> <%=new java.util.Date().toLocaleString() %> </p> </body> </html>
1.18、在項目上右鍵選擇“Run as”-> “Run on Server”運行項目,運行結果如下。
二、使用MyBatis完成MySQL數據庫訪問
2.1、添加依賴
要完成使用MyBatis訪問MySQL數據庫,需要添加一些依賴包,包含MyBatis3,連接驅動,JUnit,Log4j2等。可以去共享資源庫中搜索,第一個網站地址是:http://mvnrepository.com/, 這裡以搜索連接驅動為示例,搜索後的結果有5.xx版許多,也有6.xx版,但不建議使用6.xx版,因為MyBatis3不支持。
我們選擇5.0版中的5.1.38,將Maven的依賴信息復制到項目中的pom.xml的dependencies結點下
當然也可去另外一個網站:http://search.maven.org/,這裡以log4j為例子搜索如下:
有一些依賴也可以直接去官網查找,如MyBatis3:
項目的pom.xml文件如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhangguo</groupId> <artifactId>Spring061</artifactId> <version>0.0.1</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
引用結果:
如果在網速不穩定的情況下,下載包很有可能失敗,可以試試強制項目重新下載;可以使用下載工具將jar包下載後手復制到本地資源庫中。
2.2、准備數據
打開MySQL數據庫,創建一個表,這裡以booktypes表為例。
sql腳本如下:
/* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50536 Source Host : localhost:3306 Source Database : db2 Target Server Type : MYSQL Target Server Version : 50536 File Encoding : 65001 Date: 2016-07-04 10:49:56 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `booktypes` -- ---------------------------- DROP TABLE IF EXISTS `booktypes`; CREATE TABLE `booktypes` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '類型編號', `typeName` varchar(100) NOT NULL COMMENT '類型名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of booktypes -- ---------------------------- INSERT INTO `booktypes` VALUES ('1', '計算機軟件開發'); INSERT INTO `booktypes` VALUES ('2', '計算機網絡工程'); INSERT INTO `booktypes` VALUES ('3', '神話小說'); INSERT INTO `booktypes` VALUES ('4', '科幻小說'); INSERT INTO `booktypes` VALUES ('5', '外語'); INSERT INTO `booktypes` VALUES ('6', '測試類型'); INSERT INTO `booktypes` VALUES ('7', '91'); INSERT INTO `booktypes` VALUES ('8', '92'); INSERT INTO `booktypes` VALUES ('9', '93'); INSERT INTO `booktypes` VALUES ('91', '建築設計'); INSERT INTO `booktypes` VALUES ('92', '工業設計'); INSERT INTO `booktypes` VALUES ('93', '船舶制造');
2.3、創建java Bean
在包com.zhangguo.Spring61.entities下添加類BookType類型。
package com.zhangguo.Spring61.entities; /** * 圖書類型 * */ public class BookType { /** * 編號 */ private int id; /** * 類型名 */ private String typeName; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } }
2.4、創建實例與表的映射文件
這裡用接口+XML的形式完成,BookType數據訪問接口如下:
package com.zhangguo.Spring61.mapping; import java.util.List; import com.zhangguo.Spring61.entities.BookType; /** * 圖書類型數據訪問接口 * */ public interface BookTypeDAO { /* * 獲得所有圖書類型 */ public List<BookType> getAllBookTypes(); }
BookTypeMapper.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--命名空間應該是對應接口的包名+類名 --> <mapper namespace="com.zhangguo.Spring61.mapping.BookTypeDAO"> <!--id應該是接口中的方法,結果類型如沒有配置別名則應該使用全名稱 --> <select id="getAllBookTypes" resultType="BookType"> select id,typeName from booktypes </select> </mapper>
2.5、創建MyBatisCfg.xml文件
MyBatisCfg.xml文件用於配置MyBatis的運行環境,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 指定數據庫連接信息的位置 --> <properties resource="db.properties"></properties> <!--類型別名,默認引入com.zhangguo.Spring61.entities下的所有類 --> <typeAliases> <package name="com.zhangguo.Spring61.entities"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <!--引入映射文件 --> <mapper resource="com/zhangguo/Spring61/mapping/BookTypeMapper.xml" /> </mappers> </configuration>
因為配置中依賴了db.properties文件,該文件用於指定數據庫的連接信息,內容如下:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/db2 username=root password=root
2.6、實現數據訪問功能
為了更加方便的復用MyBatis實現數據訪問不需要頻繁的創建SQLSessionFactory和SQLSession對象,封裝一個MyBatisUtil工具類如下:
package com.zhangguo.Spring61.dao; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public abstract class MyBatisUtil { //GC不理static private static SqlSessionFactory factory=null; public static SqlSessionFactory getSqlSessionFactory(){ if(factory==null){ // 獲得環境配置文件流 InputStream config = MyBatisUtil.class.getClassLoader().getResourceAsStream("MyBatisCfg.xml"); // 創建sql會話工廠 factory = new SqlSessionFactoryBuilder().build(config); } return factory; } //獲得會話 public static SqlSession getSession(){ return getSqlSessionFactory().openSession(true); } /** * 獲得得sql會話 * @param isAutoCommit 是否自動提交,如果為false則需要sqlSession.commit();rollback(); * @return sql會話 */ public static SqlSession getSession(boolean isAutoCommit){ return getSqlSessionFactory().openSession(isAutoCommit); } }
創建類BookTypeDAOImpl實現接口BookTypeDAO,這裡要通過MyBatis實現數據訪問功能,內容如下:
package com.zhangguo.Spring61.dao; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.zhangguo.Spring61.entities.BookType; import com.zhangguo.Spring61.mapping.BookTypeDAO; /** * 實現圖書類型數據訪問 * */ public class BookTypeDAOImpl implements BookTypeDAO { @Override public List<BookType> getAllBookTypes() { //獲得會話對象 SqlSession session=MyBatisUtil.getSession(); try { //通過MyBatis實現接口BookTypeDAO,返回實例 BookTypeDAO bookTypeDAO=session.getMapper(BookTypeDAO.class); return bookTypeDAO.getAllBookTypes(); } finally { session.close(); } } }
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-07/132997p2.htm