MyBatis開發Dao的原始Dao開發和Mapper動態代理開發
目錄
- 咳咳...初學者看文字(Mapper介面開發四個規範)屬實有點費勁,博主我就廢了點勁做了如下圖,方便理解:
- 原始Dao開發方式
- 1. 編寫對映檔案
- 3.編寫Dao實現類
- 4.編寫Dao測試
- Mapper動態代理方式
- 1.定義Mapper.xml(對映檔案)
- 2、編寫UserMapper.xml配置檔案內容:
- 3.編寫UserMapper(介面檔案)
- 4.載入UserMapper.xml檔案
- 5.編寫測試
@
使用MyBatis開發Dao,通常有兩個方法,即原始Dao開發方法和Mapper動態代理開發方法。原始Dao開發中存在以下問題:
Dao方法體存在重複程式碼:通過SqlSessionFactory建立SqlSession,呼叫SqlSession的資料庫操作方法
呼叫sqlSession的資料庫操作方法需要指定statement的id,這裡存在硬編碼,不得於開發維護。
而動態代理開發中Mapper介面開發方法只需要程式設計師編寫Mapper介面(相當於Dao介面),由
Mybatis框架根據介面定義建立介面的動態代理物件,代理物件的方法體同上邊Dao介面實現類方法。
使用mapper代理的方法來開發dao時,程式設計師只需要幹兩件事即可:
1、編寫mapper.xml對映檔案
2、編寫mapper介面(相當於dao介面)
Mapper介面開發需要遵循以下四個規範(建議初學者結合下圖理解):
1、Mapper.xml檔案中的namespace與mapper介面的類路徑相同。
2、Mapper介面方法名和Mapper.xml中定義的每個statement的id相同
3、Mapper介面方法的輸入引數型別和mapper.xml中定義的每個sql 的parameterType的型別相同
4、Mapper介面方法的輸出引數型別和mapper.xml中定義的每個sql的resultType的型別相同
咳咳...初學者看文字(Mapper介面開發四個規範)屬實有點費勁,博主我就廢了點勁做了如下圖,方便理解:
原始Dao開發方式
原始Dao開發方法需要程式設計師編寫Dao介面和Dao實現類。
1. 編寫對映檔案
編寫對映檔案如下:(也可以使用入門程式完成的對映檔案)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:名稱空間,用於隔離sql,還有一個很重要的作用,後面會講 -->
<mapper namespace="test">
<!-- 根據id查詢使用者 -->
<select id="queryUserById" parameterType="int"
resultType="com.gx.mybatis.pojo.User">
select * from user where id = #{id}
</select>
<!-- 根據username模糊查詢使用者 -->
<select id="queryUserByUsername" parameterType="string"
resultType="com.gx.mybatis.pojo.User">
select * from user where username like '%${value}%'
</select>
<!-- 儲存使用者 -->
<insert id="saveUser" parameterType="com.gx.mybatis.pojo.User">
<selectKey keyProperty="id" keyColumn="id" order="AFTER"
resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
</mapper>
### 2. 編寫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);
}
3.編寫Dao實現類
編寫的Dao實現類如下
public class UserDaoImpl implements UserDao {
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
super();
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User queryUserById(int id) {
// 建立SqlSession
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 執行查詢邏輯
User user = sqlSession.selectOne("queryUserById", id);
// 釋放資源
sqlSession.close();
return user;
}
@Override
public List<User> queryUserByUsername(String username) {
// 建立SqlSession
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 執行查詢邏輯
List<User> list = sqlSession.selectList("queryUserByUsername", username);
// 釋放資源
sqlSession.close();
return list;
}
@Override
public void saveUser(User user) {
// 建立SqlSession
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 執行儲存邏輯
sqlSession.insert("saveUser", user);
// 提交事務
sqlSession.commit();
// 釋放資源
sqlSession.close();
}
}
4.編寫Dao測試
建立一個JUnit的測試類,對UserDao進行測試(充當main方法),測試程式碼如下:
public class UserDaoTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws Exception {
// 建立SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 載入SqlMapConfig.xml配置檔案
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 建立SqlsessionFactory
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void testQueryUserById() {
// 建立DAO
UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);
// 執行查詢
User user = userDao.queryUserById(1);
System.out.println(user);
}
@Test
public void testQueryUserByUsername() {
// 建立DAO
UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);
// 執行查詢
List<User> list = userDao.queryUserByUsername("五");
for (User user : list) {
System.out.println(user);
}
}
@Test
public void testSaveUser() {
// 建立DAO
UserDao 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);
}
}
Mapper動態代理方式
1.定義Mapper.xml(對映檔案)
定義mapper對映檔案UserMapper.xml
將UserMapper.xml放在config下mapper目錄下,效果如下:
2、編寫UserMapper.xml配置檔案內容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:名稱空間,用於隔離sql -->
<!-- 還有一個很重要的作用,使用動態代理開發DAO,1. namespace必須和Mapper介面類路徑一致 -->
<mapper namespace="com.gx.mybatis.mapper.UserMapper">
<!-- 根據使用者id查詢使用者 -->
<!-- 2. id必須和Mapper介面方法名一致 -->
<!-- 3. parameterType必須和介面方法引數型別一致 -->
<!-- 4. resultType必須和介面方法返回值型別一致 -->
<select id="queryUserById" parameterType="int"
resultType="com.gx.mybatis.pojo.User">
select * from user where id = #{id}
</select>
<!-- 根據使用者名稱查詢使用者 -->
<select id="queryUserByUsername" parameterType="string"
resultType="com.gx.mybatis.pojo.User">
select * from user where username like '%${value}%'
</select>
<!-- 儲存使用者 -->
<insert id="saveUser" parameterType="com.gx.mybatis.pojo.User">
<selectKey keyProperty="id" keyColumn="id" order="AFTER"
resultType="int">
select last_insert_id()
</selectKey>
insert into user(username,birthday,sex,address) values
(#{username},#{birthday},#{sex},#{address});
</insert>
</mapper>
3.編寫UserMapper(介面檔案)
建立UserMapper介面程式碼如下:
public interface UserMapper {
/**
* 根據id查詢
*
* @param id
* @return
*/
User queryUserById(int id);
/**
* 根據使用者名稱查詢使用者
*
* @param username
* @return
*/
List<User> queryUserByUsername(String username);
/**
* 儲存使用者
*
* @param user
*/
void saveUser(User user);
}
4.載入UserMapper.xml檔案
修改SqlMapConfig.xml檔案,新增以下所示的內容:
<!-- 載入對映檔案 -->
<mappers>
<mapper resource="sqlmap/User.xml" />
<mapper resource="mapper/UserMapper.xml" />
</mappers>
5.編寫測試
編寫的測試方法如下:
public class UserMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws Exception {
// 建立SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 載入SqlMapConfig.xml配置檔案
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 建立SqlsessionFactory
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void testQueryUserById() {
// 獲取sqlSession,和spring整合後由spring管理
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 從sqlSession中獲取Mapper介面的代理物件
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行查詢方法
User user = userMapper.queryUserById(1);
System.out.println(user);
// 和spring整合後由spring管理
sqlSession.close();
}
@Test
public void testQueryUserByUsername() {
// 獲取sqlSession,和spring整合後由spring管理
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 從sqlSession中獲取Mapper介面的代理物件
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行查詢方法
List<User> list = userMapper.queryUserByUsername("五");
for (User user : list) {
System.out.println(user);
}
// 和spring整合後由spring管理
sqlSession.close();
}
@Test
public void testSaveUser() {
// 獲取sqlSession,和spring整合後由spring管理
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 從sqlSession中獲取Mapper介面的代理物件
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 建立儲存物件
User user = new User();
user.setUsername("劉備胎");
user.setBirthday(new Date());
user.setSex("2");
user.setAddress("鼠國");
// 執行查詢方法
userMapper.saveUser(user);
System.out.println(user);
// 和spring整合後由spring管理
sqlSession.commit();
sqlSession.close();
}
}
如果本文對你有一點點幫助,那麼請點個讚唄,謝謝~
最後,若有不足或者不正之處,歡迎指正批評,感激不盡!如果有疑問歡迎留言,絕對第一時間回覆!
歡迎各位關注我的公眾號,一起探討技術,嚮往技術,追求技術,說好了來了就是盆友喔...
相關推薦
MyBatis開發Dao的原始Dao開發和Mapper動態代理開發
目錄 咳咳...初學者看文字(Mapper介面開發四個規範)屬實有點費勁,博主我就廢了點勁做了如下圖,方便理解: 原始Dao開發方式 1. 編寫對映檔案 3.編寫Dao實現類 4.編寫Dao測
Mybatis框架三:DAO層開發、Mapper動態代理開發
urn 測試類 new post 綁定 def 情況下 asstream implement 這裏是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下來做到了簡單的增刪改查:http://www.cnblogs.
MyBatis使用Mapper動態代理開發Dao層
開發規範 Mapper介面開發方法只需要程式設計師編寫Mapper介面(相當於Dao介面),由Mybatis框架根據介面定義建立介面的動態代理物件,代理物件的方法體同原始Dao介面實現類方法。 Mapper介面開發需要遵循以下規範: Mapper.xml檔案中的name
mybatis---Mapper動態代理開發
UserMapper介面: package com.it.mybaties.mapper; import com.it.mybaties.pojo.User; public interface UserMapper { public User getUserById(Integer i
mybatis與Spring三種開發方式詳解(二&三)Mapper動態代理開發&Mapper動態代理掃描包形式開發
mybatis與Spring三種開發方式詳解(二)Mapper動態代理開發 之前我們說到傳統的dao層開發,今天我們來談談第二種mybatis與Spring的開發方式,Mapper動態代理開發。 首先這裡上一波@test測試程式碼,大家先看一下mybat
mapper動態代理開發
batis close Coding dbcp ng- factor 文件的 pass -- <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework
Mapper動態代理開發所要遵循的四個原則
①.介面方法名與對映檔案中Mapper.xml中id名一致。 ②.返回值型別與Mapper.xml檔案中返回值型別一致 ③.方法的入參型別與Mapper.xml中的入參的型別一致 ④.名稱空間 繫結此介面 例如 public interface UserMapper { public User findUs
【轉】Mybatis學習---MyBatis知識、原始Dao開發和mapper代理開發
結果集 檢索 cat 用戶 隔離 pst 定義 otl oom 【原文】https://www.toutiao.com/i6594610137560777223/ 一、什麽是MyBatis MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。
mybatis--開發Dao--原始dao方式和Mapper代理方式
它的作用只是通過配置檔案建立SqlSessionFactory,所以只要創建出SqlSessionFactory,它就可以銷燬了。 所以說,它的生命週期是在方法之內。 SqlSessionFactory 它的作用是建立SqlSession的工廠,工廠一旦建立,除非應用停掉,不要銷燬。 所以說它的生命週期是
mybatis入門之原始dao開發與mapper代理開發
前言: 相信很多朋友和筆者一樣,在開始學習mybatis的時候,看完一遍mybatis相關知識,並沒有記住多少,理解深刻就更談不上,渴求一個簡單的demo來測試一下自己到底瞭解多少,掌握多少以及mybatis到底是怎麼玩的,那麼機會來了,筆者將自己之前學習過程中練習的demo重新整理了下,並記錄
02.MyBatis在DAO層開發使用的Mapper動態代理方式
.get div 技術 before nco mes session list http 在實際開發中,Mybatis作用於DAO層,那麽Service層該如何調用Mybatis Mybatis鼓勵使用Mapper動態代理的方式 Mapper接口開發方法只需要程
MyBatis開發Dao層的兩種方式(Mapper動態代理方式)
MyBatis開發原始Dao層請閱讀我的上一篇部落格:MyBatis開發Dao層的兩種方式(原始Dao層開發) 接上一篇部落格繼續介紹MyBatis開發Dao層的第二種方式:Mapper動態代理方式 Mapper介面開發方法只需要程式設計師編寫Mapper介面(相當於Dao介面),由Mybat
java-mybaits-00202-DAO-原始DAO開發方法
click ring res ide print dao spa 變量 source 原始Dao開發方法需要程序員編寫Dao接口和Dao實現類。 原本的ibatis的 需要在dao實現類中註入一個SqlSessionFactory工廠。 1.思路
Spring boot 自動生成mybatis的dao、model、和mapper層
1、pom.xml新增內容,最下邊新增plugin <build> <pluginManagement> <plugins> <plugin> <groupId>org.springfr
Dao開發(Mapper動態代理方式)
動態代理物件呼叫sqlSession.selectOne()和sqlSession.selectList()是根據mapper介面方法的返回值決定,如果返回list則呼叫selectList方法,如果返回單個物件則呼叫selectOne方法。
mapper動態代理方式的crud(MyBatis介面的開發)
二、mapper動態代理方式的crud(MyBatis介面的開發): 原則:約定優於配置 abc.java name 配置方式:abc.xml <name>myproject</name>
mybatis 使用mapper實現動態代理 -開發規範
程式設計師編寫mapper介面需要遵循一些開發規範,mybatis可以自動生成mapper介面實現類代理物件。 開發規範: 1、在mapper.xml中namespace等於mapper介面地址 2、mapper.java介面中的方法名和mapper.xml中s
使用mybatis反向自動生成實體類和mapper映射文件和接口文件
http 實體類 pos -- cti 連接 rule ima app 問題描述: 最近在做web的東西,想要從數據庫中生成實體類,然後操作數據庫,然後做一些增刪改查的工作, 發現可以直接使用mybatis直接生成javabean,還有可以直接生成mapper的映射文件。具
Mybatis動態代理開發
ace 返回值 就是 原則 map find 文件中 ati import package com.itheima.mybatis.mapper; import com.itheima.mybatis.pojo.User; public interface UserMapp
IDEA2018中maven工程使用mybatis.generator逆向工程獲取pojo 和mapper
宣告:使用 JDK9, idea2018.2 ,資料庫版本Mysql8 ,建立maven工程進行測試; 之前用eclipse ,現在使用 maven工程來使用mybatis.generator逆向工程; 步驟:①安裝 Mybatis plugin 外掛,重啟 IDE