Windows下Java+MyBatis框架+MySQL的開(kāi)發(fā)環(huán)境搭建教程
MyBatis是一個(gè)Java持久化框架,它通過(guò)XML描述符或注解把對(duì)象與存儲(chǔ)過(guò)程或SQL語(yǔ)句關(guān)聯(lián)起來(lái)。
MyBatis是在A(yíng)pache許可證 2.0下分發(fā)的自由軟件,是iBATIS 3.0的分支版本。其維護(hù)團(tuán)隊(duì)也包含iBATIS的初創(chuàng)成員。
與其他的對(duì)象關(guān)系映射框架不同,MyBatis并沒(méi)有將Java對(duì)象與數(shù)據(jù)庫(kù)表關(guān)聯(lián)起來(lái),而是將Java方法與SQL語(yǔ)句關(guān)聯(lián)。MyBatis允許用戶(hù)充分利用數(shù)據(jù)庫(kù)的各種功能,例如存儲(chǔ)過(guò)程、視圖、各種復(fù)雜的查詢(xún)以及某數(shù)據(jù)庫(kù)的專(zhuān)有特性。如果要對(duì)遺留數(shù)據(jù)庫(kù)、不規(guī)范的數(shù)據(jù)庫(kù)進(jìn)行操作,或者要完全控制SQL的執(zhí)行,MyBatis是一個(gè)不錯(cuò)的選擇。
與JDBC相比,MyBatis簡(jiǎn)化了相關(guān)代碼:SQL語(yǔ)句在一行代碼中就能執(zhí)行。MyBatis提供了一個(gè)映射引擎,聲明式的把SQL語(yǔ)句執(zhí)行結(jié)果與對(duì)象樹(shù)映射起來(lái)。通過(guò)使用一種內(nèi)建的類(lèi)XML表達(dá)式語(yǔ)言,或者使用Apache Velocity集成的插件,SQL語(yǔ)句可以被動(dòng)態(tài)的生成。
MyBatis與Spring Framework和Google Guice集成,這使開(kāi)發(fā)者免于依賴(lài)性問(wèn)題。
MyBatis支持聲明式數(shù)據(jù)緩存(declarative data caching)。當(dāng)一條SQL語(yǔ)句被標(biāo)記為“可緩存”后,首次執(zhí)行它時(shí)從數(shù)據(jù)庫(kù)獲取的所有數(shù)據(jù)會(huì)被存儲(chǔ)在一段高速緩存中,今后執(zhí)行這條語(yǔ)句時(shí)就會(huì)從高速緩存中讀取結(jié)果,而不是再次命中數(shù)據(jù)庫(kù)。MyBatis提供了默認(rèn)下基于Java HashMap的緩存實(shí)現(xiàn),以及用于與OSCache、Ehcache、Hazelcast和Memcached連接的默認(rèn)連接器。MyBatis還提供API供其他緩存實(shí)現(xiàn)使用。
要點(diǎn)
這段時(shí)間學(xué)習(xí)下來(lái),其實(shí)對(duì)Mybatis來(lái)說(shuō)主要的過(guò)程無(wú)法是以下幾步
1. 從XML配置文件中獲取SessionFactory,然后由SessionFactory產(chǎn)生相應(yīng)的Session。
2. 是用Session對(duì)象對(duì)業(yè)務(wù)數(shù)據(jù)完成相應(yīng)的CRUD操作(增刪改查)和相應(yīng)的事務(wù)控制。
3. 使用完畢后關(guān)閉相應(yīng)的Session,以免過(guò)度占用資源
4. 使用配置相應(yīng)的Mapper xml文件進(jìn)行業(yè)務(wù)實(shí)體的JavaBean與數(shù)據(jù)庫(kù)表之間做相應(yīng)的Map操作
戰(zhàn)前準(zhǔn)備:
1. 開(kāi)發(fā)環(huán)境Eclipse JavaEE IDE,JDK 1.6,數(shù)據(jù)庫(kù)mysql 5.5
2. 下載相應(yīng)Jar包,以備后用
mybatis-3.2.3.zip 解壓后拿出 mybatis-3.2.3.jar,=> 下載地址: http://code.google.com/p/mybatis/ (Mybatis核心包)
mybatis-generator-core-1.3.1.jar => 下載地址: http://code.google.com/p/mybatis/wiki/Generator (Mybatis自動(dòng)生成配置文件包)
mysql-connector-java-5.1.26-bin.jar => 下載地址:http://dev.mysql.com/downloads/connector/j/ (Mysql 的jdbc驅(qū)動(dòng)包)
搭建步驟
接下來(lái)大家可以再Eclipse下面建一個(gè)名為MybatisDemo的Java Project項(xiàng)目,按照如下圖中所示新建相應(yīng)的包結(jié)構(gòu)和文件夾結(jié)構(gòu),其中config與mapper分別為文件夾,
包david.mybatis.demo與包david.mybatis.model下分別存放相應(yīng)的demo運(yùn)行程序與Javabean對(duì)象,lib文件夾下存放剛剛下載的那幾個(gè)第三方j(luò)ar包。

