Java Mybatis框架Dao層的實現(xiàn)與映射文件以及核心配置文件詳解分析
Mybatis的Dao層實現(xiàn)
傳統(tǒng)開發(fā)方式
1、編寫UserDao接口
public interface UserMapper {
public List<User> findAll() throws IOException;
}
2、編寫UserDaoImpl實現(xiàn)

3、測試傳統(tǒng)方式

代理開發(fā)方式
代理開發(fā)方式介紹
采用Mybatis的代理開發(fā)方式實現(xiàn)DAO層的開發(fā),這種方式是我們后面進入企業(yè)的主流.
Mapper接口開發(fā)方法只需要程序員編寫Mapper接口(相當于Dao接口),由Mybatis框架根據(jù)接口定義創(chuàng)建接口的動態(tài)代理對象,代理對象的方法體同上邊Dao接口實現(xiàn)類方法。
Mapper接口開發(fā)需要遵循以下規(guī)范:
①Mapper.xml文件中的namespace與mapper接口的全限定名相同
②Mapper接口方法名和Mapper.xml中定義的每個statement的id相同
③Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的每個sql的parameterType的類型相同4、④Mapper接口方法的輸出參數(shù)類型和mapper.xml中定義的每個sql的resultType的類型相
同
1、編寫UserMapper接口

2、測試代理方式

MyBatis映射文件深入
動態(tài)sql語句
動態(tài)sql語句描述【官方文檔】

動態(tài)SQL之<if>
我們根據(jù)實體類的不同取值,使用不同的SQL語句來進行查詢。比如在 id如果不為空時可以根據(jù)id查詢,如果username不同空時還要加入用戶名作為條件。這種情況在我們的多條件組合查詢中經(jīng)常會碰到。
<!--sql語句抽取-->
<sql id="selectUser">select * from user</sql>
<select id="findByCondition" parameterType="user" resultType="user">
<include refid="selectUser"></include>
<where>
<if test="id!=0">
and id=#{id}
</if>
<if test="username!=null">
and username=#{username}
</if>
<if test="password!=null">
and password=#{password}
</if>
</where>
</select>
當查詢條件id和username都存在時,測試代碼如下

動態(tài)SQL之<foreach>
循環(huán)執(zhí)行sql的拼接操作,例如: SELECT * FROM USER WHERE id IN (1,2,5)。
<select id="findByIds" parameterType="list" resultType="user">
<include refid="selectUser"></include>
<where>
<foreach collection="list" open="id in(" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</select>
測試代碼如下

foreach標簽的屬性含義如下:
<foreach>標簽用于遍歷集合,它的屬性:
①collection:代表要遍歷的集合元素,注意編寫時不要寫#{}
②open:代表語句的開始部分
③close:代表結(jié)束部分
④item:代表遍歷集合的每個元素,生成的變量名
⑤sperator:代表分隔符
SQL片段抽取
Sql中可將重復的sql提取出來,使用時用include引用即可,最終達到sql重用的目的

總結(jié)
MyBatis映射文件配置:
<select>:查詢
<insert>:插入
<update>:修改
<delete>:刪除
<where> : where條件
<if>: if判斷
<foreach>:循環(huán)
<sql> : sql片段抽取
Mybatis核心配置文件深入
typeHandlers標簽
無論是MyBatis在預處理語句(PreparedStatement)中設置一個參數(shù)時,還是從結(jié)果集中取出一個值時,都會用類型處理器將獲取的值以合適的方式轉(zhuǎn)換成Java類型。下表描述了一些默認的類型處理器(截取部分)。

可以重寫類型處理器或創(chuàng)建你自己的類型處理器來處理不支持的或非標準的類型。具體做法為:實現(xiàn)org.apache.ibatis.type.TypeHandler接口,或繼承一個很便利的類org.apache.ibatis.type.BaseTypeHandler,然后可以選擇性地將它映射到一個JDBC類型。例如需求:一個Java中的Date數(shù)據(jù)類型,我想將之存到數(shù)據(jù)庫的時候存成一個1970年至今的毫秒數(shù),取出來時轉(zhuǎn)換成java的Date,即java的Date與數(shù)據(jù)庫的varchar毫秒值之間轉(zhuǎn)換。
開發(fā)步驟:
①定義轉(zhuǎn)換類繼承類BaseTypeHandler<T>
②覆蓋4個未實現(xiàn)的方法,其中setNonNullarameter為java程序設置數(shù)據(jù)到數(shù)據(jù)庫的回調(diào)方法,getNullableResult為查詢時 mysql的字符串類型轉(zhuǎn)換成java的Type類型的方法
③在MyBatis核心配置文件中進行注冊
④測試轉(zhuǎn)換是否正確
public class DateTypeHandler extends BaseTypeHandler<Date> {
//將java類型 轉(zhuǎn)換成 數(shù)據(jù)庫需要的類型
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
long time = date.getTime();
preparedStatement.setLong(i,time);
}
//將數(shù)據(jù)庫中類型 轉(zhuǎn)換成java類型
//String參數(shù) 要轉(zhuǎn)換的字段名稱
//ResultSet 查詢出的結(jié)果集
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
//獲得結(jié)果集中需要的數(shù)據(jù)(long) 轉(zhuǎn)換成Date類型 返回
long aLong = resultSet.getLong(s);
Date date = new Date(aLong);
return date;
}
//將數(shù)據(jù)庫中類型 轉(zhuǎn)換成java類型
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
long aLong = resultSet.getLong(i);
Date date = new Date(aLong);
return date;
}
//將數(shù)據(jù)庫中類型 轉(zhuǎn)換成java類型
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long aLong = callableStatement.getLong(i);
Date date = new Date(aLong);
return date;
}
}
<!--注冊自定義類型處理器-->
<typeHandlers>
<typeHandler handler="com.longdi.handler.DateTypeHandler"></typeHandler>
</typeHandlers>
測試添加操作

