1. 程式人生 > >MyBatis常用註解

MyBatis常用註解

“雪消門外千山綠,花發江邊二月晴”

介紹

在前面介紹過MyBatis基於對映關係(也就是XML檔案配置)來實現操作資料庫MyBatis關聯對映關係 現在,我們來看下基於註解,MyBatis如何實現資料庫的CRUD(增刪改查)操作。

MyBatis常用Annotation註解

註解 功能
Select 對映查詢的SQL語句
SelectProvider Select語句的動態SOL對映。允許指定一個類名和一個方法在執行時返回執行的查詢語句。有兩個屬性:type和 method,type屬性是類的完全限定名,method是該類中的那個方法名。
Insert 對映插入的SQL語句
InsertProvider Insert語句的動態SQL對映。允許指定一個類名和一個方法在執行時返回執行的查詢語句。有兩個屬性:type和 method,type屬性是類的完全限定名,method是該類中的那個方法名。
Update 對映更新的SQL語句
UpdateProvider Update語句的動態SQL。允許指定一個類名和一個方法在執行時返回執行的查詢語句。有兩個屬性:type和 method,type屬性是類的完全限定名,method是該類中的那個方法名。
Delete 對映刪除的SQL語句
DeleteProvider Delete句的動態SQL對映。允許指定一個類名和一個方法在執行時返回執行的查詢語句。有兩個屬性:type和 method,type屬性是類的完全限定名,method是該類中的那個方法名。
Result 在列和屬性之間的單獨結果對映。屬性包括:id、 column、 property、 javaType、jdbeType、 typeHandler、one、many。id屬性是一個布林值,表示是否被用於主鍵對映。one屬性是單獨的聯絡,和XML配置中的 <association>相似,而many屬性是對集合而言的,和XML配置的<collection>相似。
Options 提供配置選項的附加值,它們通常在對映句上作為附加功能配置出現。
one 複雜型別的單獨屬性值對映。必指定 select屬性,表示已對映的SQL語句的完全限定名。
Many 複雜型別的集合屬性對映。必指定 select屬性,表示已對映的SQL語句的完全限定名。
Param 當對映器方法需要多個引數時,這個註解可以被應用於對映器方法引數來給每個引數取一個名字。否則,多引數將會以它們的順序位置和SQL語句中的表示式進行對映,這是預設的。

示例

基於註解的CRUD操作: mapper.java檔案(因為這裡是基於註解實現的,所以沒有xml檔案)

import org.apache.ibatis.annotations.*;
import org.arunner.domain.User;

import java.util.List;

/**
 * @author arunner
 * @date 2018/11/10
 */
public interface UserMapper {
	//新增
    @Insert("insert into tb_user (name,sex,age) values (#{name},#{sex},#{age})")
    @Options(useGeneratedKeys = true,keyProperty = "id")
//    useGeneratedKeys = true表示使用資料庫自動增長的主鍵,需要底層資料庫的支援。keyProperty = "id"表示將插入資料生成的主鍵設定到user物件的id當中
    int saveUser(User user);
	
	//刪除
    @Delete("delete from tb_user where id = #{id}")
    int removeUser(@Param("id") Integer id);

	//更新
    @Update("update tb_user set name=#{name},age=#{age},sex=#{sex} where id = #{id}")
    void modifyUser(User user);

	//根據ID查詢
    @Select("select * from tb_user where id= #{id}")
    @Results({
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "name",property = "name"),
            @Result(column = "age",property = "age"),
            @Result(column = "sex",property = "sex"),
    })
//    @Result註解用於列和屬性之間的結果對映,如果列和屬性名稱相同,則可以省略該註解,MyBatis會自動進行對映
    User selectUserById(Integer id);
	
	//查詢所有
    @Select("select * from tb_user")
    List<User> selectAllUser();
}

測試插入操作:

public class InsertTest {
    public static void main(String[] args) {
        //獲取sqlSession物件
        SqlSession sqlSession = FKSqlSessionFactory.getSqlSession();
        //獲得mapper的代理物件
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //建立user物件,並設定屬性
        User user = new User();
        user.setAge(16);
        user.setName("arunner");
        user.setSex("男");
        //插入資料
        mapper.saveUser(user);
        //檢視插入資料生成的主鍵
        System.out.println(user.getId());
        //提交事務
        sqlSession.commit();
        //關閉sqlSession物件
        sqlSession.close();
    }
}

在這裡插入圖片描述 其他操作請自行測試。