1. 程式人生 > >》MyBatise 入門案例 : 環境搭建 與入門的案 --- 最原始 main方法的測試

》MyBatise 入門案例 : 環境搭建 與入門的案 --- 最原始 main方法的測試

封紅衛 —

友情提示:

  •    使用 mybatis 是非常容易的一件事情,因為只需要編寫 Dao 介面並且按照
    

mybatis 要求編寫兩個配置檔案,就可以實現功能。遠比我們之前的 jdbc 方便多了。(我們使用註解之後,將變得
更為簡單,只需要編寫一個 mybatis 配置檔案就夠了。)
但是,這裡麵包含了許多細節,比如為什麼會有工廠物件(SqlSessionFactory),為什麼有了工廠之後還
要有構建者物件(SqlSessionFactoryBuilder),為什麼 IUserDao.xml 在建立時有位置和檔名的要求等等。
這些問題我們在自定義 mybatis 框架的章節,通過層層剝離的方式,給大家講解。
請注意:我們講解自定義 Mybatis 框架,不是讓大家回去自己去寫個 mybatis,而是讓我們能更好了瞭解
mybatis 內部是怎麼執行的,在以後的開發中能更好的使用 mybatis 框架,同時對它的設計理念(設計模式)有一個認識

*

建立maven 什麼也不√ 直接的 建立
建立 資料庫 用的sqlyong的資料庫 圖形 客戶端不影響
DROP TABLE IF EXISTS user;

