mybatis實現mapper代理模式的方式

今晚繼續復習mybtis
以根據id值查詢單條數據為例
編寫SqlMapConfig.xml文件

<configuration> 
<!-- 使用mybatis需要的數據源和事務配置,後續如果整合spring之後,將不再需要 --> 
<environments default="development"> 
<!-- 配置數據源和事務 --> 
<environment id="development"> 
<!-- 配置事務管理,將事務管理交給mybatis管理 --> <transactionManager type="JDBC" /> 
<!-- 配置數據源 --> 
<dataSource type="POOLED">
 <property name = "driver" value = "com.mysql.jdbc.Driver" /> 
 <property name="url" value="jdbc:mysql://localhost:3306/db_shop? useUnicode=true&amp;characterEncoding=utf-8"/>
  <property name="username" value="root"/> <property name="password" value=""/>
   </dataSource>
    </environment> 
    </environments>
     <!-- 加載**.xml配置文件 --> 
     <mappers> 
     <mapper resource="product.xml"/>
</mappers> 
</configuration>

編寫失血模型對象:Product,最好字段名和數據庫裡面的字段名一直

/**** <p>Title: Product</p> * 
<p>Description: 商品類失血模型</p> *
 @author Alon *
  @date 2020年9月27日 下午6:51:57 
  * @version 1.0 */ 
 public class Product {
  private int p_id;
   private String name; 
   private int p_number;
    private double price; 
    private String add_time;
     public Product(int p_id, String name, int p_number, double price, String add_time) { 
     super();
      this.p_id = p_id; 
      this.name = name; 
      this.p_number = p_number; 
      this.price = price; 
      this.add_time = add_time; 
      }public Product() { 
        super();
       }
       public int getP_id() { 
       return p_id; }
       public void setP_id(int p_id) { 
       this.p_id = p_id; }public String getName() { return name; }
       public void setName(String name) { this.name = name; }
       public int getP_number() { 
       return p_number; }
       public void setP_number(int p_number) { this.p_number = p_number; }
       public double getPrice() { return price; }
       public void setPrice(double price) { this.price = price; }
       public String getAdd_time() { return add_time;
}
public void setAdd_time(String add_time) { this.add_time = add_time; }
@Override 
public String toString() { 
return "Product [p_id=" + p_id + ", name=" + name + ", p_number=" + p_number + ", price=" + price + ", add_time=" + add_time + "]"; } }

編寫單個映射關系的sql.xml:product.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- 映射的sql文件 namespace:命名空間,可以理解成將部分的sql語句進行隔離。到後面的mapper代理方式將有更 加重要的作用 --> <mapper namespace="test"> 
 <!--select:表示要執行的查詢語句 id:給這個查詢語句取一個名字,唯一的,java中要調用的使用。
  parameterType:輸入參數的數據類型 
  resultType:輸出參數的數據類型,一般綁定成model的對象 #{value}:表示用來和占位符一樣,用來接受輸入的參數值。 --> <select id="findById" parameterType="java.lang.Integer" resultType="com.woniuxy.model.Product">
   SELECT * FROM t_product WHERE p_id = #{value}
    </select>
     </mapper>

編寫java代碼進行測試執行sql語句並得到結果

/**** <p>Title: MybatisDemo1</p> *
 <p>Description: 查詢數據的demo</p> *
  @author Alon 
  * @date 2020年9月27日 下午7:05:32 
  * * @version 1.0 */ 
  * public class MybatisDemo1 {
  *  public static void main(String[] args) throws IOException { 
  * new MybatisDemo1().queryById(); }
  * public void queryById() throws IOException {
  *  //1、讀取到SqlMapConfig.xml文件的流 String path = "SqlMapConfig.xml"; 
  * InputStream config = Resources.getResourceAsStream(path);
//創建會話工廠,同時將SqlMapConfig.xml裡面的數據放到工廠中 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); 
//開啟會話 SqlSession sqlSession = factory.openSession(); /** 第一個參數:要執行哪個sql語句的參數,一般命名空間.id值 * 第二個參數:傳入填充#{value}的傳入參數值。 */ 
Object obj = sqlSession.selectOne("test.findById", 1); System.out.println(obj); } }

