MyBatis常用註解
阿新 • • 發佈:2018-12-20
“雪消門外千山綠,花發江邊二月晴”
介紹
在前面介紹過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();
}
}
其他操作請自行測試。