Spring整合MyBatis(Maven+MySQL)圖文教程詳解
一、 使用Maven創(chuàng)建一個(gè)Web項(xiàng)目
為了完成Spring4.x與MyBatis3.X的整合更加順利,先回顧在Maven環(huán)境下創(chuàng)建Web項(xiàng)目并使用MyBatis3.X,第一、二點(diǎn)內(nèi)容多數(shù)是回顧過去的內(nèi)容 。
1.2、點(diǎn)擊“File”->“New”->"Other"->輸入“Maven”,新建一個(gè)“Maven Project”,如下圖所示:

1.2、請勾選“Create a simple project”,創(chuàng)建一個(gè)簡單的項(xiàng)目,不使用模板。也可以使用模板,選擇WebApp,不過這里就不應(yīng)該勾選。如下圖所示:

1.3、填寫好包名、項(xiàng)目名,選擇打包類型為:war,如下圖所示:

1.4、項(xiàng)目創(chuàng)建好后可能會(huì)發(fā)現(xiàn)有錯(cuò)誤,選擇項(xiàng)目,右鍵“屬性properties”->"層面Project Facets"->"Java"修改版本號為1.7,默認(rèn)為1.5;點(diǎn)擊“Ok”保存后關(guān)閉。如下圖所示:

1.5、重復(fù)上一個(gè)步驟,反勾Dynamic Web Module,將項(xiàng)目暫時(shí)變成非Web項(xiàng)目。點(diǎn)擊“Ok”保存后關(guān)閉。

1.6、重復(fù)上一步驟,再進(jìn)層面屬性,勾選“Dynamic Web Module”選擇Version為3.0。點(diǎn)擊左下角的超鏈接“Further Configuration available...“。

1.7、勾選“Generate web.xml deployment descriptor”生成web.xml部署描述文件。點(diǎn)擊“Ok”保存后關(guān)閉。

1.8、將生成的WebContent目錄下的兩個(gè)文件夾“META-INF”與“WEB-INF”復(fù)制到src/main/webapp目錄下。

1.9、刪除WebContent目錄。

1.10、刪除后會(huì)發(fā)現(xiàn)項(xiàng)目的pom.xml文件報(bào)錯(cuò),是因?yàn)檎也坏街付ㄎ恢玫膚eb.xml文件引起的。再進(jìn)入項(xiàng)目的屬性,選擇“Deployment Assembly”項(xiàng)目部署項(xiàng),刪除“src/test/java”、“src/test/resources”與“WebContent”目錄,因?yàn)檫@三項(xiàng)不需要部署出去。

1.11、點(diǎn)擊“Add添加”后選擇“Folder文件夾”為項(xiàng)目的最終部署結(jié)果指定Web內(nèi)容根文件夾。

1.12、選擇src\main\webapp目錄為目標(biāo)目錄,點(diǎn)擊“Finish完成”保存并關(guān)閉。

1.13、如果此時(shí)項(xiàng)目還報(bào)錯(cuò),隨便修改pom.xml文件后保存后應(yīng)該錯(cuò)誤會(huì)消失。

1.14、在src\main\webapp目錄下新建一個(gè)index.jsp文件,作為測試使用。

1.15、新建完成后發(fā)現(xiàn)有錯(cuò)誤,是因?yàn)闆]有JavaEE Server Runtime引起的,在項(xiàng)目上右鍵屬性選擇“Java Build Path”項(xiàng),點(diǎn)擊“Add Library...”添加引用。

1.16、選擇Server Runtime項(xiàng),點(diǎn)擊“Next下一步”,再選擇“Apache Tomcat v7.0”,這里可能要根據(jù)自己的運(yùn)行環(huán)境選擇了,如果還沒Server,則應(yīng)該先整合Tomcat。


1.17、在index.jsp文件中寫上測試內(nèi)容。
<%@ 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、在項(xiàng)目上右鍵選擇“Run as”-> “Run on Server”運(yùn)行項(xiàng)目,運(yùn)行結(jié)果如下。

二、使用MyBatis完成MySQL數(shù)據(jù)庫訪問
2.1、添加依賴
要完成使用MyBatis訪問MySQL數(shù)據(jù)庫,需要添加一些依賴包,包含MyBatis3,連接驅(qū)動(dòng),JUnit,Log4j2等??梢匀ス蚕碣Y源庫中搜索,第一個(gè)網(wǎng)站地址是:http://mvnrepository.com/, 這里以搜索連接驅(qū)動(dòng)為示例,搜索后的結(jié)果有5.xx版許多,也有6.xx版,但不建議使用6.xx版,因?yàn)镸yBatis3不支持。

我們選擇5.0版中的5.1.38,將Maven的依賴信息復(fù)制到項(xiàng)目中的pom.xml的dependencies結(jié)點(diǎn)下

當(dāng)然也可去另外一個(gè)網(wǎng)站:http://search.maven.org/,這里以log4j為例子搜索如下:

有一些依賴也可以直接去官網(wǎng)查找,如MyBatis3:

項(xiàng)目的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>
引用結(jié)果:

