概述
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)。
項目目錄結構如圖:
打開項目的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>
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文件:
編寫以下代碼:
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>
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>
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
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 }