成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Mybatis【配置文件】就是這么簡單

freewolf / 1218人閱讀

摘要:場合常見一些明細記錄的展示,將關(guān)聯(lián)查詢信息全部展示在頁面時,此時可直接使用將每一條記錄映射到中,在前端頁面遍歷中是即可。如果查詢單表就可以滿足需求,一開始先查詢單表,當需要關(guān)聯(lián)信息時,再關(guān)聯(lián)查詢,當需要關(guān)聯(lián)信息再查詢這個叫延遲加載。

配置文件和映射文件還有挺多的屬性我還沒有講的,現(xiàn)在就把它們一一補全

映射文件

在mapper.xml文件中配置很多的sql語句,執(zhí)行每個sql語句時,封裝為MappedStatement對象,mapper.xml以statement為單位管理sql語句

Statement的實際位置就等于namespace+StatementId

占位符

在Mybatis中,有兩種占位符

#{}解析傳遞進來的參數(shù)數(shù)據(jù)

${}對傳遞進來的參數(shù)原樣拼接在SQL中

主鍵生成策略

如果我們在Hibernate中,當我們插入數(shù)據(jù)的時候,我們是可以選擇是UUID策略的...

那么在Mybatis是怎么做的呢??

UUID
    
    
        
            select uuid()
        
        
        INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})
     
主鍵返回

如果我們一般插入數(shù)據(jù)的話,如果我們想要知道剛剛插入的數(shù)據(jù)的主鍵是多少,我們可以通過以下的方式來獲取

需求:

user對象插入到數(shù)據(jù)庫后,新記錄的主鍵要通過user對象返回,通過user獲取主鍵值。

解決思路:

通過LAST_INSERT_ID()獲取剛插入記錄的自增主鍵值,在insert語句執(zhí)行后,執(zhí)行select LAST_INSERT_ID()就可以獲取自增主鍵。

mysql:

    
        
            select LAST_INSERT_ID()
        
        INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})
    

oracle:

實現(xiàn)思路:

