【MyBatis框架】Mybatis開發dao方法第一部分
先來說一下基本架構流程中使用到的幾個類
1.SqlSession使用範圍
1.1SqlSessionFactoryBuilder
通過SqlSessionFactoryBuilder建立會話工廠SqlSessionFactory
將SqlSessionFactoryBuilder當成一個工具類使用即可,不需要使用單例管理SqlSessionFactoryBuilder。
在需要建立SqlSessionFactory時候,只需要new一次SqlSessionFactoryBuilder即可。
1.2SqlSessionFactory
通過SqlSessionFactory建立SqlSession,使用單例模式管理sqlSessionFactory(工廠一旦建立,使用一個例項)。
將來mybatis和spring整合後,使用單例模式管理sqlSessionFactory。
1.3SqlSession
SqlSession是一個面向使用者(程式設計師)的介面。
SqlSession中提供了很多操作資料庫的方法:如:selectOne(返回單個物件)、selectList(返回單個或多個物件)。
SqlSession是執行緒不安全的,在SqlSesion實現類中除了有介面中的方法(操作資料庫的方法)還有資料域屬性。
SqlSession最佳應用場合在方法體內,定義成區域性變數使用。
接下來就來說說MyBatis的Dao的寫法,分為兩種,一種是原始Dao開發方法,一種是mapper代理方法,我們下面一一討論:
2.原始dao開發方法(程式設計師需要寫dao介面和dao實現類)
2.1思路:程式設計師需要寫dao介面和dao實現類。
需要向dao實現類中注入SqlSessionFactory,在方法體內通過SqlSessionFactory建立SqlSession。
下面實現Dao的場景是基於之前對使用者資料進行增刪改查的需求。
2.2寫Dao介面
package cn.edu.hpu.mybatis.dao; import cn.edu.hpu.mybatis.PO.User; //使用者管理的Dao介面 public interface UserDao { //根據Id查詢使用者資訊 public User findUserById(int id) throws Exception; //新增使用者資訊 public void insertUser(User user) throws Exception; //刪除使用者資訊 public void deleteUser(int id) throws Exception; //修改使用者資訊 public void updateUser(User user) throws Exception; }
2.3寫Dao的實現
package cn.edu.hpu.mybatis.dao; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import cn.edu.hpu.mybatis.PO.User; public class UserDaoImpl implements UserDao{ //需要向dao實現類中注入SqlSessionFactory工廠 //這裡我們暫時沒用spring,我們通過構造方法注入 private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory){ this.sqlSessionFactory=sqlSessionFactory; } @Override public void deleteUser(int id) throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); //傳入id刪除使用者 sqlSession.delete("test.deleteUser",id); //提交事務 sqlSession.commit(); sqlSession.close(); } @Override public User findUserById(int id) throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); User user=sqlSession.selectOne("test.findUserById",id); //釋放資源 sqlSession.close(); return user; } @Override public void insertUser(User user) throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); sqlSession.insert("test.insertUser",user); //提交事務 sqlSession.commit(); //釋放資源 sqlSession.close(); } @Override public void updateUser(User user) throws Exception { SqlSession sqlSession=sqlSessionFactory.openSession(); sqlSession.update("test.updateUser",user); //提交事務 sqlSession.commit(); sqlSession.close(); } }
測試方法(這裡只測試findUserBiId方法):
package cn.edu.hpu.mybatis.test; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import cn.edu.hpu.mybatis.PO.User; import cn.edu.hpu.mybatis.dao.UserDao; import cn.edu.hpu.mybatis.dao.UserDaoImpl; public class UserDaoImplTest { private SqlSessionFactory sqlSessionFactory; //註解Before是在執行本類所有測試方法之前先呼叫這個方法 @Before public void setup() throws Exception{ //建立SqlSessionFactory String resource="SqlMapConfig.xml"; //將配置檔案載入成流 InputStream inputStream = Resources.getResourceAsStream(resource); //建立會話工廠,傳入mybatis配置檔案的資訊 sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() throws Exception{ //建立Dao物件 UserDao userDao=new UserDaoImpl(sqlSessionFactory); //呼叫UserDao的方法 User user=userDao.findUserById(1); System.out.println(user.getUsername()); } }
測試結果:
張三
輸出的日誌:
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 28970806.
DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]
DEBUG [main] - ==> Preparing: SELECT * FROM USER WHERE id=?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 1
DEBUG [main] - Resetting autocommit to true on JDBC Connection [[email protected]]
DEBUG [main] - Closing JDBC Connection [[email protected]]
DEBUG [main] - Returned connection 28970806 to pool.
2.4總結原始 dao開發問題
1、dao介面實現類方法中存在大量模板方法,設想能否將這些程式碼提取出來,大大減輕程式設計師的工作量。
2、呼叫sqlsession方法時將statement的id硬編碼了
3、呼叫sqlsession方法時傳入的變數,由於sqlsession方法使用泛型,即使變數型別傳入錯誤,在編譯階段也不報錯,不利於程式設計師開發。
下一篇總結我們來使用mapper代理方法來寫Dao,來解決上面我們發現的問題。
相關推薦
【MyBatis框架】Mybatis開發dao方法第一部分
下面來討論mybatis開發Dao的方法 先來說一下基本架構流程中使用到的幾個類 1.SqlSession使用範圍 1.1SqlSessionFactoryBuilder 通過SqlSessionFactoryBuilder建立會話工廠SqlSessionFactory
【SSM-MyBatis框架】MyBatis開發DAO的方式
Mybatis開發Dao的方式 MyBatis開發Dao有兩種方式:原始Dao的開發方式,Mapper動態代理的方式。 兩種開發方式在企業開發中均有運用。都要掌握。 使用myBatis時,需要對其進行一個全域性的管理配置。 sqlMappingCo
【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手開發及核心功能體驗
1.MyBatis-Plus入門開發及配置 1.1.MyBatis-Plus簡介 MyBatis-Plus(簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。 MyBatis-Plus易於學習,官網提供了基於SpringBoot的中文文件,社
【持久化框架】Mybatis與Hibernate的詳細對比
很大的 效率 myba 今天 http 目的 ping pin 增刪 作為一位優秀的程序員,只知道一種ORM框架是遠遠不夠的。在開發項目之前,架構的技術選型對於項目是否成功起到至關重要的作用。我們不僅要了解同類型框架的原理以及技術實現,還要深入的理解各自的優缺點,以便我們能
【持久化框架】Mybatis簡介與原理
什麼是Mybatis MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。iBATIS一詞來源於“internet
【MyBatis框架】mybatis和spring整合
spring和mybatis整合 1.整合思路 需要spring通過單例方式管理SqlSessionFactory。 spring和mybatis整合生成代理物件,使用SqlSessionFactory建立SqlSession。(spring和mybatis整合自動完成)
【框架】mybatis 開發dao方法---mapper代理開發
mapper代理的開發 1、需要編寫mapper.xml對映檔案 2、需要編寫mapper.java介面檔案(mapper.java相當於dao介面) 1、接下來我們先將之前的mapper.xml對映檔案拷貝下來: <mapper namespace="co
【mybatis基礎】mybatis開發dao兩種方法
mybatis是一個支援普通SQL查詢,儲存過程和高階對映的優秀的持久層的框架,是apache下的頂級專案。mybatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及對結果集的檢索封裝。myba
MyBatis框架的學習(三)——Dao層開發方法
使用MyBatis開發Dao層,通常有兩個方法,即原始Dao開發方法和Mapper介面開發方法。本文案例程式碼的編寫是建立在前文MyBatis框架的學習(二)——MyBatis架構與入門案例基礎之上的! 需求 明確開發需求,在實際開發中,我們總歸是要開發
【框架】Mybatis 01 原生態JDBC的問題&Mybatis架構
原生JDBC的問題總結: 1、資料庫連線,使用時就建立,不使用立即釋放,對資料庫進行頻繁開啟和關閉,造成資料庫資源浪費,影響資料庫效能。 解決:使用資料庫連線池管理資料庫連線 2、將sql語句硬編碼到java程式碼中,如果修改sql語句,需要重新編譯java程式碼,不利
【SSM-MyBatis框架】關聯查詢--一對多查詢
1.ResultMap: 1.需求: 查詢訂單及訂單明細 2.分析: 若使用resultType,則資訊就會造成重複: 但要求查詢資訊不能重複, 在order類中新增List<orderde
【SSM-MyBatis框架】關聯查詢--多對多查詢
1. 需求: 查詢使用者及使用者購買商品的資訊: 2.對映思路: 將使用者資訊對映到user中。 在user中新增List<Order> orderList屬性,將使用者建立的訂單對映到orderList屬性中。
【MyBatis框架】mapper配置檔案-foreach標籤
foreach標籤下面介紹一下一個mapper配置檔案中的foreach標籤(注意,要跟著前面的總結來看,這裡使用的例子是結合前面的工程寫的,大部分程式碼沒有再贅述)foreach的作用是向sql傳遞陣列或List,mybatis使用foreach解析1.1需求在使用者查詢
【MyBatis框架】SqlMapConfigl配置檔案之常用的setting設定
個人資訊 就職: 聚項資訊科技有限公司 職位:中級Java開發工程師 負責:上汽系統開發與維護 院校:河南理工大學 專業:軟體工程12級 郵箱:[email protected] Q Q :10101000101001010111 1101111010
【SSM-MyBatis框架】逆向工程
1.逆向工程:(會用即可) mybatis需要程式設計師自己定義sql語句,mybatis官網提供逆向工程,可以針對表單自動生成mybatis執行所需的Java程式碼(pojo、mapper.java、mapper.xml) 2.使用方法: 1.工程目錄:
【Mybatis框架】查詢快取(二級快取)
繼上一篇部落格,我們講述了mybatis的一級快取,接下來,我們來學習一下mybatis的二級快取 部落格連結地址: http://blog.csdn.net/liweizhong1
【MyBatis框架】mapper配置檔案-關於動態sql
動態sql 1.什麼是動態sql mybatis核心 對sql語句進行靈活操作,通過表示式進行判斷,對sql進行靈活拼接、組裝。 2.需求 使用者資訊綜合查詢列表和使用者資訊查詢列表總數這兩個statement的定義使用動態sql。 對查詢條件進行判斷,如果輸入引數不為空才
【SSM-MyBatis框架】Mapper.xml配置檔案(mybatis的核心)
Mapper.xml對映檔案中定義了操作資料庫的sql,每一個sql是一個statement,對映檔案是myBatis的核心。 1.輸入對映(ParameterType) 通過parameterType指定輸入引數的型別,型別可以是簡單型別,pojo,包裝型
【Mybatis框架】查詢快取(一級快取)
做java的各位程式設計師們,估計SSH和SSM是我們的基礎必備框架。也就是說我們都已經至少接觸過了這兩套常見的整合框架。當我們用SSH的時候,相信很多人都接觸過Hibernate的
【ssm框架】Service業務邏輯層&&Mybatis對映層
Service層 通常業務處理的程式碼並不直接放在controller層中,那樣會顯得職責不單一,不方便維護。Service業務邏輯層通常用來處理各種各樣的業務邏輯。我們將最基本的增刪改查抽取出來,作