進行模糊查詢:查詢出多條結果集

<!-- 在原有的xml文件中進行配置即可,不需要新建,之前的也已經在SqlMapConfig.xml文件中進行瞭配 置 --> <select id="queryByName" parameterType="java.lang.String" resultType="com.woniuxy.model.Product"> SELECT * FROM t_product WHERE name like "%${value}%" </select> public void queryByName() throws Exception
{
 String path = "SqlMapConfig.xml"; //獲取流對象 InputStream config = Resources.getResourceAsStream(path); //獲取會話工廠 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); //開啟會話 SqlSession sqlSession = factory.openSession(); /** 因為執行結果有多條語句,那麼必須使用selectList */ List<Object> list = sqlSession.selectList("test.queryByName", "旺仔"); //迭代 System.out.println(list); 
}

新增語句

<!-- 新增一條數據 parameterType:傳入參數的數據類型,用失血模型對象即可。 --> 
<insert id="insertProduct" parameterType="com.woniuxy.model.Product"> 
INSERT INTO t_product(name,p_number,price) value(#{name},#{p_number},# {price}); 
</insert>
/**
**<p>Title: insert</p> 
*<p>Description: 新增數據</p> 
* @throws Exception 
* */ public void insert() throws Exception{ String path = "SqlMapConfig.xml"; 
* //獲取流對象 
* InputStream config = Resources.getResourceAsStream(path); //獲取會話工廠
*  SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); 
* //開啟會話 
* SqlSession sqlSession = factory.openSession();
*  Product prod = new Product();
*  prod.setName("雪碧"); 
* prod.setP_number(10); 
* prod.setPrice(3.0);
*  int row = sqlSession.insert("test.insertProduct", prod); System.out.println(row); sqlSession.commit(); sqlSession.close(); }

mapper代理的方式進行講解增、刪、改、查(重點)
步驟1:創建對應的Mapper接口,和之前的dao接口一致
步驟2:編寫對應的xxmapper.xml配置文件。有要求
1)mapper標簽裡面的namespace:必須寫成對應的Mapper接口的全路徑名
2)sql語句裡面的id:必須和接口中對應方法的名稱一致。
3)sql語句裡面的parameterType:必須要和接口中方法的形式參數數據類型一致
4)sql語句裡面的resultType:必須和接口中方法的返回值數據類型一致
步驟3:將編寫好的**mapper.xml文件在SqlMapConfig.xml文件中加載
步驟4:編寫實現類,並在這裡直接測試
別名和mapper映射詳解
設置別名
在mybatis配置文件中,別名是一直存在的,實際上在框架中已經存在一些默認的別名。比如
java.lang.String對應的別名:String,java.lang.Integer對應的別名:int
在開發中,一般mapper.xml配置文件中的parameterType和resultType往往對應的名稱需要寫上
model的全路徑,而且還是多次被重復使用,可以選擇給該路徑取一個別名。用別名來替換比較復雜的
全路徑名
以掃描包的形式進行配置
自定義的POJO類(重點)
自定義POJO類,一般指的是高級查詢,在想要的數據和傳入的條件不再一張表中,通過表所創建的失血
模型model已經不能夠滿足傳入參數的需求瞭,這個時候,就需要使用自定義的POJO類
因為一個失血模型已經不能夠滿足查詢輸入參數的要求瞭,所以進行擴展,創建一個UserCustom類,裡
面包含user對象聲明和userInfo對象聲明

以上就是mybatis實現mapper代理模式的方式的詳細內容,更多關於mybatis mapper代理模式的資料請關註WalkonNet其它相關文章!

推薦閱讀: