一塊兒學MyBatis之入門篇

概述

本文以一個簡單的小例子,簡述在Java項目開發中MyBatis的基本用法,屬於入門級文章,僅供學習分享使用,若有不足之處,還請指正。java

什麼是MyBatis?

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 能夠使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)爲數據庫中的記錄。mysql

MyBatis環境的搭建

環境搭建步驟:sql

1. 新建一個Java Project,並引入須要的Jar包。

MyBatis須要的Jar包,共2個,以下所示:數據庫

1 //MyBatis包
2 mybatis-3.5.3.jar
3 //MySql數據庫鏈接驅動包
4 mysql-connector-java-5.1.6.jar

2. 新增MyBatis配置文件

在src目錄下,新增一個MyBatis的配置文件【mybatis-config.xml】,主要配置數據庫鏈接相關環境信息和Mapper信息,具體內容以下:session

  • environments 節點配置數據庫環境,能夠有多個配置,default表示默認鏈接哪一個環境。
  • mappers配置引入的映射文件,採用相對路徑的方式。
 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     <!-- 加載配置文件db.properties -->
 7     <properties resource="db.properties"></properties>
 8     <!-- 經過指定environments的default值和 environment的id,指定mybatis運行的數據庫環境-->
 9     <environments default="development">
10         <environment id="development">
11             <transactionManager type="JDBC" />
12             <!-- dataSource數據源類型:
13                 UNPOOLED:不採用鏈接池,默認採用JDBC的方式,須要沒有鏈接打開關閉
14                 POOLED:採用鏈接池進行數據庫鏈接
15                 JNDI:從Tomcat中獲一個內置的數據庫鏈接池
16              -->
17             <dataSource type="POOLED">
18                 <property name="driver" value="${jdbc.driver}" />
19                 <property name="url" value="${jdbc.url}" />
20                 <property name="username" value="${jdbc.username}" />
21                 <property name="password" value="${jdbc.password}" />
22             </dataSource>
23         </environment>
24     </environments>
25     <mappers>
26         <mapper resource="com/hex/mybatis/ProductMapper.xml" />
27     </mappers>
28 </configuration>

3. 新增長一個模型類

本例中新增長一個Product類,包含三個屬性,代碼以下:mybatis

 1 package com.hex.mybatis;
 2 
 3 /**
 4  * 產品類模型
 5  * @author Administrator
 6  *
 7  */
 8 public class Product {
 9     
10     private String pid; //產品ID
11     private String pname; //產品name
12     private float price; //產品價格
13     
14     public Product() {
15         
16     }
17     
18     public Product(String pid, String pname, float price) {
19         this.pid = pid;
20         this.pname = pname;
21         this.price = price;
22     }
23     
24     public String getPid() {
25         return pid;
26     }
27     public void setPid(String pid) {
28         this.pid = pid;
29     }
30     public String getPname() {
31         return pname;
32     }
33     public void setPname(String pname) {
34         this.pname = pname;
35     }
36     public float getPrice() {
37         return price;
38     }
39     public void setPrice(float price) {
40         this.price = price;
41     }
42     
43     @Override
44     public String toString() {
45         // TODO Auto-generated method stub
46         return "PID="+this.pid+",PNAME="+this.pname+",PRICE="+this.price;
47     }
48 }

4. 新增長Mapper文件

增長ProductMapper.xml文件,用於操做數據庫,包含數據表Products的CRUD操做。以下所示:app

  • mapper節點的namespace屬性表示此映射文件的惟一標識。
  • 標籤的id屬性,表示文件內惟一值,用於查找對應的語句。
  • parameterType表示參數的數據類型。
  • resultType表示返回的數據類型,若是是類對象,必須爲全名稱。
  • sql語句中的佔位符,以 #{屬性名} 格式,不能夠亂寫。
  • 注意:namespace+id,在整個項目中必須惟一。
 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 <!-- namespace 是mapper文件的惟一標識符 -->
 6 <mapper namespace="com.hex.mybatis.ProductMapper">
 7     <!-- 
 8     id:惟一標識符
 9     parameterType:標識輸入參數類型  
