MyBatis-原始dao開發(fā)和mapper代理開發(fā)

SqlSession 使用范圍

  • SqlSessionFactoryBuilder

通過SqlSessionFactoryBuilder 創(chuàng)建會話工廠SqlSessionFactory

將SqlSessionFactoryBuilder當(dāng)成一個工具類使用即可,不需要使用單例管理。
在需要創(chuàng)建SqlSessionFactory時候,只需要new一次SqlSessionFactoryBuilder即可。

  • SqlSessionFactory

通過SqlSessionFactory 創(chuàng)建 SqlSession, 通過單例模式管理SqlSessionFactory(工廠一旦創(chuàng)建,一直使用一個實(shí)例,不銷毀)

將來和 spring 整合之后,使用單例模式管理SqlSessionFactory

  • SqlSession

SqlSession是一個面向用戶的接口。提供了很多操作數(shù)據(jù)庫的方法,如:selectOne、selectList。

SQLSession是線程不安全的。在SQLSession實(shí)現(xiàn)類中除了有接口中的方法(操作數(shù)據(jù)庫的方法)還有數(shù)據(jù)域?qū)傩浴?/p>

SQLSession最佳應(yīng)用場合在方法體內(nèi),定義成局部變量。

原始dao開發(fā)方法(需要編寫dao接口和dao實(shí)現(xiàn)類)

  • 思路:

編寫dao接口和dao實(shí)現(xiàn)類。
需要向dao實(shí)現(xiàn)類中注入SqlSessionFactory,在方法體內(nèi)通過SqlSessionFactory創(chuàng)建SQLSession

  • dao接口
  • dao 接口實(shí)現(xiàn)類
public class UserDaoiImpl implements UserDao{

    //向dao實(shí)現(xiàn)類注入SqlSessionFactory
    //這里通過構(gòu)造方法注入
    private SqlSessionFactory sqlSessionFactory;
    public UserDaoiImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    
    @Override
    public User findUserById(int id) throws Exception {
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("user.findUserById", id);
        sqlSession.close();
        return user;
    }

    @Override
    public void addUser(User user) throws Exception {
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        sqlSession.insert("user.insertUser", user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public void deleteUserById(int id) throws Exception {
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        sqlSession.delete("user.deleteUserById", id);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public void updateUser(User user) throws Exception {
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        sqlSession.update("user.updateUser", user);
        sqlSession.commit();
        sqlSession.close();
    }

}
  • 測試代碼
public class UserDaoiImplTest {
    
    private SqlSessionFactory buildFactory;
    @Before
    public void setUp() throws Exception {
        //創(chuàng)建工廠
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        buildFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    }
    
    @Test
    public void testFindUserById() throws Exception {
        UserDao userDao = new UserDaoiImpl(buildFactory);
        User user = userDao.findUserById(2);
        System.out.println(user);
    }
    
    @Test
    public void testAddUser()  throws Exception {
        UserDao userDao = new UserDaoiImpl(buildFactory);
        User user = new User();
        user.setUsername("李小飛");
        user.setAddress("山東泰安");
        user.setBirthday(new Date());
        user.setSex("女");
        
        userDao.addUser(user);
    }
    
}

mapper代理方法(只需要編寫mapper接口,相當(dāng)于dao接口)

  • 思路 :

需要編寫mapper.xml映射文件

需要編寫mapper接口,遵循一些開發(fā)規(guī)范,mybatis可以自動生成mapper接口實(shí)現(xiàn)類代理對象。

開發(fā)規(guī)范:

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


2、mapper.java 接口中的方法名和mapper.xml 中statement的id一致

3、mapper.java 接口中方法的輸入?yún)?shù)類型和mapper.xml 中statement的 parameterType指定的類型一致

4、mapper.java 接口中方法的返回值類型和mapper.xml 中statement的resultType指定的類型一致

舉例:

  • 總結(jié):

    以上開發(fā)規(guī)范主要是對下邊代碼進(jìn)行統(tǒng)一生成:

    User user = sqlSession.selectOne("user.findUserById", id);
    sqlSession.insert("user.insertUser", user);
    ...
    
  • mapper.java

public interface UserMapper {
    //根據(jù)id查詢用戶
    public User findUserById(int id) throws Exception;
    
    //新增一個用戶
    public void insertUser(User user) throws Exception;
    
    //刪除用戶信息
    public void deleteUserById(Integer id) throws Exception;
    
    //修改某個用戶信息
    public void updateUser(User user) throws Exception;
    
    
}
  • mapper.xml
  • 在SqlMapConfig.xml中加載mapper.xml文件
  • 測試
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容