Mybatis常見注解有哪些?這篇總結全面了


當下,注解非常流行,以前很長篇的代碼,現在基本上一個注解就能搞定。

那,在Mybatis中又有哪些注解呢?

Mybatis中的注解基本上都在org.apache.ibatis.annotations目錄下:

@MapperScan
該注解存在着爭議,但不可否認的是這個注解確實是Mybatis的注解,是為了集成Spring而寫的注解。該注解主要是掃描某個包目錄下的Mapper,將Mapper接口類交給Spring進行管理。

org.mybatis.spring.annotation.MapperScan
使用方式
@SpringBootApplication
@MapperScan("com.tian.mybatis.mapper")
public class Application {
}
其實,從名字上就能看出,是用來掃描的Mapper的。

掃描包路徑可以是一個或者多個,也可以在路徑中可以使用 * 作為通配符對包名進行匹配 。

@SpringBootApplication
@MapperScan("com.tian.*.mapper")
public class Application {
}
@SpringBootApplication
@MapperScan({"com.tian.mybatis.mapper","com.tian.mybatis.mapper1"})
public class Application {
}
靈活度相當高,這樣在實際上項目中,我們就可以指定掃描想要被掃描的包路徑。

@Mapper
該注解目的就是為了不再寫mapper映射文件 (UserMapper.xml)。可以大大的簡化編寫xml的繁瑣。該注解是由Mybatis框架中定義的一個描述數據層接口的注解,注解往往起到的都是一個描述性作用,用於告訴Spring框架此接口的實現類由Mybatis負責創建,並將其實現類對象存儲到spring容器中。

使用方式
@Mapper
public interface UserMapper {
User selectById(Integer id);
}
@Insert
插入記錄的時候主鍵如何生成?對此基本上有三種方案,分別是:手動指定(應用層)、自增主鍵(數據層單表)、選擇主鍵(數據層多表)。

對應xml文件中的 標簽。

在應用層手動指定主鍵
手動指定的方式不把主鍵區別看待,插入之前在應用層生成對象的時候就會給主鍵一個值,插入的時候與普通字段沒啥區別。

/**

  • 插入記錄,手動分配主鍵
    */
    @Insert("INSERT INTO t_user (id, username, passwd) VALUES (#{id}, #{username}, #{passwd})")
    int addUserAssignKey(User user);
    在上面的這個例子中,mybatis並不知道到底哪個字段是主鍵,id雖然是主鍵字段,但並沒有被區別對待。

「注意」

{username}這種寫法,是把User作為了當前上下文,這樣訪問User的屬性的時候直接寫屬性名字就可以了。

表自增主鍵
自增主鍵對應着XML配置中的主鍵回填,一個簡單的例子:

/**

  • 插入記錄,數據庫生成主鍵
    */
    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert("INSERT INTO t_user (username, passwd) VALUES (#{username}, #{passwd})")
    int addUserGeneratedKey(User user);
    使用Option來對應着XML設置的select標簽的屬性,userGeneratordKeys表示要使用自增主鍵,keyProperty用來指定主鍵字段的字段名。自增主鍵會使用數據庫底層的自增特性。

選擇主鍵
選擇主鍵從數據層生成一個值,並用這個值作為主鍵的值。

/**

  • 插入記錄,選擇主鍵
    */
    @Insert("INSERT INTO t_user (username, passwd) VALUES (#{username}, #{passwd})")
    @SelectKey(statement = "SELECT UNIX_TIMESTAMP(NOW())", keyColumn = "id", keyProperty = "id", resultType = Long.class, before = true)
    int addUserSelectKey(User user);
    @Delete
    刪除的時候只要把語句條件神馬的寫在@Delete注解的value里就好了,返回一個int類型是被成功刪除的記錄數。對應xml文件中的 標簽。

/**

  • 刪除記錄
    */
    @Delete("DELETE FROM t_user WHERE id=#{id}")
    int delete(Long id);
    @Update
    修改的時候和刪除一樣只要把SQL語句寫在@Update的value中就好了,返回一個int類型表示被修改的記錄行數。

對應xml文件中的 標簽。

/**

  • 修改記錄
    */
    @Update("UPDATE t_user SET username=#{username}, passwd=#{passwd} WHERE id=#{id}")
    int update(User user);
    @Select
    查詢的時候稍稍有些復雜,因為查詢會涉及到如何將查出來的字段設置到對象上,對應xml文件中的


免責聲明!

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



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