如果在網(wǎng)速不穩(wěn)定的情況下,下載包很有可能失敗,可以試試強(qiáng)制項(xiàng)目重新下載;可以使用下載工具將jar包下載后手復(fù)制到本地資源庫中。


2.2、準(zhǔn)備數(shù)據(jù)
打開MySQL數(shù)據(jù)庫,創(chuàng)建一個(gè)表,這里以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', '計(jì)算機(jī)軟件開發(fā)');
INSERT INTO `booktypes` VALUES ('2', '計(jì)算機(jī)網(wǎng)絡(luò)工程');
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', '建筑設(shè)計(jì)');
INSERT INTO `booktypes` VALUES ('92', '工業(yè)設(shè)計(jì)');
INSERT INTO `booktypes` VALUES ('93', '船舶制造');
2.3、創(chuàng)建java Bean
在包c(diǎn)om.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、創(chuàng)建實(shí)例與表的映射文件
這里用接口+XML的形式完成,BookType數(shù)據(jù)訪問接口如下:
package com.zhangguo.Spring61.mapping;
import java.util.List;
import com.zhangguo.Spring61.entities.BookType;
/**
* 圖書類型數(shù)據(jù)訪問接口
*
*/
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">
<!--命名空間應(yīng)該是對應(yīng)接口的包名+類名 -->
<mapper namespace="com.zhangguo.Spring61.mapping.BookTypeDAO">
<!--id應(yīng)該是接口中的方法,結(jié)果類型如沒有配置別名則應(yīng)該使用全名稱 -->
<select id="getAllBookTypes" resultType="BookType">
select id,typeName from booktypes
</select>
</mapper>
2.5、創(chuàng)建MyBatisCfg.xml文件
MyBatisCfg.xml文件用于配置MyBatis的運(yùn)行環(huán)境,內(nèi)容如下:
<?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>
<!-- 指定數(shù)據(jù)庫連接信息的位置 -->
<properties resource="db.properties"></properties>
<!--類型別名,默認(rèn)引入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>
因?yàn)榕渲弥幸蕾嚵薲b.properties文件,該文件用于指定數(shù)據(jù)庫的連接信息,內(nèi)容如下:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/db2 username=root password=root
2.6、實(shí)現(xiàn)數(shù)據(jù)訪問功能
為了更加方便的復(fù)用MyBatis實(shí)現(xiàn)數(shù)據(jù)訪問不需要頻繁的創(chuàng)建SQLSessionFactory和SQLSession對象,封裝一個(gè)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){
// 獲得環(huán)境配置文件流
InputStream config = MyBatisUtil.class.getClassLoader().getResourceAsStream("MyBatisCfg.xml");
// 創(chuàng)建sql會(huì)話工廠
factory = new SqlSessionFactoryBuilder().build(config);
}
return factory;
}
//獲得會(huì)話
public static SqlSession getSession(){
return getSqlSessionFactory().openSession(true);
}
/**
* 獲得得sql會(huì)話
* @param isAutoCommit 是否自動(dòng)提交,如果為false則需要sqlSession.commit();rollback();
* @return sql會(huì)話
*/
public static SqlSession getSession(boolean isAutoCommit){
return getSqlSessionFactory().openSession(isAutoCommit);
}
}
創(chuàng)建類BookTypeDAOImpl實(shí)現(xiàn)接口BookTypeDAO,這里要通過MyBatis實(shí)現(xiàn)數(shù)據(jù)訪問功能,內(nèi)容如下:
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;
/**
* 實(shí)現(xiàn)圖書類型數(shù)據(jù)訪問
*
*/
public class BookTypeDAOImpl implements BookTypeDAO {
@Override
public List<BookType> getAllBookTypes() {
//獲得會(huì)話對象
SqlSession session=MyBatisUtil.getSession();
try {
//通過MyBatis實(shí)現(xiàn)接口BookTypeDAO,返回實(shí)例
BookTypeDAO bookTypeDAO=session.getMapper(BookTypeDAO.class);
return bookTypeDAO.getAllBookTypes();
} finally {
session.close();
}
}
}
三、使用Spring4.X整合MyBatis3.X
以上所述是小編給大家介紹的Spring整合MyBatis(Maven+MySQL)圖文教程詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java使用fill()數(shù)組填充的實(shí)現(xiàn)
這篇文章主要介紹了Java使用fill()數(shù)組填充的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
簡單注解實(shí)現(xiàn)集群同步鎖(spring+redis+注解)
本文主要介紹了簡單注解實(shí)現(xiàn)集群同步鎖的步驟與方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
java Servlet 實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼圖片示例
這篇文章主要介紹了java Servlet 實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼圖片示例的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02
java~springboot~ibatis數(shù)組in查詢的實(shí)現(xiàn)方法
這篇文章主要介紹了java~springboot~ibatis數(shù)組in查詢的實(shí)現(xiàn)方法,需要的朋友可以參考下2018-09-09
解決SpringMVC接收不到ajaxPOST參數(shù)的問題
今天小編就為大家分享一篇解決SpringMVC接收不到ajaxPOST參數(shù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理方式
這篇文章主要介紹了java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

