Java MyBatis框架環境搭建詳解

一、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框架內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: