日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

原始Dao开发方法以及存在的问题

發布時間:2024/8/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原始Dao开发方法以及存在的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

存在的問題:
原始Dao開發中存在以下問題:
1.Dao方法體存在重復代碼:通過SqlSessionFactory創建SqlSession,調用SqlSession的數據庫操作方法
2.調用sqlSession的數據庫操作方法需要指定statement的id,這里存在硬編碼,不得于開發維護

Dao開發方法:
使用MyBatis開發Dao,通常有兩個方法,即原始Dao開發方法和Mapper動態代理開發方法。這里先介紹原始DAO方法的使用!
SqlSession的使用范圍

  • SqlSession中封裝了對數據庫的操作,如:查詢、插入、更新、刪除等。
  • SqlSession通過SqlSessionFactory創建.
  • SqlSessionFactory是通過SqlSessionFactoryBuilder進行創建。
  • SqlSessionFactoryBuilder

    SqlSessionFactoryBuilder用于創建SqlSessionFacoty,SqlSessionFacoty一旦創建完成就不需要SqlSessionFactoryBuilder了,因為SqlSession是通過SqlSessionFactory創建的。所以可以將SqlSessionFactoryBuilder當成一個工具類使用,最佳使用范圍是方法范圍即方法體內局部變量。

    SqlSessionFactory

    SqlSessionFactory是一個接口,接口中定義了openSession的不同重載方法,SqlSessionFactory的最佳使用范圍是整個應用運行期間,一旦創建后可以重復使用,通常以單例模式管理SqlSessionFactory。

    SqlSession

    SqlSession是一個面向用戶的接口,sqlSession中定義了數據庫操作方法。
    每個線程都應該有它自己的SqlSession實例。SqlSession的實例不能共享使用,它也是線程不安全的。因此最佳的范圍是請求或方法范圍。絕對不能將SqlSession實例的引用放在一個類的靜態字段或實例字段中。
    打開一個 SqlSession;使用完畢就要關閉它。通常把這個關閉操作放到 finally 塊中以確保每次都能執行關閉

    如下:

    SqlSession session = sqlSessionFactory.openSession(); try {// do work } finally {session.close(); }

    原始Dao開發方式
    原始Dao開發方法需要程序員編寫Dao接口和Dao實現類。

    DAO接口:

    public interface UserDao {/*** 根據id查詢用戶* * @param id* @return*/User queryUserById(int id);/*** 根據用戶名模糊查詢用戶* * @param username* @return*/List<User> queryUserByUsername(String username);/*** 保存用戶* * @param user*/void saveUser(User user); }

    DAO實現類:

    public class UserDaoImpl implements UserDao {private SqlSessionFactory sqlSessionFactory;public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {super();this.sqlSessionFactory = sqlSessionFactory;}@Overridepublic User queryUserById(int id) {// 創建SqlSessionSqlSession sqlSession = this.sqlSessionFactory.openSession();// 執行查詢邏輯User user = sqlSession.selectOne("queryUserById", id);// 釋放資源sqlSession.close();return user;}@Overridepublic List<User> queryUserByUsername(String username) {// 創建SqlSessionSqlSession sqlSession = this.sqlSessionFactory.openSession();// 執行查詢邏輯List<User> list = sqlSession.selectList("queryUserByUsername", username);// 釋放資源sqlSession.close();return list;}@Overridepublic void saveUser(User user) {// 創建SqlSessionSqlSession sqlSession = this.sqlSessionFactory.openSession();// 執行保存邏輯sqlSession.insert("saveUser", user);// 提交事務sqlSession.commit();// 釋放資源sqlSession.close();} }

    DAO測試:

    public class UserDaoTest {private SqlSessionFactory sqlSessionFactory;@Beforepublic void init() throws Exception {// 創建SqlSessionFactoryBuilderSqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 加載SqlMapConfig.xml配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 創建SqlsessionFactorythis.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);}@Testpublic void testQueryUserById() {// 創建DAOUserDao userDao = new UserDaoImpl(this.sqlSessionFactory);// 執行查詢User user = userDao.queryUserById(1);System.out.println(user);}@Testpublic void testQueryUserByUsername() {// 創建DAOUserDao userDao = new UserDaoImpl(this.sqlSessionFactory);// 執行查詢List<User> list = userDao.queryUserByUsername("張");for (User user : list) {System.out.println(user);}}@Testpublic void testSaveUser() {// 創建DAOUserDao userDao = new UserDaoImpl(this.sqlSessionFactory);// 創建保存對象User user = new User();user.setUsername("劉備");user.setBirthday(new Date());user.setSex("1");user.setAddress("蜀國");// 執行保存userDao.saveUser(user);System.out.println(user);} }

    總結

    以上是生活随笔為你收集整理的原始Dao开发方法以及存在的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。