161-為什么mapper層的注解@Mapper可以取消,但是@Service與@Controller卻不能取消呢?


Spring容器中的對象是怎么被加載進來的?

  分為兩種方式,一種是xml創建<bean>標簽;一種是書寫注解,然后在配置文件中掃描注解。注意注解只有加到類上面才能才能生成實體類,然后放到Spring容器中,就像我們將@Service是添加的ServieImpl實現類生一樣。配置注解,必須配置注解掃描。

 

Mapper接口的實例化對象是怎么被加載進Spring容器中的?
  我猜測當我使用Spirng框架與Mybatis框架時,Mapper采用動態代理創建的對象會被自動放到Spring容器,我們時不需要配置注解與掃描路徑的。

  

 @Mapper注解與@Service與@Controller的區別?

  @Service與@Controller屬於Spring框架的注解,注解在類上,需要被掃描才能創建實例化對象,並將對象放到Spring容器中。
  @Mapper注解是Mybatis框架的注解,使用這個注解我們的接口就可以被Mybatis框架加載,然后動態代理生成實體類,然后就將實體類放到了spring容器中。

 

我們時怎么從Spring容器中獲取對象的呢?
  
有兩種方式:一種是通過名字,默認定義的時類名的首字母小寫,另一種就是byType,通過接口,但是實際上注入的是接口的同源實現類。

 

@MapperSacan(com.bjpowernode.mapper)的作用是什么呢?
  對mapper包下的所有類添加@Mapper注解,這個掃描和@Service的掃描不一樣。
  

/**
 * 添加了@Mapper注解之后這個接口在編譯時會生成相應的實現類
 * 
 * 需要注意的是:這個接口中不可以定義同名的方法,因為會生成相同的id
 * 也就是說這個接口是不支持重載的
 */
@Mapper
public interface UserDAO {
 
    @Select("select * from user where name = #{name}")
    public User find(String name);

    /**
      * 對於多個參數來說,每個參數之前都要加上@Param注解,
      * 要不然會找不到對應的參數進而報錯
      */
    @Select("select * from user where name = #{name} and pwd = #{pwd}")
    public User login(@Param("name")String name, @Param("pwd")String pwd);
}

 


免責聲明!

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



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