1. 程式人生 > >MyBatis學習筆記之一---入門

MyBatis學習筆記之一---入門

首先給大家推薦幾個網頁:

http://www.mybatis.cn/

http://blog.csdn.net/isea533/article/category/2092001   

http://www.mybatis.org/mybatis-3/zh/index.html

http://www.mybatis.org/spring/zh/index.html

http://www.mybatis.tk/

這些也是我朋友介紹的。剛剛接觸MyBatis可以看看。接下來就開始學習mybatis了。

MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。

 

一、理解什麼是MyBatis?

MyBatis 是支援普通 SQL 查詢,儲存過程和高階對映的優秀持久層框架。 MyBatis 消除了幾乎所有的 JDBC 程式碼和引數的手工設定以及對結果集的檢索。 MyBatis 可以使用簡單的XML 或註解用於配置和原始對映,將介面和 Java 的 POJO( Plain Old Java Objects,普通的Java 物件)對映成資料庫中的記錄.

  1)MyBATIS 目前提供了三種語言實現的版本,包括:Java、.NET以及Ruby。(我主要學習java,就講java的使用)
  2)它提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。
  3)mybatis與hibernate的對比?

   mybatis提供一種“半自動化”的ORM實現。
   這裡的“半自動化”,是相對Hibernate等提供了全面的資料庫封裝機制的“全自動化”ORM實現而言,“全自動”ORM實現了POJO和資料庫表之間的對映,以及 SQL 的自動生成和執行。

    而mybatis的著力點,則在於POJO與SQL之間的對映關係。

 

二、簡單例子(快速入門)

 1)首先建立專案java web

  

2)匯入mybatis所需的jar包

mybatis需要jar包:mybatis-3.3.0.jar

mysql驅動jar包:mysql-connector-java-5.1.15.-bin.jar

日誌記錄jar包:log4j.jar

3)建立資料庫資料(mysql)

 

4)mysql驅動配置檔案(這樣可以優化效能) 

 我個人喜歡把所需要使用到的包先建立好。配置檔案先建立好。

 

 

5)新增mybatis配置檔案mybatis.cfg.xml

複製程式碼

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4 
 5   <!-- 引入外部配置檔案 -->
 6   <properties resource="mysql.properties"></properties>
 7    
 8    <!-- 配置mybatis執行環境 -->
 9      <environments default="cybatis">
10         <environment id="cybatis">
11             <!-- type="JDBC" 代表使用JDBC的提交和回滾來管理事務 -->
12             <transactionManager type="JDBC" />
13             
14             <!-- mybatis提供了3種資料來源型別,分別是:POOLED,UNPOOLED,JNDI -->
15             <!-- POOLED 表示支援JDBC資料來源連線池 -->
16             <!-- UNPOOLED 表示不支援資料來源連線池 -->
17             <!-- JNDI 表示支援外部資料來源連線池 -->
18             <dataSource type="POOLED">
19                 <property name="driver" value="${jdbc.driver}" />
20                 <property name="url" value="${jdbc.url}" />
21                 <property name="username" value="${jdbc.username}" />
22                 <property name="password" value="${jdbc.password}" />
23             </dataSource>
24         </environment>
25     </environments> 
26     
27 </configuration>

複製程式碼

 

 

6)建立對應的實體物件

 

對應的java程式碼:

package com.cy.mybatis.beans;

import java.io.Serializable;

public class UserBean implements Serializable{

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String username;
    private String password;
    private Double account;
    
    public UserBean() {
        super();
    }
    
    public UserBean(String username, String password, Double account) {
        super();
        this.username = username;
        this.password = password;
        this.account = account;
    }

    public UserBean(Integer id, String username, String password, Double account) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
        this.account = account;
    }

    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 Double getAccount() {
        return account;
    }

    public void setAccount(Double account) {
        this.account = account;
    }

    @Override
    public String toString() {
        return "UserBean [id=" + id + ", username=" + username + ", password="
                + password + ", account=" + account + "]";
    }
    
    
    

}

 

 

7)建立方法介面UserMapper.java和定義操作t_user表的sql對映檔案UserMapper.xml

 提供簡單的增刪改查資料資訊。