建完下面的目錄,我們可以添加相應(yīng)的Jar包,如下圖


完成后,執(zhí)行下面SQL,建立DEMO所需的表結(jié)構(gòu),分別有3張表,Visitor(訪(fǎng)問(wèn)者表),Website(網(wǎng)站表),Channel(頻道表)
/*創(chuàng)建Visitor*/ CREATE TABLE Visitor ( Id INT(11) NOT NULL AUTO_INCREMENT, Name VARCHAR(1000) NOT NULL, Email VARCHAR(1000) NOT NULL, Status INT NOT NULL DEFAULT 1, CreateTime DateTime, PRIMARY KEY(Id) ) /*創(chuàng)建網(wǎng)站表*/ CREATE TABLE Website ( Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(1000) NOT NULL, VisitorId INT REFERENCES Visitor(Id), Status INT NOT NULL DEFAULT 1, CreateTime DateTime ) /*創(chuàng)建頻道表*/ CREATE TABLE Channel ( Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(1000) NOT NULL, WebsiteId INT REFERENCES Website(Id), Status INT NOT NULL DEFAULT 1, CreateTime DateTime )
所有這些都完成后,我們就要開(kāi)始動(dòng)手啦~
就像開(kāi)頭說(shuō)的,Mybatis的所有配置都源于一份XML配置文件,我們需要在config文件夾下,新建名為mybatis_demo_config.xml的配置文件,這一份東西就是我們后面所需要操作的核心之一。
在配置這個(gè)文件千萬(wàn)要注意<configuration>節(jié)點(diǎn)內(nèi)的元素都是有層級(jí)順序的要求的,不能夠隨意更換次序,否則在加載xml配置文件的時(shí)候會(huì)出現(xiàn)異常而導(dǎo)致后續(xù)操作不成功。
具體的節(jié)點(diǎn)說(shuō)明大家可以查看http://mybatis.github.io/mybatis-3/zh/configuration.html#,這里只說(shuō)比較常用的節(jié)點(diǎn),typeAliases,environments,mappers。
1. typeAliases => 別名節(jié)點(diǎn),可以通過(guò)設(shè)置這個(gè)節(jié)點(diǎn)的屬性,這樣配置文件中其他需要實(shí)體名字的地方都可以使用此別名而不是完全限定名
例如 <typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />
2. environments => 環(huán)境節(jié)點(diǎn),配置數(shù)據(jù)連接相關(guān)的信息
3. mappers => 配置SQL映射語(yǔ)句。
最簡(jiǎn)單的配置如下:
<?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>
<typeAliases>
<typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- ?useUnicode=true&characterEncoding=utf8為了支持中文插入 -->
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/mybatis_db?useUnicode=true&characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/VisitorMapper.xml" />
</mappers>
</configuration>
在包david.mybatis.demo下面新建一個(gè)名為MyBatisUtils類(lèi),里面存放獲取SqlSession與關(guān)閉SqlSession的方法,提煉出來(lái)方便多次復(fù)用。
package david.mybatis.demo;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import david.mybatis.model.CRUD_Enum;
public class MybatisUtils {
private static final String CONFIG_PATH = "config/mybatis_demo_config.xml";
/*
* 獲取數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)鏈接
*/
public static SqlSession getSqlSession() {
SqlSession session = null;
try {
InputStream stream = Resources.getResourceAsStream(CONFIG_PATH);
//可以根據(jù)配置的相應(yīng)環(huán)境讀取相應(yīng)的數(shù)據(jù)庫(kù)環(huán)境
// SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(
// stream, "development");
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(stream);
session = factory.openSession();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return session;
}
/*
* 獲取數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)鏈接
*/
public static void closeSession(SqlSession session) {
session.close();
}
/*
* 返回操作記錄消息
*/
public static void showMessages(CRUD_Enum type, int count) {
switch (type) {
case Add:
System.out.println("添加了" + count + "條記錄。");
break;
case Delete:
System.out.println("刪除了" + count + "條記錄。");
break;
case Update:
System.out.println("更新了" + count + "條記錄。");
break;
case Query:
System.out.println("匹配了" + count + "條記錄。");
break;
case List:
System.out.println("共有" + count + "條記錄。");
break;
default:
break;
}
}
}
在包david.mybatis.model下面新建一個(gè)名為Visitor的類(lèi),用來(lái)作相應(yīng)的OR Mapping。
package david.mybatis.model;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Visitor {
private int id;
private String name;
private String email;
private int status;
private Date createTime;
public Visitor() {
// TODO Auto-generated constructor stub
createTime = new Date();
}
public Visitor(String name, String email) {
this.name = name;
this.email = email;
this.status = 1;
this.createTime = new Date();
}
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
public Date getCreateTime() {
return createTime;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return String.format("{Id: %d, Name: %s, CreateTime: %s}", id, name,
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime));
}
}
在包david.mybatis.demo下面新建一個(gè)VisitorMapper.xml,用來(lái)映射相應(yīng)SQL語(yǔ)句。
這里要注意namespace=>david.mybatis.demo.IVisitorOperation一定要與對(duì)應(yīng)這個(gè)包下面的實(shí)際文件名,IVisitorOperation否則無(wú)法成功加載相應(yīng)的映射文件
<mapper namespace="david.mybatis.demo.IVisitorOperation">
<select id="basicQuery" parameterType="int" resultType="Visitor">
select * from visitor where id=#{id} and
Status>0 order by Id
</select>
</mapper>
接下來(lái)運(yùn)行下面的程序
public static void testBasicQuery(int id) {
SqlSession session = MybatisUtils.getSqlSession();
try {
Visitor visitor = (Visitor) session.selectOne("david.mybatis.demo.IVisitorOperation.basicQuery", id);
MybatisUtils.closeSession(session);
System.out.println(visitor);
} catch (Exception e) {
// TODO: handle exception
}
}
一個(gè)最簡(jiǎn)單的執(zhí)行結(jié)果就出來(lái)啦

