1. 程式人生 > >【MyBatis框架】Mybatis開發dao方法第一部分

【MyBatis框架】Mybatis開發dao方法第一部分

下面來討論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業務邏輯層通常用來處理各種各樣的業務邏輯。我們將最基本的增刪改查抽取出來,作