複製程式碼

 1 package com.cy.mybatis.mapper;
 2 
 3 import java.util.List;
 4 
 5 import com.cy.mybatis.beans.UserBean;
 6 
 7 public interface UserMapper {
 8     /**
 9      * 新增使用者
10      * @param user
11      * @return
12      * @throws Exception
13      */
14     public int insertUser(UserBean user) throws Exception;
15     /**
16      * 修改使用者
17      * @param user
18      * @param id
19      * @return
20      * @throws Exception
21      */
22     public int updateUser (UserBean user,int id) throws Exception;
23      /**
24       * 刪除使用者
25       * @param id
26       * @return
27       * @throws Exception
28       */
29     public int deleteUser(int id) throws Exception;
30     /**
31      * 根據id查詢使用者資訊
32      * @param id
33      * @return
34      * @throws Exception
35      */
36     public UserBean selectUserById(int id) throws Exception;
37      /**
38       * 查詢所有的使用者資訊
39       * @return
40       * @throws Exception
41       */
42     public List<UserBean> selectAllUser() throws Exception;
43 }

複製程式碼

 

UserMapper.xml

複製程式碼

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <mapper namespace="com.cy.mybatis.mapper.UserMapper">
 4 <!-- 自定義返回結果集 -->
 5    <resultMap id="userMap" type="UserBean">
 6         <id property="id" column="id" javaType="java.lang.Integer"></id>
 7         <result property="username" column="username" javaType="java.lang.String"></result>
 8         <result property="password" column="password" javaType="java.lang.String"></result>
 9         <result property="account" column="account" javaType="java.lang.Double"></result>
10     </resultMap>
11 <!-- 在各種標籤中的id屬性必須和介面中的方法名相同 , id屬性值必須是唯一的,不能夠重複使用。parameterType屬性指明查詢時使用的引數型別,resultType屬性指明查詢返回的結果集型別-->    
12 <!-- useGeneratedKeys:( 僅 對 insert 有 用 ) 這 會 告 訴 MyBatis 使 用 JDBC 的getGeneratedKeys 
13             方法來取出由資料(比如:像 MySQL 和 SQLServer 這樣的資料庫管理系統的自動遞增欄位)內部生成的主鍵。預設值: false。 -->    
14 <!--keyProperty: (僅對 insert有用)標記一個屬性, MyBatis 會通過 getGeneratedKeys或者通過 insert 語句的 selectKey 子元素設定它的值。預設:不設定。 -->
15 <!--#{}中的內容,為佔位符,當引數為某個JavaBean時,表示放置該Bean物件的屬性值  -->
16 
17 
18     <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
19         insert into t_user (username,password,account) values (#{username},#{password},#{account})
20     </insert>
21     
22     <update id="updateUser" >
23       update t_user set username=#{username},password=#{password},account=#{account} where id=#{id}
24     </update>
25     
26     <delete id="deleteUser" parameterType="int">
27      delete from t_user where id=#{id}  
28     </delete>
29     
30     <select id="selectUserById" parameterType="int" resultMap="userMap">
31      select * from t_user where id=#{id}
32     </select>
33     
34     <select id="selectAllUser" resultMap="userMap">
35      select * from t_user
36     </select>
37     
38     
39 </mapper>    

複製程式碼

 

這時需要為mybatis.cfg.xml裡註冊UserMapper.xml檔案。

複製程式碼

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4 
 5   <!-- 引入外部配置檔案 -->
 6   <properties resource="mysql.properties"></properties>
 7   
 8   
 9    <!-- 為JAVA Bean起類別名 -->
10    <typeAliases >
11         <!-- 別名方式1,一個一個的配置 type中放置的是類的全路徑,alias中放置的是類別名
12         <typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> -->
13         <!-- 別名方式2,自動掃描,將JAVA類的類名作為類的類別名 -->
14         <package name="com.cy.mybatis.beans"/>
15    </typeAliases>
16    
17    
18    <!-- 配置mybatis執行環境 -->
19      <environments default="cybatis">
20         <environment id="cybatis">
21             <!-- type="JDBC" 代表使用JDBC的提交和回滾來管理事務 -->
22             <transactionManager type="JDBC" />
23             
24             <!-- mybatis提供了3種資料來源型別,分別是:POOLED,UNPOOLED,JNDI -->
25             <!-- POOLED 表示支援JDBC資料來源連線池 -->
26             <!-- UNPOOLED 表示不支援資料來源連線池 -->
27             <!-- JNDI 表示支援外部資料來源連線池 -->
28             <dataSource type="POOLED">
29                 <property name="driver" value="${jdbc.driver}" />
30                 <property name="url" value="${jdbc.url}" />
31                 <property name="username" value="${jdbc.username}" />
32                 <property name="password" value="${jdbc.password}" />
33             </dataSource>
34         </environment>
35     </environments> 
36     
37     
38     <mappers>
39         <!-- 告知對映檔案方式1,一個一個的配置
40         <mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
41         <!-- 告知對映檔案方式2,自動掃描包內的Mapper介面與配置檔案 -->
42         <package name="com/cy/mybatis/mapper"/>
43     </mappers>
44 </configuration>

複製程式碼

 

 

8)需要建立一個工具類檔案

 