數(shù)據(jù)庫數(shù)據(jù):

plugins標簽
MyBatis可以使用第三方的插件來對功能進行擴展,分頁助手PageHelper是將分頁的復雜操作進行封裝,使用簡單的方式即可獲得分頁的相關(guān)數(shù)據(jù)
開發(fā)步驟:
①導入通用PageHelper的坐標
②在mybatis核心配置文件中配置PageHelper插件
③測試分頁數(shù)據(jù)獲取
①導入通用PageHelper的坐標
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.1</version>
</dependency>
②在mybatis核心配置文件中配置PageHelper插件
<!--配置分頁助手插件 配置在mapper之前-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"></property>
</plugin>
</plugins>
③測試分頁數(shù)據(jù)獲取

獲得分頁相關(guān)的其他參數(shù)
//獲得與分頁相關(guān)參數(shù)
PageInfo<User> pageInfo = new PageInfo<User>(userList);
System.out.println("當前頁:"+pageInfo.getPageNum());
System.out.println("每頁顯示條數(shù):"+pageInfo.getPageSize());
System.out.println("總條數(shù):"+pageInfo.getTotal());
System.out.println("總頁數(shù):"+pageInfo.getPages());
System.out.println("上一頁:"+pageInfo.getPrePage());
System.out.println("下一頁:"+pageInfo.getNextPage());
System.out.println("是否是第一個:"+pageInfo.isIsFirstPage());
System.out.println("是否是最后一個:"+pageInfo.isIsLastPage());
總結(jié)
MyBatis核心配置文件常用標簽:
1、properties標簽:該標簽可以加載外部的properties文件
2、 typeAliases標簽:設置類型別名
3、environments標簽:數(shù)據(jù)源環(huán)境配置標簽
4、typeHandlers標簽:配置自定義類型處理器
5、plugins標簽:配置MyBatis的插件
到此這篇關(guān)于Java Mybatis框架Dao層的實現(xiàn)與映射文件以及核心配置文件詳解分析的文章就介紹到這了,更多相關(guān)Java Mybatis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java創(chuàng)建型設計模式之抽象工廠模式(Abstract?Factory)
當系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個簡單的對象,而是多個位于不同產(chǎn)品等級結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)2022-09-09
Spring Cloud-Feign服務調(diào)用的問題及處理方法
Feign 是一個聲明式的 REST 客戶端,它用了基于接口的注解方式,很方便實現(xiàn)客戶端配置。接下來通過本文給大家介紹Spring Cloud-Feign服務調(diào)用,需要的朋友可以參考下2021-10-10
springboot多項目結(jié)構(gòu)實現(xiàn)
本文主要介紹了springboot多項目結(jié)構(gòu)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
springboot的maven多模塊混淆jar包的實現(xiàn)方法
springboot可以使用proguard-maven-plugin 這個插件 在 pom.xml 中自定義proguard 的指令,本文基于 springboot + maven + proguard 的maven多模塊架構(gòu)進行代碼混淆,需要的朋友可以參考下2024-03-03
說一說java關(guān)鍵字final和transient
這篇文章主要和大家說一說java關(guān)鍵字final和transient,感興趣的小伙伴們可以參考一下2016-06-06
基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實現(xiàn)代碼
這篇文章主要介紹了基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實現(xiàn),會使用到多個數(shù)據(jù)源,文中通過代碼講解的非常詳細,需要的朋友可以參考下2021-04-04
在Java中輕松將HTML格式文本轉(zhuǎn)換為純文本的方法示例(保留換行)
這篇文章主要介紹了在Java中輕松將HTML格式文本轉(zhuǎn)換為純文本的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04