這算是Mybatis系列的HelloWord~
- 詳解idea搭建springboot+mybatis框架的教程
- 使用IDEA搭建SSM框架的詳細(xì)教程(spring + springMVC +MyBatis)
- Spring+Mybatis+Mysql搭建分布式數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)框架的方法
- 詳解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超級(jí)詳細(xì)版)
- Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)
- 詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架
- Spring MVC 4.1.3 + MyBatis零基礎(chǔ)搭建Web開(kāi)發(fā)框架(注解模式)
- Java的MyBatis框架項(xiàng)目搭建與hellow world示例
- MyBatis框架搭建與代碼解讀分析
相關(guān)文章
SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法
對(duì)于一些單體項(xiàng)目而言,在沒(méi)有使用SpringCloud的情況下,配置文件中包含著大量的敏感信息,如果這些信息泄露出去將會(huì)對(duì)企業(yè)的資產(chǎn)產(chǎn)生重大威脅,因此,對(duì)配置文件中的敏感信息加密是一件極其必要的事,所以本文介紹了SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法2024-07-07
SpringBoot lombok(注解@Getter @Setter)詳解
通過(guò)使用Lombok庫(kù),SpringBoot應(yīng)用可以自動(dòng)化生成常用的方法如setter和getter,顯著降低了代碼冗余并提高了開(kāi)發(fā)效率,Lombok的@Getter和@Setter注解用于自動(dòng)生成屬性的訪(fǎng)問(wèn)和修改方法,而@Data注解則提供了一個(gè)全面的解決方案2024-11-11
java string 轉(zhuǎn)date方法如何實(shí)現(xiàn)
在開(kāi)發(fā)應(yīng)用中經(jīng)常會(huì)使用到j(luò)ava string 轉(zhuǎn)date這種不是很常見(jiàn)的做法,本文將以此問(wèn)題提供詳細(xì)解決方案,需要了解的朋友可以參考下2012-11-11
Java 求解如何把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)
這篇文章主要介紹了Java 求解把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)的代碼,總之需要觀(guān)察示例節(jié)點(diǎn)的規(guī)律,需要記錄上個(gè)節(jié)點(diǎn)的情況,注意引入前驅(qū)節(jié)點(diǎn)pre,具體實(shí)例代碼跟隨小編一起看看吧2021-11-11
zuul過(guò)濾器中轉(zhuǎn)發(fā)請(qǐng)求頭的解決方案
這篇文章主要介紹了zuul過(guò)濾器中轉(zhuǎn)發(fā)請(qǐng)求頭的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot項(xiàng)目啟動(dòng)錯(cuò)誤:找不到或無(wú)法加載主類(lèi)的幾種解決方法
本文主要介紹了SpringBoot項(xiàng)目啟動(dòng)錯(cuò)誤:找不到或無(wú)法加載主類(lèi)的幾種解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
Java實(shí)戰(zhàn)之吃貨聯(lián)盟訂餐系統(tǒng)
這篇文章主要介紹了Java實(shí)戰(zhàn)之吃貨聯(lián)盟訂餐系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
關(guān)于Java中byte[]?和?String互相轉(zhuǎn)換問(wèn)題
這篇文章主要介紹了Java中byte[]?和?String互相轉(zhuǎn)換問(wèn)題,通過(guò)用例給大家介紹了通過(guò)String類(lèi)將String轉(zhuǎn)換成byte[]或者byte[]轉(zhuǎn)換成String,具體實(shí)例代碼跟隨小編一起看看吧2022-01-01
springboot?maven?打包插件介紹及注意事項(xiàng)說(shuō)明
這篇文章主要介紹了springboot?maven?打包插件介紹及注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