複製程式碼

 1 package com.cy.mybatis.tools;
 2 
 3 import java.io.Reader;
 4 
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 public class DBTools {
11     public static SqlSessionFactory sessionFactory;
12     
13     static{
14         try {
15             //使用MyBatis提供的Resources類載入mybatis的配置檔案
16             Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
17             //構建sqlSession的工廠
18             sessionFactory = new SqlSessionFactoryBuilder().build(reader);
19         } catch (Exception e) {
20             e.printStackTrace();
21         }
22         
23     }
24     //建立能執行對映檔案中sql的sqlSession
25     public static SqlSession getSession(){
26         return sessionFactory.openSession();
27     }
28     
29 }

複製程式碼

 

 

9)寫個測試

複製程式碼

 1 package com.cy.mybatis.service;
 2 
 3 import java.util.List;
 4 
 5 import org.apache.ibatis.session.SqlSession;
 6 
 7 import com.cy.mybatis.beans.UserBean;
 8 import com.cy.mybatis.tools.DBTools;
 9 import com.cy.mybatis.mapper.UserMapper;
10 
11 public class UserService {
12 
13    
14 15      
16     public static void main(String[] args) {
17           insertUser();
18 //        deleteUser();
19 //        selectUserById();
20 //        selectAllUser();
21     }
22 
23     
24     /**
25      * 新增使用者
26      */
27     private static void insertUser() {
28         SqlSession session = DBTools.getSession();
29         UserMapper mapper = session.getMapper(UserMapper.class);
30         UserBean user = new UserBean("懿", "1314520", 7000.0);
31         try {
32             mapper.insertUser(user);
33             System.out.println(user.toString());
34              session.commit();
35         } catch (Exception e) {
36             e.printStackTrace();
37             session.rollback();
38         }
39     }
40     
41     
42     /**
43      * 刪除使用者
44      */
45     private static void deleteUser(){
46         SqlSession session=DBTools.getSession();
47         UserMapper mapper=session.getMapper(UserMapper.class);
48         try {
49             mapper.deleteUser(1);
50             session.commit();
51         } catch (Exception e) {
52             e.printStackTrace();
53             session.rollback();
54         }
55     }
56     
57     
58     /**
59      * 根據id查詢使用者
60      */
61     private static void selectUserById(){
62         SqlSession session=DBTools.getSession();
63         UserMapper mapper=session.getMapper(UserMapper.class);
64         try {
65         UserBean user=    mapper.selectUserById(2);
66         System.out.println(user.toString());
67             
68             session.commit();
69         } catch (Exception e) {
70             e.printStackTrace();
71             session.rollback();
72         }
73     }
74     
75     /**
76      * 查詢所有的使用者
77      */
78     private static void selectAllUser(){
79         SqlSession session=DBTools.getSession();
80         UserMapper mapper=session.getMapper(UserMapper.class);
81         try {
82         List<UserBean> user=mapper.selectAllUser();
83         System.out.println(user.toString());
84         session.commit();
85         } catch (Exception e) {
86             e.printStackTrace();
87             session.rollback();
88         }
89     }
90     
91 
92 }

複製程式碼

 

測試結果