本文以一個簡單的小例子,簡述在Java項目開發中MyBatis的基本用法,屬於入門級文章,僅供學習分享使用,若有不足之處,還請指正。java
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 能夠使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)爲數據庫中的記錄。mysql
環境搭建步驟:sql
MyBatis須要的Jar包,共2個,以下所示:數據庫
1 //MyBatis包 2 mybatis-3.5.3.jar 3 //MySql數據庫鏈接驅動包 4 mysql-connector-java-5.1.6.jar
在src目錄下,新增一個MyBatis的配置文件【mybatis-config.xml】,主要配置數據庫鏈接相關環境信息和Mapper信息,具體內容以下:session
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>
本例中新增長一個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 }
增長ProductMapper.xml文件,用於操做數據庫,包含數據表Products的CRUD操做。以下所示:app
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>
具體代碼,以下所示:框架
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();
關於數據表的增刪改查,以下所示: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-------------------------
定風波·三月七日 學習
做者:蘇軾 (宋)
三月七日,沙湖道中遇雨。雨具先去,同行皆狼狽,餘獨不覺。已而遂晴,故做此。
莫聽穿林打葉聲,何妨吟嘯且徐行。竹杖芒鞋輕勝馬,誰怕?一蓑煙雨任生平。
料峭春風吹酒醒,微冷,山頭斜照卻相迎。回首向來瀟瑟處,歸去,也無風雨也無晴。