Windows下Java+MyBatis框架+MySQL的開發(fā)環(huán)境搭建教程
MyBatis是一個Java持久化框架,它通過XML描述符或注解把對象與存儲過程或SQL語句關聯(lián)起來。
MyBatis是在Apache許可證 2.0下分發(fā)的自由軟件,是iBATIS 3.0的分支版本。其維護團隊也包含iBATIS的初創(chuàng)成員。
與其他的對象關系映射框架不同,MyBatis并沒有將Java對象與數(shù)據(jù)庫表關聯(lián)起來,而是將Java方法與SQL語句關聯(lián)。MyBatis允許用戶充分利用數(shù)據(jù)庫的各種功能,例如存儲過程、視圖、各種復雜的查詢以及某數(shù)據(jù)庫的專有特性。如果要對遺留數(shù)據(jù)庫、不規(guī)范的數(shù)據(jù)庫進行操作,或者要完全控制SQL的執(zhí)行,MyBatis是一個不錯的選擇。
與JDBC相比,MyBatis簡化了相關代碼:SQL語句在一行代碼中就能執(zhí)行。MyBatis提供了一個映射引擎,聲明式的把SQL語句執(zhí)行結果與對象樹映射起來。通過使用一種內(nèi)建的類XML表達式語言,或者使用Apache Velocity集成的插件,SQL語句可以被動態(tài)的生成。
MyBatis與Spring Framework和Google Guice集成,這使開發(fā)者免于依賴性問題。
MyBatis支持聲明式數(shù)據(jù)緩存(declarative data caching)。當一條SQL語句被標記為“可緩存”后,首次執(zhí)行它時從數(shù)據(jù)庫獲取的所有數(shù)據(jù)會被存儲在一段高速緩存中,今后執(zhí)行這條語句時就會從高速緩存中讀取結果,而不是再次命中數(shù)據(jù)庫。MyBatis提供了默認下基于Java HashMap的緩存實現(xiàn),以及用于與OSCache、Ehcache、Hazelcast和Memcached連接的默認連接器。MyBatis還提供API供其他緩存實現(xiàn)使用。
要點
這段時間學習下來,其實對Mybatis來說主要的過程無法是以下幾步
1. 從XML配置文件中獲取SessionFactory,然后由SessionFactory產(chǎn)生相應的Session。
2. 是用Session對象對業(yè)務數(shù)據(jù)完成相應的CRUD操作(增刪改查)和相應的事務控制。
3. 使用完畢后關閉相應的Session,以免過度占用資源
4. 使用配置相應的Mapper xml文件進行業(yè)務實體的JavaBean與數(shù)據(jù)庫表之間做相應的Map操作
戰(zhàn)前準備:
1. 開發(fā)環(huán)境Eclipse JavaEE IDE,JDK 1.6,數(shù)據(jù)庫mysql 5.5
2. 下載相應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自動生成配置文件包)
mysql-connector-java-5.1.26-bin.jar => 下載地址:http://dev.mysql.com/downloads/connector/j/ (Mysql 的jdbc驅動包)
搭建步驟
接下來大家可以再Eclipse下面建一個名為MybatisDemo的Java Project項目,按照如下圖中所示新建相應的包結構和文件夾結構,其中config與mapper分別為文件夾,
包david.mybatis.demo與包david.mybatis.model下分別存放相應的demo運行程序與Javabean對象,lib文件夾下存放剛剛下載的那幾個第三方jar包。
建完下面的目錄,我們可以添加相應的Jar包,如下圖
完成后,執(zhí)行下面SQL,建立DEMO所需的表結構,分別有3張表,Visitor(訪問者表),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 )
所有這些都完成后,我們就要開始動手啦~
就像開頭說的,Mybatis的所有配置都源于一份XML配置文件,我們需要在config文件夾下,新建名為mybatis_demo_config.xml的配置文件,這一份東西就是我們后面所需要操作的核心之一。
在配置這個文件千萬要注意<configuration>節(jié)點內(nèi)的元素都是有層級順序的要求的,不能夠隨意更換次序,否則在加載xml配置文件的時候會出現(xiàn)異常而導致后續(xù)操作不成功。
具體的節(jié)點說明大家可以查看http://mybatis.github.io/mybatis-3/zh/configuration.html#,這里只說比較常用的節(jié)點,typeAliases,environments,mappers。
1. typeAliases => 別名節(jié)點,可以通過設置這個節(jié)點的屬性,這樣配置文件中其他需要實體名字的地方都可以使用此別名而不是完全限定名
例如 <typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />
2. environments => 環(huán)境節(jié)點,配置數(shù)據(jù)連接相關的信息
3. mappers => 配置SQL映射語句。
最簡單的配置如下:
<?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下面新建一個名為MyBatisUtils類,里面存放獲取SqlSession與關閉SqlSession的方法,提煉出來方便多次復用。
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ù)庫訪問鏈接 */ public static SqlSession getSqlSession() { SqlSession session = null; try { InputStream stream = Resources.getResourceAsStream(CONFIG_PATH); //可以根據(jù)配置的相應環(huán)境讀取相應的數(shù)據(jù)庫環(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ù)庫訪問鏈接 */ 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下面新建一個名為Visitor的類,用來作相應的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下面新建一個VisitorMapper.xml,用來映射相應SQL語句。
這里要注意namespace=>david.mybatis.demo.IVisitorOperation一定要與對應這個包下面的實際文件名,IVisitorOperation否則無法成功加載相應的映射文件
<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>
接下來運行下面的程序
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 } }
一個最簡單的執(zhí)行結果就出來啦
這算是Mybatis系列的HelloWord~
- 詳解idea搭建springboot+mybatis框架的教程
- 使用IDEA搭建SSM框架的詳細教程(spring + springMVC +MyBatis)
- Spring+Mybatis+Mysql搭建分布式數(shù)據(jù)庫訪問框架的方法
- 詳解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超級詳細版)
- Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)
- 詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架
- Spring MVC 4.1.3 + MyBatis零基礎搭建Web開發(fā)框架(注解模式)
- Java的MyBatis框架項目搭建與hellow world示例
- MyBatis框架搭建與代碼解讀分析
相關文章
java ArrayList.remove()的三種錯誤用法以及六種正確用法詳解
這篇文章主要介紹了java ArrayList.remove()的三種錯誤用法以及六種正確用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01Spring?Boot?集成Elasticsearch模塊實現(xiàn)簡單查詢功能
本文講解了Spring?Boot集成Elasticsearch采用的是ES模板的方式實現(xiàn)基礎查詢,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-06-06Java矩陣連乘問題(動態(tài)規(guī)劃)算法實例分析
這篇文章主要介紹了Java矩陣連乘問題(動態(tài)規(guī)劃)算法,結合實例形式分析了java實現(xiàn)矩陣連乘的算法原理與相關實現(xiàn)技巧,需要的朋友可以參考下2017-11-11Spring使用IOC與DI實現(xiàn)完全注解開發(fā)
IOC也是Spring的核心之一了,之前學的時候是采用xml配置文件的方式去實現(xiàn)的,后來其中也多少穿插了幾個注解,但是沒有說完全采用注解實現(xiàn)。那么這篇文章就和大家分享一下,全部采用注解來實現(xiàn)IOC + DI2022-09-09idea中解決maven包沖突的問題(maven helper)
這篇文章主要介紹了idea中解決maven包沖突的問題(maven helper),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Java文件處理之使用XWPFDocument導出Word文檔
最近因項目開發(fā)的需要,整理了一份用JAVA導出WORD文檔,下面這篇文章主要給大家介紹了關于Java文件處理之使用XWPFDocument導出Word文檔的相關資料,需要的朋友可以參考下2023-12-12