Mybatis的mapper代理開發dao方法

看完了以前的mybatis原始的dao開發方法是否是以爲有點笨重,甚至說沒有發揮mybatisjava

做爲一個框架的優點。總結了一下,原始的dao方法有如下幾點不足之處程序員

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

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

  2. 調用sqlSession方法時將statement的id硬編碼了。好比以前findUserById方法中的「test.findUserById」。
  3. 調用sqlSession方法時傳入變量,因爲sqlSession方法使用泛型,即便變量類型傳入錯誤,在編譯階段也不會報錯。

因此既然出現了問題,改進是勢在必行的。接下來就讓咱們看看如何改進。sql

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

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

另外在mapper代理方法中程序員只要寫mapper接口(至關於dao接口)遵循一些開發規範,mybatis能夠自動生成mapper接口實現類代理對象(就是實現接口類不用我們去寫了)框架

具體有如下幾個規範:測試

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

  

  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開發方法更系統,用起來更棒更爽,請期待更新。。。

相關文章
相關標籤/搜索