10     resultType:返回對象的類型
11     -->
12     <select id="queryProductById" resultType="com.hex.mybatis.Product"
13         parameterType="String">
14         select * from Products where pid = #{id}
15     </select>
16     
17     <!-- 查詢,注意:返回一個值和多個值,resultType同樣 -->
18     <select id="queryProductAll" resultType="com.hex.mybatis.Product">
19         select * from Products where 1=1 
20     </select>
21     
22     <!-- 插入:parameterType:輸入參數類型,在形式上只能有一個,能夠是簡單類型,也能夠是對象類型。
23     若是是對象類型,以 #{屬性名} 格式,不能夠亂寫
24      -->
25     <insert id="addProduct" parameterType="com.hex.mybatis.Product" >
26         insert into Products(pid,pname,price)values(#{pid},#{pname},#{price})
27     </insert>
28     
29     <!-- 更新 -->
30     <update id="updateProductById"  parameterType="com.hex.mybatis.Product">
31         update products set pname=#{pname},price=#{price} where pid=#{pid} 
32     </update>
33     
34     <!-- 刪除 -->
35     <delete id="deleteProductById" parameterType="String">
36         delete from products where pid=#{pid}
37     </delete>
38 </mapper>

4. 使用方法

具體代碼,以下所示:框架

  1. 首先以輸入流的形式加載配置文件。
  2. 經過數據流建立SqlSessionFactory對象
  3. 打開SqlSession
  4. 執行相關操做
  5. 關閉會話對象
 1     //以輸入流的方式加載配置文件
 2     String resource = "mybatis-config.xml";
 3     InputStream inputStream = Resources.getResourceAsStream(resource);
 4     //建立SqlSessionFactory對象,build第二個參數指定environment的id,,若是不寫,默認配置default.
 5     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 6     //建立會話對象
 7     SqlSession session = sqlSessionFactory.openSession();
 8     //-------------------查詢單個對象---------------------
 9     //執行操做,若是queryProductById有相同的名稱,則須要使用徹底限定名,即:namespace+id
10     Product product = session.selectOne("queryProductById", "A-002");
11     System.out.println(product.toString());
12     //---------------------End-------------------------
13     //關閉會話對象
14     session.close();

CRUD操做對象

關於數據表的增刪改查,以下所示:ide

 1     //-------------------新增單個對象---------------------
 2     Product product =new Product("A-006","康師傅綠茶",3.5f);
 3     int count = session.insert("addProduct",product);
 4     session.commit();
 5     System.out.println("新增長了 "+count+" 個產品!!!");
 6     //---------------------End-------------------------
 7     //-------------------修改單個對象---------------------
 8     Product product =new Product("A-004","茉莉花茶",3.2f);
 9     int count = session.update("updateProductById", product);
10     session.commit();
11     System.out.println("修改了 "+count+" 個產品!!!");
12     //---------------------End-------------------------
13     //-------------------刪除單個對象---------------------
14     int count = session.delete("deleteProductById", "A-002");
15     session.commit();
16     System.out.println("刪除了 "+count+" 個產品!!!");
17     //---------------------End-------------------------
18     //-------------------查詢個對象---------------------
19     List<Product> lstProduct =  session.selectList("queryProductAll");
20     for(Product p : lstProduct){
21         System.out.println(p);
22     }
23     //---------------------End-------------------------    

備註

定風波·三月七日  學習

做者:蘇軾 (宋)

三月七日,沙湖道中遇雨。雨具先去,同行皆狼狽,餘獨不覺。已而遂晴,故做此。

莫聽穿林打葉聲,何妨吟嘯且徐行。竹杖芒鞋輕勝馬,誰怕?一蓑煙雨任生平。

料峭春風吹酒醒,微冷,山頭斜照卻相迎。回首向來瀟瑟處,歸去,也無風雨也無晴。

相關文章
相關標籤/搜索