mybatis_8使用註解開發

8.一、面向接口編程

- 你們以前都學過面向對象編程,也學習過接口,但在真正的開發中,不少時候咱們會選擇面向接口編程
- 根本緣由 : 解耦 , 可拓展 , 提升複用 , 分層開發中 , 上層不用管具體的實現 , 你們都遵照共同的標準 , 使得開發變得容易 , 規範性更好
- 在一個面向對象的系統中,系統的各類功能是由許許多多的不一樣對象協做完成的。在這種狀況下,各個對象內部是如何實現本身的,對系統設計人員來說就不那麼重要了;
- 而各個對象之間的協做關係則成爲系統設計的關鍵。小到不一樣類之間的通訊,大到各模塊之間的交互,在系統設計之初都是要着重考慮的,這也是系統設計的主要工做內容。面向接口編程就是指按照這種思想來編程。java

關於接口的理解面試

- 接口從更深層次的理解,應是定義(規範,約束)與實現(名實分離的原則)的分離。
- 接口的自己反映了系統設計人員對系統的抽象理解。
- 接口應有兩類:
- 第一類是對一個個體的抽象,它可對應爲一個抽象體(abstract class);
- 第二類是對一個個體某一方面的抽象,即造成一個抽象面(interface);
- 一個體有可能有多個抽象面。抽象體與抽象面是有區別的。sql

三個面向區別數據庫

- 面向對象是指,咱們考慮問題時,以對象爲單位,考慮它的屬性及方法 .
- 面向過程是指,咱們考慮問題時,以一個具體的流程(事務過程)爲單位,考慮它的實現 .
- 接口設計與非接口設計是針對複用技術而言的,與面向對象(過程)不是一個問題.更多的體現就是對系統總體的架構編程

8.二、使用註解開發

  1. 註解在接口上實現安全

    @Select("select * from user")
    List<User> getUsers();
  2. 須要再核心配置文件中綁定接口!架構

    <!--綁定接口-->
    <mappers>
        <mapper class="com.loading.dao.UserMapper"/>
    </mappers>
  3. 測試app

本質:反射機制實現工具

底層:動態代理!學習

Mybatis詳細的執行流程!

8.三、CRUD

咱們能夠在工具類建立的時候實現自動提交事務!

public static SqlSession  getSqlSession(){
    return sqlSessionFactory.openSession(true);
}

編寫接口,增長註解

public interface UserMapper {

    @Select("select * from user")
    List<User> getUsers();

    // 方法存在多個基本類型參數或String類型參數,全部的參數前面必須加上 @Param("id")註解
    @Select("select * from user where id = #{id}")
    User getUserByID(@Param("id") int id);


    @Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})")
    int addUser(User user);

    
    @Update("update user set name=#{name},pwd=#{password} where id = #{id}")
    int updateUser(User user);

    
    @Delete("delete from user where id = #{uid}")
    int deleteUser(@Param("uid") int id);
}

測試類

@Test
    //使用註解查詢用戶annotation
    public void getUserAnnntation(){
        //第一步:得到SqlSession對象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.deleteUser(6);
        if (i>0){
            System.out.println("刪除用戶成功");
        }
    }

【注意:咱們必需要講接口註冊綁定到咱們的核心配置文件中!】

<mappers>    
        <!--綁定的時接口的名字 UserMapper-->
        <mapper class="com.loading.dao.UserMapper"/> 
</mappers>

關於@Param() 註解

  • 基本類型的參數或者String類型,須要加上
  • 引用類型不須要加
  • 若是隻有一個基本類型的話,能夠忽略,可是建議你們都加上!
  • 咱們在SQL中引用的就是咱們這裏的 @Param() 中設定的屬性名!

面試題:#{} ${} 區別

  • 方式可以很大程度防止sql注入,$方式沒法防止Sql注入。

  • $方式通常用於傳入數據庫對象,例如傳入表名。
  • 從安全性上考慮,能使用#儘可能使用#來傳參,由於這樣能夠有效防止SQL注入的問題。
相關文章
相關標籤/搜索