MyBatis的使用

概述
Mybatis是Apache的一個開源項目iBatis,2010年更名爲Mybatis。
Mybatis是一個支持普通SQL查詢、存儲過程和高級映射的優秀持久層框架,對jdbc操做數據庫的過程進行封裝,使開發者只須要關注SQL自己,而不須要花費精力去處理註冊驅動、建立connection等jdbc繁雜的過程代碼。
Mybatis經過xml或者註解的方式將要執行的各類statement配置起來,並經過java對象(POJO)和statement中的sql進行映射生成最終執行的sql語句,而後由Mybatis框架執行sql並將結果映射成java對象(POJO)並返回。
MyBatis做爲持久層框架,其主要思想是將程序中的大量SQL語句剝離出來,配置在配置文件中,以實現SQL的靈活配置。優點是將SQL與程序代碼分離,作到能夠在不修改程序代碼的狀況下,直接在配置文件中修改SQL。
MyBatis的使用很是簡單,只要在Java項目中添加相關依賴,就能以面向對象的方式操做關係數據庫。
建立項目
建立項目的步驟此處再也不贅述,與SpringMVC建立相同(前文連接:https://www.jianshu.com/p/fde4557c527c)。
項目目錄結構如圖:
mybatis01
打開項目的pom文件,添加Mybatis包依賴和鏈接MySQL數據庫的包依賴:
java

  1 <dependency>
  2     <groupId>org.mybatis</groupId>
  3     <artifactId>mybatis</artifactId>
  4     <version>3.4.6</version>
  5 </dependency>
  6 <dependency>
  7     <groupId>mysql</groupId>
  8     <artifactId>mysql-connector-java</artifactId>
  9     <version>5.1.46</version>
 10 </dependency>

建立數據庫
MySQL數據庫的安裝前文已經記錄,此處再也不贅述(前文鏈接: https://www.jianshu.com/p/b96e55e86c98)。
使用客戶端鏈接數據庫,建立一個名爲mybatis的數據庫,使用該數據庫,建立一張名爲tb_user的表,id爲主鍵自動增加:
mybatis02
前文介紹,ORM框架是使用持久化對象完成持久化操做,即經過該對象對數據庫進行增、刪、改的操做,以面向對象的方式操做數據庫。
在Mybatis中使用的持久化對象就是PO對象(持久化後的POJO),它不要求持久化類繼承任何父類或者實現任何接口,保證代碼不被污染,這是Mybatis被稱爲低侵入式設計的緣由。
在項目中建立POJO類
在項目中的java目錄下建立com.snow.dcl.domain包,在該包下建立User.java類:
mybatis03
編寫以下代碼:
  1 public class User {
  2 
  3     //用戶id
  4     private Integer id;
  5 
  6     //用戶名稱
  7     private String name;
  8 
  9     //用戶性別
 10     private String sex;
 11 
 12     //用戶年齡
 13     private Integer age;
 14 
 15     public Integer getId() {
 16         return id;
 17     }
 18 
 19     public void setId(Integer id) {
 20         this.id = id;
 21     }
 22 
 23     public String getName() {
 24         return name;
 25     }
 26 
 27     public void setName(String name) {
 28         this.name = name;
 29     }
 30 
 31     public String getSex() {
 32         return sex;
 33     }
 34 
 35     public void setSex(String sex) {
 36         this.sex = sex;
 37     }
 38 
 39     public Integer getAge() {
 40         return age;
 41     }
 42 
 43     public void setAge(Integer age) {
 44         this.age = age;
 45     }
 46 
 47     //無參構造方法
 48     public User() {
 49     }
 50 
 51     //帶參構造方法
 52     public User(Integer id, String name, String sex, Integer age) {
 53         this.id = id;
 54         this.name = name;
 55         this.sex = sex;
 56         this.age = age;
 57     }
 58 
 59     @Override
 60     public String toString() {
 61         return "User{" +
 62                 "id=" + id +
 63                 ", name='" + name + '\'' +
 64                 ", sex='" + sex + '\'' +
 65                 ", age=" + age +
 66                 '}';
 67     }
 68 }


建立XML文件
如今對於Mybatis來講還不理解User.java類與數據庫表tb_user的關係,也不理解類中的屬性與數據庫表各個字段的關係,要經過XML文件完成二者之間的映射關係,使得Mybatis可以理解和使用。
在項目中的resources目錄下建立mapping目錄,在該目錄下建立UserMapper.xml文件:
mybatis04
編寫以下代碼:
mysql

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4 <mapper namespace="com.snow.dcl.mapper.UserMapper">
  5     <insert id="saveUser" parameterType="com.snow.dcl.domain.User" useGeneratedKeys="true">
  6         insert into tb_user(name,sex,age) values (#{name},#{sex},#{age});
  7     </insert>
  8 </mapper>

在XML文件中定義了一條insert語句,解釋以下:
1.<mapper namespace="com.snow.dcl.mapper.UserMapper">爲該mapper定義了惟一的userspace,習慣上該值設置爲包名+sql映射文件名,這樣能夠保證該值惟一。
2.insert標籤中編寫了插入sql語句,id屬性值設置爲saveUser,該值必須惟一。
3.parameterType屬性指定了插入數據時使用的參數類型,這裏插入的數據就是User對象。
4.useGeneratedKeys="true"表示使用數據庫的自動增加策略。
配置Mybatis
如今對於Mybatis來講,理解了User.java類與數據庫表tb_user的關係,可是還不知道須要鏈接的數據庫地址、用戶名、密碼、鏈接池等信息,因此項目要對Mybatis的配置文件進行這些信息的配置。
Mybatis的配置文件默認爲mybatis-config.xml,應用程序運行時,須要先加載該文件。
在項目的resources目錄下建立mybatis-config.xml文件:
mybatis05
編寫以下代碼:
  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4 <mapper namespace="com.snow.dcl.mapper.UserMapper">
  5     <insert id="saveUser" parameterType="com.snow.dcl.domain.User" useGeneratedKeys="true">
  6         insert into tb_user(name,sex,age) values (#{name},#{sex},#{age});
  7     </insert>
  8 </mapper>


1.<configuration>是Mybatis配置文件的根元素。
2.<settings>子元素配置了日誌信息,能夠在控制檯打印輸出語句,便於調試,對Mybatis配置日誌信息很重要。
3.<environments>子元素用來配置Mybatis的環境,用來將SQL映射用於多種數據庫之中。每一個數據庫對應一個SqlSessionFactory,能夠配置多種環境,可是隻能爲SqlSessionFactory實例選擇一個環境,default屬性表示選擇的環境。
4.<environment>用於配置一個環境;<transactionManager>用來配置Mybatis中的事務管理,type設置爲JDBC,表示直接使用JDBC的提交和回滾設置;<dataSource>用來配置數據源,Mybatis中並不推薦使用DriverManager來鏈接數據庫,推薦使用數據源來管理數據庫鏈接,這樣能保證最好的性能;<property>用於配置Mybatis鏈接數據庫的包必要信息,驅動、URL、用戶名、密碼等。
5.<mappers>子元素支持多個<mapper>子元素,每一個<mapper>用於指定一個持久化配置文件。sql

數據源:
數據源是一種用來提升數據庫鏈接性能的常規手段,它會負責維持一個數據庫鏈接池,當程序建立數據源實例時,系統會一次性的建立多個數據庫鏈接,並把這些數據庫鏈接保存在鏈接池中。當程序須要進行數據庫訪問時,無需從新得到數據庫鏈接,直接從鏈接池中取出一個空閒的數據庫鏈接,當程序使用數據庫鏈接訪問數據庫結束後,無須管理數據庫鏈接,而是將數據庫鏈接歸還給鏈接池便可。經過這種方式能夠避免頻繁的獲取和關閉數據庫鏈接致使性能降低。

配置LOG4J日誌
Mybatis的配置文件中配置了日誌信息,因此在此要對日至框架LOG4J進行配置。
首先在項目的pom文件中添加LOG4J的依賴:
數據庫

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4 <mapper namespace="com.snow.dcl.mapper.UserMapper">
  5     <insert id="saveUser" parameterType="com.snow.dcl.domain.User" useGeneratedKeys="true">
  6         insert into tb_user(name,sex,age) values (#{name},#{sex},#{age});
  7     </insert>
  8 </mapper>

在項目的resources目錄下建立log4j.properties文件:
mybatis06
編寫以下內容:
  1 #全局的日誌配置
  2 log4j.rootLogger=ERROR, stdout
  3 #Mybatis的日誌配置
  4 log4j.logger.com.snow.dcl.mapper.UserMapper=DEBUG
  5 #控制檯輸出
  6 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  7 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  8 log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss}-%t-[%p]\: %m%n

測試
在test目錄的java目錄下建立測試Java類文件Test.java:
mybatis07
編寫以下代碼:
  1 public class Test {
  2     public static void main(String[] args) throws IOException {
  3         InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  4         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  5         SqlSession sqlSession = sqlSessionFactory.openSession();
  6         User user = new User("Dcl_Snow","",18);
  7         sqlSession.insert("com.snow.dcl.mapper.UserMapper.saveUser",user);
  8         sqlSession.commit();
  9         sqlSession.close();
 10     }
 11 }

執行結果:
mybatis08
查看數據庫表數據:
mybatis09
Mybatis的持久化操做過程 1.開發持久化類PO和編寫持久化操做的Mapper.xml,在其中定義要執行的SQL語句。 2.獲取SqlSessionFactory。 3.獲取SqlSession。 4.用面向對象的方式操做數據庫。 5.關閉事務,關閉SqlSession。
相關文章
相關標籤/搜索