CREATE TABLE user (
id int(11) NOT NULL auto_increment,
username varchar(32) NOT NULL COMMENT ‘使用者名稱稱’,
birthday datetime default NULL COMMENT ‘生日’,
sex char(1) default NULL COMMENT ‘性別’,
address varchar(256) default NULL COMMENT ‘地址’,
PRIMARY KEY (id

)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into user(id,username,birthday,sex,address) values (41,‘老王’,‘2018-02-27 17:47:08’,‘男’,‘北京’),(42,‘小二王’,‘2018-03-02 15:09:37’,‘女’,‘北京金燕龍’),(43,‘小二王’,‘2018-03-04 11:34:34’,‘女’,‘北京金燕龍’),(45,‘傳智播客’,‘2018-03-04 12:04:06’,‘男’,‘北京金燕龍’),(46,‘老王’,‘2018-03-07 17:37:26’,‘男’,‘北京’),(48,‘小馬寶莉’,‘2018-03-08 11:44:00’,‘女’,‘北京修正’);

空的專案 :能夠檢視 直接是java 的
pom。xml :至少要有 《“ MyBatis ”mysql資料庫 》 junit log4j
IDEA 編輯器裡
1:建立 對應資料庫的實體類 的《javaBean 物件》
public class User implements Serializable{
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
get set toString 方法 生成
2: (無需建立實現類)dao 包的裡 介面 使用者的持久層介面 查詢所有的操作 IUserDao: 以I為首 的interface

public interface IUserDao {

/**
 * 查詢所有操作
 * @return
 */
List<User> findAll();

}

MyBatise 環境的搭建
1:maven的project 並匯入 座標(maven裡 GroupId 就是我們 接下來的 包 的層級 與路徑 )

<?xml version="1.0" encoding="UTF-8"?>


4.0.0

<groupId>com.fhw</groupId>
<artifactId>mybatise_fhw_day01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
 <dependencies>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
</dependency>
2:建立實體類 一定要實現 Serializable 和dao 的 包層級與名稱 就是依據 建立maven 的 GroupId群,組-- artifactId 製品-- version 版本 (上面已準備) 3: 主配置檔案 :sqlMapConfg.xml 名稱自定義 要在 Resource 下面 的第一層: 頂層 ============》 主配置xml 檔案@@@@@@@@@@@@@@@@@@@@@ <?xml version="1.0" encoding="UTF-8"?> 4:對映檔案: 要與實體類的包 要 包,類的 層級 字首名稱 相同 對應() 是的行成對映 =====》 和微信小程式的開發也有類似 的對映 5: 對映檔案 mapper namespace 必須是 介面所在的全限定名 6:對映檔案 的 操作配置select id 屬性 必須是 介面所在的 方法名 -------------------------------- <?xml version="1.0" encoding="UTF-8"?> 認識自定義就無需 MyBatise官方 的約束 select * from user

@@@:總結 3個xml 檔案 基於maven 的pom.xml檔案 匯入依賴 resources裡的— 主配置xml檔案 (在頂層) 對映xml檔案(與介面 層級 字首名稱 相

同)
介面 與mapper 檔案 的對應 與 形成 對映的條件 resources 裡 包的名稱 層級統一一致 就連配置檔名稱 與介面名稱 也是相同的
如此這般 : 我們就不用在寫介面的 實現類 。。。。開發裡最常用 的
基礎版====》 主配置檔案的 遍寫描述:
file ----自定義名稱 字尾名為xml 的 如: SqlMapConfg.xml

<?xml version="1.0" encoding="UTF-8"?> --->MyBatise的官方 dtd 約束檔案

先寫 再寫<environments 就生成 了 default 指定 的這個庫 — 多個庫
—<transactionManager type="" sw 管理 的型別 是 我選的是JDBC
—< dataSource type=""> 資料來源型別 POOLED 連線池–這裡-繼續寫的是 資料庫的配置連線的4個基本 property name value
----- 分別是:driver驅動 。。。。 url —vaulue裡 java:mysql: (url 格式的 ip 埠號port 與庫名)
可優化===》(這裡可以來自外面 propertise檔案裡解決 )然後xml裡引入 在Value裡使用OGNL表示式: 物件名.屬性名來呼叫 即可)
最後指定 對映檔案的位置:全限定類名—》 mappers—mapper resource=的值全限定類名

然後: log4g.propertise 檔案
備用 jdbcConfig.properties 檔案 可進行OGNL表示式在主配置檔案的應用
編寫 測試類 這裡的包–沒有對映 條件
測試類裡 ----》
public static void main(String[] args) throws Exception{
// 讀取配置檔案
InputStream in = Resources.getResourceAsStream(“SqlMapConfig.xml”);
// 建立sqlSession 工廠
//).build(in); 就是建立者 模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 使用工廠生產SqlSession 物件
SqlSession session = factory.openSession();
// SqlSession建立代理物件
IUserDao iUserDao = session.getMapper(IUserDao.class);
//代理物件執行方法
List users=iUserDao.findAll();
for (User user : users) {
System.out.println(user);
}
//釋放資源
session.close();
in.close();
}
我們分析的 是 在main 方法裡 —配置檔案 裡
我們是用的 路徑
分析 在實際開發裡 絕對路徑與相對路徑 都是不靠譜的
優化的 有 2種
1: 使用類的載入器
2:使用ServiletContext 的物件的 getRealPath
還有 這些模式

工廠的模式 :解耦 解決 類只間的耦合 生產Session的 就使用 工廠模式
構建者模式 解決了修改原始碼的 弊端 建立的細節隱藏 使用 就直接的呼叫 即可
//).build(in); 就是建立者 模式
build() 與 openSession 都有很多過載 : 靈活

動態代理模式: 的優勢 動態代理 ----》在不修改原始碼的 的基礎上 對 物件方法的增強
SqlSession建立代理物件
IUserDao iUserDao = session.getMapper(IUserDao.class);
代理模式: 從而 不用在寫實現類

每多加的類 就靈活的多 他每次多建立 一個類的額 優勢 -----》 專案需求 為
設計模式 只需要使用的好處

分析的 自定義MyBatise
有什麼,???
------》Connection Database 的miserge 資訊 —》 就能建立Connection物件

        Mapper Resouce =“全類名”  對映配置檔案的  ---是實體類的 全限定名

mapper 對映 檔案xml---------------------》
Mapper 裡namesPace select 的查詢所有 就執行SQL語句 ------》

SQLSession介面的裡寫的(核心物件) 是?

sqlSessionDactory
xml解析 裡額的 直接用的的是 utils 的 copy 到 選擇的 專案裡 —》給Pomeranian檔案裡 加上座標 ====》看一下Xpath 的教程 就是為為了找到POM.xml

自定義MyBatise的類 匯出來 建立ConfigRection實體類 來 封裝了配置資訊

建立Mepper 類裡就是為了 執行 sql語句 和 全限定類名
‘’
看圖分析
在這裡插入圖片描述
接著我們來分析2個 配置xml檔案 的
主配置xml 檔案@@@




在 有了連線資料庫的–Connection 物件
在 最後 指定對映配置檔案的位置,


接值 對映xml 檔案 裡
進行執行 SQL 語句 的

》-- 》 分享 — 解析 xml 檔案 用的是 dom4j 的@@@@@@@@@》

Set root category priority to INFO and its only appender to CONSOLE.

#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

*Set the enterprise logger category to FATAL and its only appender to CONSOLE. *

log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

CONSOLE is set to be a ConsoleAppender using a PatternLayout.

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

LOGFILE is set to be a File appender using a PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
先不要關注 dom4j 的解析過程

=====》