- 你們以前都學過面向對象編程,也學習過接口,但在真正的開發中,不少時候咱們會選擇面向接口編程
- 根本緣由 : 解耦 , 可拓展 , 提升複用 , 分層開發中 , 上層不用管具體的實現 , 你們都遵照共同的標準 , 使得開發變得容易 , 規範性更好
- 在一個面向對象的系統中,系統的各類功能是由許許多多的不一樣對象協做完成的。在這種狀況下,各個對象內部是如何實現本身的,對系統設計人員來說就不那麼重要了;
- 而各個對象之間的協做關係則成爲系統設計的關鍵。小到不一樣類之間的通訊,大到各模塊之間的交互,在系統設計之初都是要着重考慮的,這也是系統設計的主要工做內容。面向接口編程就是指按照這種思想來編程。java
關於接口的理解面試
- 接口從更深層次的理解,應是定義(規範,約束)與實現(名實分離的原則)的分離。
- 接口的自己反映了系統設計人員對系統的抽象理解。
- 接口應有兩類:
- 第一類是對一個個體的抽象,它可對應爲一個抽象體(abstract class);
- 第二類是對一個個體某一方面的抽象,即造成一個抽象面(interface);
- 一個體有可能有多個抽象面。抽象體與抽象面是有區別的。sql
三個面向區別數據庫
- 面向對象是指,咱們考慮問題時,以對象爲單位,考慮它的屬性及方法 .
- 面向過程是指,咱們考慮問題時,以一個具體的流程(事務過程)爲單位,考慮它的實現 .
- 接口設計與非接口設計是針對複用技術而言的,與面向對象(過程)不是一個問題.更多的體現就是對系統總體的架構編程
註解在接口上實現安全
@Select("select * from user") List<User> getUsers();
須要再核心配置文件中綁定接口!架構
<!--綁定接口--> <mappers> <mapper class="com.loading.dao.UserMapper"/> </mappers>
測試app
本質:反射機制實現工具
底層:動態代理!學習
Mybatis詳細的執行流程!
咱們能夠在工具類建立的時候實現自動提交事務!
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() 註解
面試題:#{} ${} 區別