首頁 > 軟體

Java MyBatis框架環境搭建詳解

2022-08-11 14:02:34

一、MyBatis簡介

1、MyBatis歷史

MyBatis最初是Apache的一個開源專案iBatis, 2010年6月這個專案由Apache Software Foundation遷移到了Google Code。隨著開發團隊轉投Google Code旗下, iBatis3.x正式更名為MyBatis。程式碼於2013年11月遷移到Github。iBatis一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。 iBatis提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。

2、MyBatis特性

1) MyBatis 是支援客製化化 SQL、儲存過程以及高階對映的優秀的持久層框架

2) MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集

3) MyBatis可以使用簡單的XML或註解用於設定和原始對映,將介面和Java的POJO(Plain Old JavaObjects,普通的Java物件)對映成資料庫中的記錄

4) MyBatis 是一個 半自動的ORM(Object Relation Mapping)框架

3、MyBatis下載

MyBatis下載地址:https://github.com/mybatis/mybatis-3

4、和其它持久化層技術對比

JDBC

  • SQL 夾雜在Java程式碼中耦合度高,導致寫死內傷
  • 維護不易且實際開發需求中 SQL 有變化,頻繁修改的情況多見
  • 程式碼冗長,開發效率低

Hibernate 和 JPA

  • 操作簡便,開發效率
  • 高程式中的長難複雜 SQL 需要繞過框架
  • 內部自動生產的 SQL,不容易做特殊優化
  • 基於全對映的全自動框架,大量欄位的 POJO 進行部分對映時比較困難。
  • 反射操作太多,導致資料庫效能下降

MyBatis

  • 輕量級,效能出色
  • SQL 和 Java 編碼分開,功能邊界清晰。Java程式碼專注業務、SQL語句專注資料
  • 開發效率稍遜於HIbernate,但是完全能夠接受

二、搭建MyBatis

1、開發環境

IDE:idea 2019.2

構建工具:maven 3.5.4

MySQL版本:MySQL 5.7

MyBatis版本:MyBatis 3.5.7

MySQL 不同版本的注意事項
1 、驅動類 driver-class-name
MySQL 5 版本使用 jdbc5 驅動,驅動類使用: com.mysql.jdbc.Driver
MySQL 8 版本使用 jdbc8 驅動,驅動類使用: com.mysql.cj.jdbc.Driver
2 、連線地址 url
MySQL 5 版本的 url :
jdbc:mysql://localhost:3306/ssm
MySQL 8 版本的 url :
jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
否則執行測試用例報告如下錯誤:
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or
represents more

2、建立maven工程

a>打包方式:jar

b>引入依賴

  <dependencies> <!-- Mybatis核心 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.7</version>
    </dependency>
    <!-- junit測試 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- MySQL驅動 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.3</version>
    </dependency>
  </dependencies>

3、建立MyBatis的核心組態檔

習慣上命名為mybatis-config.xml,這個檔名僅僅只是建議,並非強制要求。將來整合Spring之後,這個組態檔可以省略,所以大家操作時可以直接複製、貼上。

核心組態檔主要用於設定連線資料庫的環境以及MyBatis的全域性設定資訊

核心組態檔存放的位置是src/main/resources目錄下

提示:

下面的 username 和 password 為mysql的賬號密碼 根據自身實際情況進行改寫

<?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>
    <!--設定連線資料庫的環境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm? serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入對映檔案-->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

4、建立mapper介面

MyBatis中的mapper介面相當於以前的dao。但是區別在於,mapper僅僅是介面,我們不需要提供實現類。

先建立使用者類 類中屬性 與 資料庫中的欄位對應

User類裡面的程式碼:

public class User {
    private  Integer id;
    private  String username;
    private  String password;
    private  Integer age;
    private  String sex;
    private  String email;
    public User() {
    }
    public User(Integer id, String username, String password, Integer age, String sex, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + ''' +
                ", password='" + password + ''' +
                ", age=" + age +
                ", sex='" + sex + ''' +
                ", email='" + email + ''' +
                '}';
    }
}

建立UserMapper介面

public interface UserMapper { 
/*** 新增使用者資訊 */ 
int insertUser(); }

5、建立MyBatis的對映檔案

相關概念:ORM(Object Relationship Mapping)物件關係對映。

物件:Java的實體類物件

關係:關係型資料庫

對映:二者之間的對應關係

Java概念資料庫概念
屬性欄位/
物件記錄/

1 、對映檔案的命名規則:
表所對應的實體類的類名 +Mapper.xml
例如:表 t_user ,對映的實體類為 User ,所對應的對映檔案為 UserMapper.xml
因此一個對映檔案對應一個實體類,對應一張表的操作
MyBatis 對映檔案用於編寫 SQL ,存取以及操作表中的資料
MyBatis 對映檔案存放的位置是 src/main/resources/mappers 目錄下
2 、 MyBatis 中可以面向介面運算元據,要保證兩個一致:
a>mapper 介面的全類名和對映檔案的名稱空間( namespace )保持一致
b>mapper 介面中方法的方法名和對映檔案中編寫 SQL 的標籤的 id 屬性保持一致

<?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"> 
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper"> 
<!--int insertUser();--> 
<insert id="insertUser"> insert into t_user values(null,'張三','123',23,'女') </insert> </mapper>

6、通過junit測試功能

//讀取MyBatis的核心組態檔 
InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); 
//建立SqlSessionFactoryBuilder物件
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); 
//通過核心組態檔所對應的位元組輸入流建立工廠類SqlSessionFactory,生產SqlSession物件 
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); 
//建立SqlSession物件,此時通過SqlSession物件所操作的sql都必須手動提交或回滾事務 
//SqlSession sqlSession = sqlSessionFactory.openSession(); 
//建立SqlSession物件,此時通過SqlSession物件所操作的sql都會自動提交 S
qlSession sqlSession = sqlSessionFactory.openSession(true);
//通過代理模式建立UserMapper介面的代理實現類物件
UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 
//呼叫UserMapper介面中的方法,就可以根據UserMapper的全類名匹配元素檔案,通過呼叫的方法名匹配 對映檔案中的SQL標籤,並執行標籤中的SQL語句 
int result = userMapper.insertUser(); 
//sqlSession.commit();
  • SqlSession:代表Java程式和資料庫之間的對談。(HttpSession是Java程式和瀏覽器之間的對談)
  • SqlSessionFactory:是“生產”SqlSession的“工廠”。
  • 工廠模式:如果建立某一個物件,使用的過程基本固定,那麼我們就可以把建立這個物件的相關程式碼封裝到一個“工廠類”中,以後都使用這個工廠類來“生產”我們需要的物件。

7、加入log4j紀錄檔功能

a>加入依賴

<!-- log4j紀錄檔 --> 
<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.17</version> 
</dependency>

b>加入log4j的組態檔

log4j的組態檔名為log4j.xml,存放的位置是src/main/resources目錄下

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) n"/>
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug"/>
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info"/>
    </logger>
    <root>
        <level value="debug"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

紀錄檔的級別

FATAL(致命)>ERROR(錯誤)>WARN(警告)>INFO(資訊)>DEBUG(偵錯)

從左到右列印的內容越來越詳細

到此這篇關於Java MyBatis框架環境搭建詳解的文章就介紹到這了,更多相關Java MyBatis框架內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com