先查詢序列得到主鍵,將主鍵設(shè)置到user對象中,將user對象插入數(shù)據(jù)庫。

    
    
        
            select 序列.nextval() from dual
        
        
        INSERT INTO USER(id,username,birthday,sex,address) VALUES( 序列.nextval(),#{username},#{birthday},#{sex},#{address})
     
resultMap

有的時候,我們看別的映射文件,可能看不到以下這么一段代碼:

    
         
          
          
          
          
     
     

因為,如果我們的數(shù)據(jù)表的字段和JavaBean的屬性名稱是相同時,我們就不用上面那段代碼了。Mybatis會自動幫我們把返回的結(jié)果進行封裝成JavaBean

那當我們數(shù)據(jù)表的字段和JavaBean的屬性名稱不是相同時,我們就需要使用resultMap,也就是上面那段代碼

當然了,在正常情況下列名和JavaBean的屬性名一般都是不同的,因此還是需要resultMap的。

resultMap和resultType區(qū)別

resultType :指定輸出結(jié)果的類型(pojo、簡單類型、hashmap..),將sql查詢結(jié)果映射為java對象 。

使用resultType注意:sql查詢的列名要和resultType指定pojo的屬性名相同,指定相同 屬性方可映射成功,如果sql查詢的列名要和resultType指定pojo的屬性名全部不相同,list中無法創(chuàng)建pojo對象的。

resultMap:將sql查詢結(jié)果映射為java對象。

如果sql查詢列名和最終要映射的pojo的屬性名不一致,使用resultMap將列名和pojo的屬性名做一個對應(yīng)關(guān)系 (列名和屬性名映射配置)

使用resultMap
    
         
          
          
          
          
     
     

resultType和resultMap用法總結(jié)

resultType:

作用:

將查詢結(jié)果按照sql列名pojo屬性名一致性映射到pojo中。

場合:

常見一些明細記錄的展示,將關(guān)聯(lián)查詢信息全部展示在頁面時,此時可直接使用resultType將每一條記錄映射到pojo中,在前端頁面遍歷list(list中是pojo)即可。

resultMap:

使用association和collection完成一對一和一對多高級映射。

association:

作用:

將關(guān)聯(lián)查詢信息映射到一個pojo類中。

場合:

為了方便獲取關(guān)聯(lián)信息可以使用association將關(guān)聯(lián)訂單映射為pojo,比如:查詢訂單及關(guān)聯(lián)用戶信息。

collection:

作用:

將關(guān)聯(lián)查詢信息映射到一個list集合中。

場合:

為了方便獲取關(guān)聯(lián)信息可以使用collection將關(guān)聯(lián)信息映射到list集合中,比如:查詢用戶權(quán)限范圍模塊和功能,可使用collection將模塊和功能列表映射到list中。

Collection在前面好像并沒有用過,下面就看一下它的用法:

Order與OrderDetails關(guān)系


package cn.itcast.mybatis.po;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

public class Orders implements Serializable {
    private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;
    
    //關(guān)聯(lián)用戶信息
    private User user;
    
    //訂單明細
    private List orderdetails;
   

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number == null ? null : number.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note == null ? null : note.trim();
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public List getOrderdetails() {
        return orderdetails;
    }

    public void setOrderdetails(List orderdetails) {
        this.orderdetails = orderdetails;
    } 
    
}

SQL語句

     
     

resultMap

    
    
        
        
        
        
            
            
            
            
        
    
    

一般地使用resultMap會多一點。

Mybatis映射文件處理特殊字符

第一種方法:

用了轉(zhuǎn)義字符把>和<替換掉,然后就沒有問題了。

SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE

第二種方法:

配置文件 別名

typeAliases別名:

自定義別名:

    
    
        
        
        
        
        
    
Mapper加載
    
        
        
        
        
        
        
        
    
延遲加載

在進行數(shù)據(jù)查詢時,為了提高數(shù)據(jù)庫查詢性能,盡量使用單表查詢,因為單表查詢比多表關(guān)聯(lián)查詢速度要快。

如果查詢單表就可以滿足需求,一開始先查詢單表,當需要關(guān)聯(lián)信息時,再關(guān)聯(lián)查詢,當需要關(guān)聯(lián)信息再查詢這個叫延遲加載。

在Mybatis中延遲加載就是在resultMap中配置具體的延遲加載..

在Mybatis的文件中配置全局延遲加載

    
    
        
            
        
        
    
延遲加載測試

當需要用戶時調(diào)用 Orders類中的getUser()方法執(zhí)行延遲加載 ,向數(shù)據(jù)庫發(fā)出sql。

由于是對User進行延遲加載,那么我們只要查詢Orders相關(guān)的信息即可了

     
     

使用resultMap來配置延遲加載

    
    
        
        
        
        
        
        
        
        


        
        

    

總結(jié)

在程序中調(diào)用的SQL語句是由映射文件的命令空間+sql片段的id所組成的。它內(nèi)部會生成一個Statement對象的。

在使用別名的時候,可以指定包名,在使用總配置文件加載映射文件時,也可以指定包名。

主鍵如果需要返回的話,使用selectKey 標簽即可。UUID也可以返回。在Oracle的話,是使用序列來返回自動增長的主鍵的。

占位符有兩種,一種是解析傳遞進來的參數(shù)數(shù)據(jù)、一種是原樣輸出傳遞進來的數(shù)據(jù)。

如果文章有錯的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號:Java3y

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68757.html

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號:Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評論0 收藏0
  • 移動商城項目【總結(jié)】

    摘要:有必要建一個資源服務(wù)器存放靜態(tài)資源。一些用戶級別的數(shù)據(jù)輕量可以考慮存儲在中。存儲的是值,可以通過來對和對象之間的轉(zhuǎn)換如果我們的數(shù)據(jù)是在后臺傳過去或者轉(zhuǎn)換而成的,在前臺上并沒有做什么改變的話。 移動商城項目總結(jié) 移動商城項目是我第二個做得比較大的項目,該項目系統(tǒng)來源于傳智Java168期,十天的視頻課程(想要視頻的同學(xué)關(guān)注我的公眾號就可以直接獲取了) 通過這次的項目又再次開闊了我的視野,...

    BlackHole1 評論0 收藏0
  • 教你手寫Mybatis框架

    摘要:前言嗨,小伙伴們,這篇博文將帶大家手寫,讓大家對的核心原理以及工作流程有更加深刻的理解。模塊顧名思義,就是框架配置類,用于解析配置文件加載相關(guān)環(huán)境。配置模塊這里的對框架的配置使用了簡單的,主要原因還是簡單易懂然后節(jié)省時間。 前言 (????)??嗨,小伙伴們,這篇博文將帶大家手寫mybatis,讓大家對mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybat...

    antyiwei 評論0 收藏0
  • Mybatis學(xué)習(xí)筆記

    摘要:學(xué)習(xí)筆記有官方的中文開發(fā)文檔并且針對使用者比較友好是一款優(yōu)秀的持久層框架,它支持定制化存儲過程以及高級映射。它只和配置有關(guān),存在的意義僅在于用來減少類完全限定名的冗余,為了簡化中的書寫。 Mybatis學(xué)習(xí)筆記 mybatis有官方的中文開發(fā)文檔并且針對使用者比較友好:http://www.mybatis.org/mybatis-3/zh/ MyBatis 是一款優(yōu)秀的持久層框架,它支...

    jsyzchen 評論0 收藏0
  • Spring Boot2(一):使用Spring Boot2集成Mybatis基礎(chǔ)搭建

    摘要:主要有兩種解決方案,一種是使用注解解決一切問題,一種是簡化后的老傳統(tǒng)。新建項目默認為,直接改為,另外新增一個用戶不同環(huán)境使用不同的配置文件用。配置指定配置文件為配置開啟駝峰命名轉(zhuǎn)換,如。 倉庫地址:spring-boot-learning歡迎star、fork,給作者一些鼓勵 前言 Mybatis 初期使用比較麻煩,需要各種配置文件、實體類、Dao 層映射關(guān)聯(lián)、還有一大推其它配置。my...

    TANKING 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<