1 ? ?快速入門
1.1 ? ?準(zhǔn)備開發(fā)環(huán)境
1.1.1 創(chuàng)建工程項目
?1坤学、創(chuàng)建測試項目梗顺,普通java項目或者是JavaWeb項目均可舆乔,如下圖所示:
1.1.2 添加mybatis jar包
2羽氮、添加相應(yīng)的jar包
【mybatis】
?????? mybatis-3.1.1.jar
【MYSQL驅(qū)動包】
mysql-connector-java-5.1.7-bin.jar
1.1.3 創(chuàng)建數(shù)據(jù)庫表
3杨蛋、創(chuàng)建數(shù)據(jù)庫和表茎杂,針對MySQL數(shù)據(jù)庫
SQL腳本如下:
create database mybatis;
use mybatis;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES('孤傲蒼狼',27);
INSERT INTO users(NAME, age)VALUES('白虎神皇',27);
將SQL腳本在MySQL數(shù)據(jù)庫中執(zhí)行错览,完成創(chuàng)建數(shù)據(jù)庫和表的操作,如下:
到此煌往,前期的開發(fā)環(huán)境準(zhǔn)備工作全部完成倾哺。
1.2 ? ?使用MyBatis查詢表中的數(shù)據(jù)
1.2.1 添加config.xml配置DataSource連接
1、添加Mybatis的配置文件conf.xml
在src目錄下創(chuàng)建一個conf.xml文件刽脖,如下圖所示:
conf.xml文件中的內(nèi)容如下:
1.2.2 構(gòu)建映射數(shù)據(jù)庫表的dto對象
2羞海、定義表所對應(yīng)的實體類,如下圖所示:
User類的代碼如下:
package me.gacl.domain;
?/**
? *@authorgacl
? * users表所對應(yīng)的實體類
? ?*/
?public class User {
? ? ? //實體類的屬性和表的字段名稱一一對應(yīng)
? ? ?private int id;
? ? ?private String name;
? ? ?private int age;
? ? ?public int getId() {
? ? ? ? ?return id;
? ? ?}
? ? ?public void setId(int id) {
? ? ? ? ?this.id = id;
? ? ?}
? ? ?public String getName() {
? ? ? ? ?returnname;
? ? ?}
? ? ?public void setName(String name) {
? ? ? ? ?this.name = name;
? ? ?}
? ? ?public int getAge() {
? ? ? ? ?return age;
? ? ?}
? ? ?public void setAge(intage) {
? ? ? ? ?this.age = age;
? ? ?}
? ? ?@Override
? ? ?public String toString() {
? ? ? ? ?return"User [id=" + id + ",name=" + name + ", age=" + age + "]";
? ? ?}
}
1.2.3 定義操作數(shù)據(jù)庫表的sql映射文件
3曲管、定義操作users表的sql映射文件userMapper.xml
創(chuàng)建一個me.gacl.mapping包却邓,專門用于存放sql映射文件,在包中創(chuàng)建一個userMapper.xml文件翘地,如下圖所示:
userMapper.xml文件的內(nèi)容如下:
1.2.4 在config.xml文件中注冊userMapper.xml文件
4申尤、在conf.xml文件中注冊userMapper.xml文件
1.2.5 編寫測試代碼
5癌幕、編寫測試代碼:執(zhí)行定義的select語句
創(chuàng)建一個Test1類,編寫如下的測試代碼:
package me.gacl.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import me.gacl.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisTest1 {
??? public static void main(String[] args)throws IOException {
??????? //mybatis的配置文件
??????? String resource = "conf.xml";
??????? //使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)
??????? InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);
??????? //構(gòu)建sqlSession的工廠
???????SqlSessionFactory sessionFactory =new SqlSessionFactoryBuilder().build(is);
??????? //使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)
???????//Reader reader = Resources.getResourceAsReader(resource);
???????//構(gòu)建sqlSession的工廠
???????//SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(reader);
???????//創(chuàng)建能執(zhí)行映射文件中sql的sqlSession
??????? SqlSessionsession = sessionFactory.openSession();
??????? /**
????????*映射sql的標(biāo)識字符串昧穿,
????????* me.gacl.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值勺远,
????????* getUser是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL
????????*/
??????? String statement= "me.gacl.mapping.userMapper.getUser";//映射sql的標(biāo)識字符串
???????//執(zhí)行查詢返回一個唯一user對象的sql
??????? User user =session.selectOne(statement, 1);
???????System.out.println(user);
??? }
}
執(zhí)行結(jié)果如下:
可以看到时鸵,數(shù)據(jù)庫中的記錄已經(jīng)成功查詢出來了胶逢。
2 ? 架構(gòu)分層
2.1 ? ?MyBatis架構(gòu)
MyBatis的框架架構(gòu)
原理詳解:
? ? ? ? MyBatis應(yīng)用程序根據(jù)XML配置文件創(chuàng)建SqlSessionFactory,SqlSessionFactory在根據(jù)配置饰潜,配置來源于兩個地方初坠,一處是配置文件,一處是Java代碼的注解彭雾,獲取一個SqlSession碟刺。SqlSession包含了執(zhí)行sql所需要的所有方法,可以通過SqlSession實例直接運(yùn)行映射的sql語句薯酝,完成對數(shù)據(jù)的增刪改查和事務(wù)提交等半沽,用完之后關(guān)閉SqlSession。
2.2 sql相關(guān)XML層
1吴菠、sql相關(guān)的xml層
配置數(shù)據(jù)都存在mybatis_base.xml文件中者填,此文件中存放引用到的所有mybatis sql.xml文件引用;
對于業(yè)務(wù)sql.xml編寫規(guī)則
mapper標(biāo)簽做葵,即映射器占哟,是Mybatis尋找數(shù)據(jù)庫語句文件的配置,同時用于指定Dao類的標(biāo)簽酿矢;
select標(biāo)簽榨乎,用于編寫Mybatis查詢語句;
#:用于防止sql注入瘫筐,直接表示字符串谬哀;
$:表示其他類型;
?????? CDATA:用于防止轉(zhuǎn)義严肪;
?????? foreach標(biāo)簽:for循環(huán)枚舉;
?????? parameterType
?????? resultType
2.2.1 select標(biāo)簽
select元素配置細(xì)節(jié)如下:
示例:
工程示例代碼:
2.2.2 sqlSessionFactory注冊
????在Spring的配置文件中谦屑,注入DataSource工廠方法類驳糯,用于關(guān)聯(lián)映射對應(yīng)mybatis的sql腳本xml文件。
2.3 ? ?Dao層
? ? ????Dao層需要注意的是——select id與Dao對應(yīng)類中的方法名必須保持一致氢橙;
? ? ?????注解@param酝枢,用于表示傳入?yún)?shù)的數(shù)據(jù)類型別名。@param與xml中的paramType屬性是二選一關(guān)系悍手,均用于指明入?yún)?shù)據(jù)類型帘睦;
packagecom.hj.app.dao;
public interface APPClientDao {
??? /**
??? ?*保存APP客戶端信息
??? ?*@param appClientInfo
??? ?*/
??? public void insertAPPClientInfo(@Param("info")APPClientInfo appInfo);
}
3 ? ?參考鏈接
MyBatis學(xué)習(xí)總結(jié)(一)——MyBatis快速入門
http://www.cnblogs.com/xdp-gacl/p/4261895.html