SSM:Mybatis中引入通用mapper


如果你是SSM項目引入通用mapper記得要引入hibernate中的一個hibernate-jpa-2.1-api-1.0.0.Final.jar包(注意必須要Mybatis整合Spring噢,其實tk.mybatis是替換了原有的mybatis-spring連接包中的內容):

如果你是maven項目的話,就比較方便了,使用以下的依賴:

 

這時才能在POJO上使用注解來映射字段和表名,以及一些特殊的使用:

開始演示

pojo中的注解映射表:

package com.domain;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @author mzy
  * 定義orders表對應的實體類
 */
/*
說明:

表名默認使用類名,駝峰轉下划線(只對大寫字母進行處理),如UserInfo默認對應的表名為user_info。
表名可以使用@Table(name = "tableName")進行指定,對不符合第一條默認規則的可以通過這種方式指定表名.
字段默認和@Column一樣,都會作為表字段,表字段默認為Java對象的Field名字駝峰轉下划線形式.
可以使用@Column(name = "fieldName")指定不符合第3條規則的字段名
使用@Transient注解可以忽略字段,添加該注解的字段不會作為表字段使用.
建議一定是有一個@Id注解作為主鍵的字段,可以有多個@Id注解的字段作為聯合主鍵.
如果是MySQL的自增字段,加上@GeneratedValue(generator = "JDBC")即可。如果是其他數據庫,可以參考官網文檔。
 */
@Table(name = "t_order")
public class Order {
    /**
     * 
    CREATE TABLE orders(
        order_id INT PRIMARY KEY AUTO_INCREMENT,
        order_no VARCHAR(20), 
        order_price FLOAT
    );
     */
    
    //Order實體類中屬性名和orders表中的字段名是不一樣的
	@GeneratedValue(generator = "JDBC") // 自增的主鍵映射
	@Id
	@Column(name = "order_id")
	private int id;                //id===>order_id
    @Column(name = "order_no")
	private String orderNo;        //orderNo===>order_no
    @Column(name = "order_price")
    private float price;        //price===>order_price

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price+ "]";
    }
}

此刻如果只涉及普通的單表查詢就不需要創建xml文件映射了,那個*mapper.xml文件實在麻煩,但是Mybatis 3.4.0才開始出現諸注解配置mapper,但是注解配置mapper還是比較麻煩,比較長亂,所以此刻引入通用mapper我們就只在擴大粒度的時候才會加xml文件,並且*mapper.xml中sql會少很多。

這時的Mapper就只用繼承通用Mapper<T>,但是注意要傳入泛型:

package com.mapper;

import org.springframework.stereotype.Repository;

import com.domain.Order;

import tk.mybatis.mapper.common.Mapper;

/*
DAO的寫法
在傳統的Mybatis寫法中,DAO接口需要與Mapper文件關聯,即需要編寫SQL來實現DAO接口中的方法。
而在通用Mapper中,DAO只需要繼承一個通用接口,即可擁有豐富的方法:
	繼承通用的Mapper,必須指定泛型
 */
@Repository
public interface OrderMapper extends Mapper<Order>{
	/*
	 一旦繼承了Mapper,繼承的Mapper就擁有了Mapper所有的通用方法:

	Select
	方法:List<T> select(T record);
	說明:根據實體中的屬性值進行查詢,查詢條件使用等號
	
	方法:T selectByPrimaryKey(Object key);
	說明:根據主鍵字段進行查詢,方法參數必須包含完整的主鍵屬性,查詢條件使用等號
	
	方法:List<T> selectAll();
	說明:查詢全部結果,select(null)方法能達到同樣的效果
	
	方法:T selectOne(T record);
	說明:根據實體中的屬性進行查詢,只能有一個返回值,有多個結果是拋出異常,查詢條件使用等號
	
	方法:int selectCount(T record);
	說明:根據實體中的屬性查詢總數,查詢條件使用等號
	
	Insert
	方法:int insert(T record);
	說明:保存一個實體,null的屬性也會保存,不會使用數據庫默認值
	
	方法:int insertSelective(T record);
	說明:保存一個實體,null的屬性不會保存,會使用數據庫默認值
	
	Update
	方法:int updateByPrimaryKey(T record);
	說明:根據主鍵更新實體全部字段,null值會被更新
	
	方法:int updateByPrimaryKeySelective(T record);
	說明:根據主鍵更新屬性不為null的值
	
	Delete
	方法:int delete(T record);
	說明:根據實體屬性作為條件進行刪除,查詢條件使用等號
	
	方法:int deleteByPrimaryKey(Object key);
	說明:根據主鍵字段進行刪除,方法參數必須包含完整的主鍵屬性
	
	Example方法
	方法:List<T> selectByExample(Object example);
	說明:根據Example條件進行查詢
	重點:這個查詢支持通過Example類指定查詢列,通過selectProperties方法指定查詢列
	
	方法:int selectCountByExample(Object example);
	說明:根據Example條件進行查詢總數
	
	方法:int updateByExample(@Param("record") T record, @Param("example") Object example);
	說明:根據Example條件更新實體record包含的全部屬性,null值會被更新
	
	方法:int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
	說明:根據Example條件更新實體record包含的不是null的屬性值
	
	方法:int deleteByExample(Object example);
	說明:根據Example條件刪除數據
	 */
}

 

測試:

package com.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.domain.Order;
import com.mapper.OrderMapper;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestBySpring {
	
	@Autowired
	OrderMapper Mapper;
	
	@Test
	public void testCommonMapper() {
		List<Order> list = Mapper.selectAll();
		System.err.println(list);
	} 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM