Mybatis的mapper代理開發dao方法


看完了之前的mybatis原始的dao開發方法是不是覺得有點笨重,甚至說沒有發揮mybatis

作為一個框架的優勢。總結了一下,原始的dao方法有以下幾點不足之處

  1. dao接口實現方法中存在大量的模板方法,比如:
    SqlSession sqlSession = sqlSessionFacory.openSession();
    sqlSession.commit();
    sqlSession.close();

    這三行代碼幾乎在每個方法里面都能看見,設想能否將這些代碼提取出來,大大減輕程序員的工作量。

  2. 調用sqlSession方法時將statement的id硬編碼了。比如之前findUserById方法中的“test.findUserById”。
  3. 調用sqlSession方法時傳入變量,由於sqlSession方法使用泛型,即使變量類型傳入錯誤,在編譯階段也不會報錯。

所以既然出現了問題,改進是勢在必行的。接下來就讓我們看看如何改進。

當然就是今天的主題mapper代理開發方式了

正在這種開發方式中,程序員需要編寫mapper.xml文件,其實就是一個類似於之前的user.xml的文件

另外在mapper代理方法中程序員只要寫mapper接口(相當於dao接口)遵循一些開發規范,mybatis可以自動生成mapper接口實現類代理對象(就是實現接口類不用咱們去寫了)

具體有以下幾個規范:

  1. 在mapper.xml中的namespace等於mapper接口地址  

  

  1. mapper.java接口中的方法名和mapper.xml中的statement的id一致
  2. mappe.java接口中的輸入參數類型和mapper.xml中的statement的parameterType指定的的參數類型一致。
  3.  mapper.java接口中的返回值參數類型和mapper.xml中的statement的resultType的指定的類型一致。

根據以上規范可以寫出根據id查詢用戶信息方法的定義了

為了更好地理解上面的規范,下面給出映射文件方便進行對比

總結一下:以上規范就是對下面代碼進行統一生成

因為別的方法都大同小異,所以這里只寫了一個方法findUserById,下面測試也是一樣,直接測試mapper接口里的findUserById方法,別的方法就不去測試了

代碼如下:

public class UserMapperTest {

    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void setUp() throws Exception {
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //創建會話會話工廠
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindUserById() throws Exception {
        //創建會話
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創建mapper代理對象
        UserMapper userMapper= sqlSession.getMapper(UserMapper.class);
        //調用代理對象的方法,打印結果
        System.out.println(userMapper.findUserById(32));    
    }

}

里面最重要的一句就是

UserMapper userMapper= sqlSession.getMapper(UserMapper.class);

這句代碼把我們之前的創建接口的實現類這一步的工作省略了,直接生成一個代理對象,然后通過這個對象去調用方法,執行一系列操作

結果如下:

 

好了,到這里兩種dao開發方法都講完了,當然后面與spring整合之后的dao開發方法更系統,用起來更棒更爽,請期待更新。。。

 


免責聲明!

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



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