01、MyBatis HelloWorld

1. MyBatis簡介

1)MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架

2)MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集

3)MyBatis可以使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的 Java 對象)映射成數據庫中的記錄

2. 使用 MyBatis原因

1)JDBC

(1)SQL 夾在 Java 代碼塊裏,耦合度高導致硬編碼內傷

(2)維護不易且實際開發需求中 sql 是有變化,頻繁修改的情況多見

2)Hibernate 和 JPA

(1)長難複雜 SQL,對於 Hibernate 而言處理也不容易

(2)內部自動生產的 SQL,不容易做特殊優化

(3)基於全映射的全自動框架,大量字段的 POJO 進行部分映射時比較困難。導致數據庫性能下降

3)MyBatis

(1)對開發人員而言,核心 sql 還是需要自己優化

(2)sql 和 java 編碼分開,功能邊界清晰,一個專注業務、一個專注數據

3. MyBatis下載

1)下載網址

https://github.com/mybatis/mybatis-3/

 

 

 

 

 

 

 

 

 

4. MyBatis HelloWorld

  · HelloWorld

 – 創建一張測試表

    – 創建對應的javaBean

    – 創建mybatis配置文件,sql映射文件

    – 測試

1) 開發環境準備

(1) 導入 MyBatis 框架的 jar 包、Mysql 驅動包、log4j 的 jar 包

log4j:經典的一種日誌解決方案。內部把日誌系統抽象封裝成Logger 、appender 、pattern 等實現。我們可以通過配置文件輕鬆的實現日誌系統的管理和多樣化配置。

mysql-connector:連接數據庫的驅動

mybatis:使用mybatis框架

log4j-1.2.17.jar

mybatis-3.4.1.jar

mysql-connector-java-5.1.37-bin.jar

(2)導入log4j的配置文件 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 3 
 4 <log4j:configuration
 5     xmlns:log4j="http://jakarta.apache.org/log4j/">
 6 
 7     <appender name="STDOUT"
 8         class="org.apache.log4j.ConsoleAppender">
 9         <param name="Encoding" value="UTF-8" />
10         <layout class="org.apache.log4j.PatternLayout">
11             <param name="ConversionPattern"
12                 value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
13         </layout>
14     </appender>
15     <logger name="java.sql">
16         <level value="debug" />
17     </logger>
18     <logger name="org.apache.ibatis">
19         <level value="info" />
20     </logger>
21     <root>
22         <level value="debug" />
23         <appender-ref ref="STDOUT" />
24     </root>
25 </log4j:configuration>
log4j.xml

2)創建Mysql測試表

-- 創建庫

CREATE DATABASE test_mybatis;

-- 使用庫

USE test_mybatis;

-- 創建表

CREATE TABLE tbl_employee(

  id INT(11) PRIMARY KEY AUTO_INCREMENT,

  last_name VARCHAR(50),

  email VARCHAR(50),

  gender CHAR(1)

);

3)Employee

  使用Employee接收數據庫的記錄. 

 1 public class Employee {
 2     
 3     private Integer id;
 4     private String lastName;
 5     private String email;
 6     private String gender;
 7     
 8     
 9     public Integer getId() {
10         return id;
11     }
12     public void setId(Integer id) {
13         this.id = id;
14     }
15     public String getLastName() {
16         return lastName;
17     }
18     public void setLastName(String lastName) {
19         this.lastName = lastName;
20     }
21     public String getEmail() {
22         return email;
23     }
24     public void setEmail(String email) {
25         this.email = email;
26     }
27     public String getGender() {
28         return gender;
29     }
30     public void setGender(String gender) {
31         this.gender = gender;
32     }
33     @Override
34     public String toString() {
35         return "Employee [id=" + id + ", lastName=" + lastName + ", email="
36                 + email + ", gender=" + gender + "]";
37     }
38 }
Employee.java

4)配置文件

(1)參考MyBatis官方手冊

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <environments default="development">
 7         <environment id="development">
 8             <transactionManager type="JDBC" />
 9             <dataSource type="POOLED">
10                 <property name="driver" value="com.mysql.jdbc.Driver" />
11                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
12                 <property name="username" value="root" />
13                 <property name="password" value="root123" />
14             </dataSource>
15         </environment>
16     </environments>
17     
18     <!-- !!!!!!!!!非常重要!!!!!!!!!!!! -->
19     <!-- 將我們寫好的sql映射文件<EmployeeMapper.xml>一定要註冊到全局配置文件中 -->
20     <mappers>
21         <mapper resource="EmployeeMapper.xml" />
22     </mappers>
23     
24 </configuration>
MyBatis-config.xml

(2)創建MyBatis的SQL映射文件

 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.atguigu.mybatis.EmployeeMapper">
 6 <!-- 
 7     namespace:名稱空間;指定爲接口的全類名
 8     id:唯一標識
 9     resultType:返回值類型
10     #{id}:從傳遞過來的參數中取出id值
11     public Employee getEmpById(Integer id);
12  -->
13     <select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee">
14         select id,last_name lastName,email,gender from tbl_employee where id = #{id}
15     </select>
16 </mapper>
EmployeeMapper.xml

5)測試

(1) 構建 SqlSessionFactory

  根據全局配置文件,利用SqlSessionFactoryBuilder創建SqlSessionFactory 

  String resource = "mybatis-config.xml";

  InputStream inputStream = Resources.getResourceAsStream(resource);

  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

(2)從 SqlSessionFactory 中獲取 SqlSession

  使用SqlSessionFactory獲取sqlSession對象。一個SqlSession對象代表和數據庫的一次會話。

  使用SqlSession根據方法id進行操作。

 ① 最新版的Session獲取方式

try (SqlSession session = sqlSessionFactory.openSession()) {

  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

}

② 4.1版本獲取方式

// 獲取sqlSession實例,能直接執行已經映射的sql語句

// sql的唯一標識:statement Unique identifier matching the statement to use.

// 執行sql要用的參數:parameter A parameter object to pass to the statement.

   SqlSession openSession = sqlSessionFactory.openSession();

  try {

    Employee employee = openSession.selectOne("com.atguigu.mybatis.EmployeeMapper.selectEmp", 1);

    System.out.println(employee);

  } finally {

    openSession.close();

  }

(3)NameSpaces說明

  

  (4)注入框架說明

 


使用接口式編程

 

1 public interface EmployeeMapper {
2     public Employee getEmpById(Integer id);
3 }
EmployeeMapper.java
 1     @Test
 2     public void test1() throws IOException {
 3         
 4         //1. 獲取SQLSessionFactory對象
 5         String resource = "mybatis-config.xml";
 6         InputStream inputStream = Resources.getResourceAsStream(resource);
 7         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 8         
 9         //2.獲取sqlsession對象
10         SqlSession openSession = sqlSessionFactory.openSession();
11         
12         //3.獲取接口的實現類對象 接口的類對象會爲接口自動的創建一個代理對象,代理對象去執行增刪改查方法
13         try {
14             EmployeeMapper mapper =  openSession.getMapper(EmployeeMapper.class);
15             Employee employee = mapper.getEmpById(1);
16             System.out.println(mapper.getClass());
17             System.out.println(employee);
18         } finally {
19             openSession.close();
20         }
21         
22     }
EmployeeTest.java
1     <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
2         select id,last_name lastName,email,gender from tbl_employee where id = #{id}
3     </select>
EmployeeMapper.xml

 參考文檔:https://mybatis.org/mybatis-3/zh/getting-started.html

https://github.com/mybatis/mybatis-3/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章