最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Mybatis框架Dao層的實(shí)現(xiàn)與映射文件以及核心配置文件詳解分析

 更新時(shí)間:2021年10月27日 14:32:35   作者:龍弟-idea  
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫中的記錄

Mybatis的Dao層實(shí)現(xiàn)

傳統(tǒng)開發(fā)方式

1、編寫UserDao接口

public interface UserMapper {
 
    public List<User> findAll() throws IOException;
}

2、編寫UserDaoImpl實(shí)現(xiàn)

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

代理開發(fā)方式

代理開發(fā)方式介紹

采用Mybatis的代理開發(fā)方式實(shí)現(xiàn)DAO層的開發(fā),這種方式是我們后面進(jìn)入企業(yè)的主流.
Mapper接口開發(fā)方法只需要程序員編寫Mapper接口(相當(dāng)于Dao接口),由Mybatis框架根據(jù)接口定義創(chuàng)建接口的動態(tài)代理對象,代理對象的方法體同上邊Dao接口實(shí)現(xiàn)類方法。
Mapper接口開發(fā)需要遵循以下規(guī)范:

①M(fèi)apper.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ù)實(shí)體類的不同取值,使用不同的SQL語句來進(jìn)行查詢。比如在 id如果不為空時(shí)可以根據(jù)id查詢,如果username不同空時(shí)還要加入用戶名作為條件。這種情況在我們的多條件組合查詢中經(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>

當(dāng)查詢條件id和username都存在時(shí),測試代碼如下

動態(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標(biāo)簽的屬性含義如下:
<foreach>標(biāo)簽用于遍歷集合,它的屬性:
①collection:代表要遍歷的集合元素,注意編寫時(shí)不要寫#{}
②open:代表語句的開始部分
③close:代表結(jié)束部分
④item:代表遍歷集合的每個元素,生成的變量名
⑤sperator:代表分隔符

SQL片段抽取

Sql中可將重復(fù)的sql提取出來,使用時(shí)用include引用即可,最終達(dá)到sql重用的目的

總結(jié)

MyBatis映射文件配置:
<select>:查詢
<insert>:插入
<update>:修改
<delete>:刪除
<where> : where條件
<if>: if判斷
<foreach>:循環(huán)
<sql> : sql片段抽取

Mybatis核心配置文件深入

typeHandlers標(biāo)簽

無論是MyBatis在預(yù)處理語句(PreparedStatement)中設(shè)置一個參數(shù)時(shí),還是從結(jié)果集中取出一個值時(shí),都會用類型處理器將獲取的值以合適的方式轉(zhuǎn)換成Java類型。下表描述了一些默認(rèn)的類型處理器(截取部分)。

可以重寫類型處理器或創(chuàng)建你自己的類型處理器來處理不支持的或非標(biāo)準(zhǔn)的類型。具體做法為:實(shí)現(xiàn)org.apache.ibatis.type.TypeHandler接口,或繼承一個很便利的類org.apache.ibatis.type.BaseTypeHandler,然后可以選擇性地將它映射到一個JDBC類型。例如需求:一個Java中的Date數(shù)據(jù)類型,我想將之存到數(shù)據(jù)庫的時(shí)候存成一個1970年至今的毫秒數(shù),取出來時(shí)轉(zhuǎn)換成java的Date,即java的Date與數(shù)據(jù)庫的varchar毫秒值之間轉(zhuǎn)換。
開發(fā)步驟:
①定義轉(zhuǎn)換類繼承類BaseTypeHandler<T>
②覆蓋4個未實(shí)現(xiàn)的方法,其中setNonNullarameter為java程序設(shè)置數(shù)據(jù)到數(shù)據(jù)庫的回調(diào)方法,getNullableResult為查詢時(shí) mysql的字符串類型轉(zhuǎn)換成java的Type類型的方法
③在MyBatis核心配置文件中進(jìn)行注冊
④測試轉(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標(biāo)簽

MyBatis可以使用第三方的插件來對功能進(jìn)行擴(kuò)展,分頁助手PageHelper是將分頁的復(fù)雜操作進(jìn)行封裝,使用簡單的方式即可獲得分頁的相關(guān)數(shù)據(jù)
開發(fā)步驟:

①導(dǎo)入通用PageHelper的坐標(biāo)
②在mybatis核心配置文件中配置PageHelper插件
③測試分頁數(shù)據(jù)獲取

①導(dǎo)入通用PageHelper的坐標(biāo)

        <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("當(dāng)前頁:"+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核心配置文件常用標(biāo)簽:
1、properties標(biāo)簽:該標(biāo)簽可以加載外部的properties文件
2、 typeAliases標(biāo)簽:設(shè)置類型別名
3、environments標(biāo)簽:數(shù)據(jù)源環(huán)境配置標(biāo)簽
4、typeHandlers標(biāo)簽:配置自定義類型處理器
5、plugins標(biāo)簽:配置MyBatis的插件

到此這篇關(guān)于Java Mybatis框架Dao層的實(shí)現(xiàn)與映射文件以及核心配置文件詳解分析的文章就介紹到這了,更多相關(guān)Java Mybatis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • String類的獲取功能、轉(zhuǎn)換功能

    String類的獲取功能、轉(zhuǎn)換功能

    這篇文章給大家介紹了String類的獲取功能:String類的基本獲取功能、獲取功能的舉例子、String類的基本轉(zhuǎn)換功能、轉(zhuǎn)換功能的舉例子。具體詳情大家參考下本文
    2018-04-04
  • Java?Stream流使用最多的方式示例詳解

    Java?Stream流使用最多的方式示例詳解

    在 Java 編程中,Stream 流提供了一種高效、便捷的方式來處理集合數(shù)據(jù),本文將詳細(xì)介紹 Java 中 Stream 流的用法,包括基礎(chǔ)用法、中級用法、高級用法以及一些特殊方法的使用,感興趣的朋友一起看看吧
    2024-12-12
  • springboot接收日期類型參數(shù)的操作方法

    springboot接收日期類型參數(shù)的操作方法

    如果使用Get請求,直接使用對象接收,則可以使用@DateTimeFormat注解進(jìn)行格式化,本文重點(diǎn)給大家介紹springboot接收日期類型參數(shù)的方法,感興趣的朋友一起看看吧
    2024-02-02
  • 利用javaFX實(shí)現(xiàn)移動一個小球的示例代碼

    利用javaFX實(shí)現(xiàn)移動一個小球的示例代碼

    這篇文章主要介紹了利用javaFX實(shí)現(xiàn)移動一個小球的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java運(yùn)行時(shí)動態(tài)生成對象的方法小結(jié)

    Java運(yùn)行時(shí)動態(tài)生成對象的方法小結(jié)

    Java是一門靜態(tài)語言,通常,我們需要的class在編譯的時(shí)候就已經(jīng)生成了,為什么有時(shí)候我們還想在運(yùn)行時(shí)動態(tài)生成class呢?今天通過本文給大家分享Java運(yùn)行時(shí)動態(tài)生成對象的方法小結(jié),需要的朋友參考下吧
    2021-08-08
  • Mybatis?如何開啟控制臺打印sql語句

    Mybatis?如何開啟控制臺打印sql語句

    這篇文章主要介紹了Mybatis?如何開啟控制臺打印sql語句問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解Java中用于查找對象哈希碼值的hashCode()函數(shù)

    詳解Java中用于查找對象哈希碼值的hashCode()函數(shù)

    Java中入HashMap等一些鍵值對應(yīng)的結(jié)構(gòu),基本上都可以用hashCode()來查找值,接下來我們就來詳解Java中用于查找對象哈希碼值的hashCode()函數(shù):
    2016-05-05
  • java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringBoot中restTemplate請求存在亂碼問題的解決方法

    SpringBoot中restTemplate請求存在亂碼問題的解決方法

    這篇文章主要介紹了SpringBoot中restTemplate請求存在亂碼問題的解決方法,文中有相關(guān)的圖文和代碼示例供大家參考,對大家的解決問題有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • Java實(shí)現(xiàn)撲克牌洗牌和發(fā)牌

    Java實(shí)現(xiàn)撲克牌洗牌和發(fā)牌

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)撲克牌洗牌和發(fā)牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

沙洋县| 广河县| 临夏市| 盐津县| 东阳市| 阳谷县| 衡阳市| 团风县| 哈巴河县| 元朗区| 汉源县| 内乡县| 吉木萨尔县| 商水县| 新晃| 南皮县| 通城县| 万山特区| 普兰店市| 越西县| 梁河县| 汶上县| 林周县| 抚顺县| 洪湖市| 浦北县| 从化市| 即墨市| 万宁市| 美姑县| 甘德县| 都匀市| 新丰县| 天长市| 于田县| 罗山县| 开平市| 昭苏县| 阿坝县| 开化县| 扶绥县|