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

詳解MyBatis的XML實現(xiàn)方法(附帶注解方式實現(xiàn))

 更新時間:2024年05月21日 10:09:22   作者:HarryQUQ  
這篇文章主要詳細介紹了MyBatis的XML實現(xiàn)方法(附帶注解方式實現(xiàn)),文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

這篇文章我們來簡述一下MyBatis的XML實現(xiàn)方法(附帶注解方式實現(xiàn)方法)。

XML

1.創(chuàng)建接口

創(chuàng)建數據層(Dao)接口,使用@Mapper注解(交由Spring掌管這個類,這樣才能讓其幫助我們寫操作數據庫的方法)。為了演示我創(chuàng)建一個StudentInfoDao接口:

@Mapper
public interface StudentInfoDao {
}

2.配置XML路徑

配置路徑是為了MyBatis能找到我們寫的XML文件

以下是yml的配置方法:

mybatis:
  mapper-locations: classpath:mapper/*Mapper*.xml #這里的*是通配符,表示模糊匹配

如果要用properties只需要把:改成.及=即可。

3.配置XML模板

我們要在對應的文件夾下創(chuàng)建XML文件(像我上面的代碼就是放在resource文件夾的mapper文件夾內,注意,名字要和自己寫的文件名對應)如圖:

然后根據模板代碼把我們寫的類和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">
<mapper namespace="com.mybatis.demomybatis.demos.DAO.StudentInfoDao">

在namespace的值中寫下需要匹配類的全限定類名。這樣我們整個模板就創(chuàng)建好了,我們只需要在這個XML文件中寫下我們需要的代碼即可,接下來我來教大家如何執(zhí)行簡單的SQL語句(非動態(tài)(動態(tài)的我會在以后的博客里說明))。

4.MyBatis使用SQL語句

1.insert 

先在StudentInfoDao中寫一個insert方法,方法名隨意,為了方便我直接取名為insert

@Mapper
public interface StudentInfoDao {
     void insert();
}

然后轉換到XML文件,我們使用<insert></insert>標簽,設置insert標簽屬性id為我們類中對應的方法名。在標簽中寫下SQL語句,因為insert要傳入參數,為了方便,我們直接傳一個類進去,MyBatis會自動幫我們把這個類轉化成類內部的參數。我們這里傳入StudentInfo類。然后每個參數用#{參數名}的形式輸入

    <insert id="insert">
        insert into mybatis(user_name,password,age,gender,phone)
        values(#{username},#{password},#{age},#{gender},#{phone})
    </insert>
@Mapper
public interface StudentInfoDao2 {
     void insert(StudentInfo studentInfo);
}
@Data
public class StudentInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private String deleteFlag;
    private Date createTime;
    private Date updateTime;
}

這里的@Data是lombok里的注解,可以自動幫我們寫getter,setter等方法,如果想要詳細了解可以去官方看看官方文檔,我們這里不多說,不是文章重點。

經過上述步驟之后我們MyBatis使用insert語句就算是大功告成了。我們測試以下結果是否正確。

@SpringBootTest
class StudentInfoDaoTest {
    @Autowired
private StudentInfoDao studentInfoDao2;
    @Test
    void insert() {
        StudentInfo studentInfo=new StudentInfo();
        studentInfo.setPassword("12321");
        studentInfo.setAge(12);
        studentInfo.setPhone("972893");
        studentInfo.setGender(0);
        studentInfo.setUsername("zm");
        studentInfoDao.insert(studentInfo);
    }
}

顯然我們的insert語句執(zhí)行成功。

2.update

會使用insert之后update,delete都幾乎一樣,我們這里再講一個update。和前面一樣,創(chuàng)建方法,這次我們使用<update></update>標簽,id設置為對應方法名,在標簽中寫下update的sql語句。

@Mapper
public interface StudentInfoDao {
     void update(StudentInfo studentInfo);
}
<update id="update">
        update mybatis set password=#{password},age=#{age} where user_name=#{username}
    </update>
@Test
    void update() {
        StudentInfo studentInfo=new StudentInfo();
        studentInfo.setUsername("zm");
        studentInfo.setAge(18);
        studentInfo.setPassword("99292");
        studentInfoDao2.update(studentInfo);
    }

可以看到之前我們寫的數據發(fā)生了變化。

3.select

select和上述的3個SQL有所不同,insert,update,delete返回的都是整數,表示數據庫受到影響的行數,所以返回值肯定是Integer,這毋庸置疑。但是select就不一樣了,它的返回值可以是一行數據也可以是多行數據,所以我們不僅僅要設置它的id還需要設置它的返回類型resultType。

    <select id="select" resultType="com.mybatis.demomybatis.demos.model.StudentInfo">
    </select>

resultType中填的類是返回類的全限定類名。這個設置完之后其余的內容和insert那三個也幾乎沒什么區(qū)別。還是創(chuàng)建方法,寫上sql語句即可。

@Mapper
public interface StudentInfoDao {
     List<StudentInfo> select();//傳參和上面一樣,使用用對象即可,我們這里為了方便就不傳參了
}
<select id="select" resultType="com.mybatis.demomybatis.demos.model.StudentInfo">
        select * from mybatis
    </select>
    void select() {
        System.out.println(studentInfoDao.select());
    }

細心的哥們兒會發(fā)現(xiàn)我們有些參數的值是null ,并不能和數據庫相匹配。這是因為一般數據庫的命名習慣和Java的不同,Java采用小駝峰,MySQL采用蛇形命名法,所以StudentInfo類的參數和MySQL中的字段名對不上,導致MyBatis無法映射到類的每個參數中。那我們該怎么解決這個問題呢?這里我來提供3個方法。

4.解決Mybatis參數映射不到的問題

1.改變SQL語句

我們把select * from mybatis改成select user_name as username,delete_flag as deleteFlag,create_time as createTime,uptate_time as uptatetime from mybatis即可。

2.指定映射關系

我們可以用resultMap來指定映射關系,只需要在xml任何一個位置寫一個由<resultMap></resultMap>標簽寫的一組指定映射關系然后再由select標簽的resultMap屬性接受即可。內部使用<result></result>標簽及column,property屬性形容一對映射關系。如以下代碼。

    <resultMap id="StudentMap" type="com.mybatis.demomybatis.demos.model.StudentInfo">
        <result column="user_name" property="username"></result>#這里我們?yōu)榱朔奖阒粚懸粋€對應關系
    </resultMap>
    <select id="select" resultMap="StudentMap">
        select * from mybatis
    </select>

引用方法就是填入resultMap的id。這樣Java就可以返回正確的內容了。

3.使用配置文件直接把對應的蛇形命名法轉化為小駝峰 

映射沒對應上的主要原因就是命名規(guī)則不同,但是表達的內容是相同的,所以MyBatis幫我們實現(xiàn)了命名規(guī)則自動轉化。只要使用了這個配置我們就不需要進行任何操作就可以讓類屬性和SQL字段對應上。yml配置如下:

mybatis:
  configuration: # 配置打印 MyBatis 執(zhí)行的 SQL
    map-underscore-to-camel-case: true  #自動駝峰轉換

這個配置同樣適配于用注解方式寫SQL。那下面我們來講講注解是怎么寫SQL的吧。

注解

1.創(chuàng)建接口

和XML一樣,也得創(chuàng)建接口:

@Mapper
public interface StudentInfoDao {
}

2.寫方法

因為所有方法幾乎都一樣,所以我們只講insert方法和select

insert

直接再方法上加上@Insert(“SQL語句”)即可:

    @Insert("insert into mybatis(user_name,password,age,gender,phone) values(#{username},#{password},#{age}," +
            "#{gender},#{phone})")
    public Integer insert(StudentInfo studentInfo);

非常簡單。

select 

在XML中我們也說了select因為返回參數的問題所以和其他的語句有所不同,注解SQL語句上是相同的。我們要改變類和SQL字段的映射關系也有三種方法,分別是改變SQL語句,指定映射關系,使用配置文件直接把對應的蛇形命名法轉化為小駝峰。第一種和最后一種和XML實現(xiàn)方式一樣,我們這里只講如何指定映射關系。

指定映射關系

我們使用@Results注解,在注解中是@Result注解的集合,我們在@Result中寫映射關系即可,如以下代碼:

@Select("select * from mybatis")
    @Results(id = "re",value = {
            @Result(column = "uptate_time",property = "updateTime"),
            @Result(column = "create_time",property = "createTime"),
            @Result(column = "delete_flag",property = "deleteFlag")
    })
    public List<StudentInfo> select();

這里的id字段就是給這個result集合取個名,以后若要使用就不需要再寫這么一大串集合,直接使用@ResultMap注解,里面填上集合id即可。

@Select("select * from mybatis")   
    @ResultMap("id")
    public List<StudentInfo> select();

因為注解真的很簡單,所以我們就只需要講這么一點,但是不是說xml復雜就是不好用,它在動態(tài)SQL方面比注解方式簡單好多好多倍,在以后的文章中我再和大家提。

總結

XML和注解的本質都是寫一個接口,然后告訴MyBatis這個注解需要實現(xiàn)說明樣的功能,關鍵信息是什么,MyBatis就會配合Spring幫我們實現(xiàn)這個方法供我們使用,這真的比原生JDBC好用許多,這也體現(xiàn)了封裝的優(yōu)越性,讓我們省去了建立連接,關閉連接等各種重復又繁瑣的操作。

以上就是詳解MyBatis的XML實現(xiàn)方法(附帶注解方式實現(xiàn))的詳細內容,更多關于MyBatis XML實現(xiàn)的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot集成Redis消息隊列的實現(xiàn)示例

    SpringBoot集成Redis消息隊列的實現(xiàn)示例

    本文主要介紹了SpringBoot集成Redis消息隊列的實現(xiàn)示例,包括配置和消費邏輯,RedisStream提供了高吞吐量、順序消費和消費組機制等優(yōu)勢,具有一定的參考價值,感興趣的可以了解一下
    2025-05-05
  • SpringBoot請求體缺失異常原因分析與處理方案

    SpringBoot請求體缺失異常原因分析與處理方案

    這篇文章主要介紹了SpringBoot請求體缺失異常原因分析與處理方案,該異常是因為UserController的edit方法缺失了預期的UserUpdatePwdDTO請求體,產生原因主要由前端未發(fā)送請求體、Content-Type設置錯誤或后端缺少@RequestBody注解導致,需要的朋友可以參考下
    2025-10-10
  • 詳解Java的編譯執(zhí)行與解釋執(zhí)行

    詳解Java的編譯執(zhí)行與解釋執(zhí)行

    這篇文章主要介紹了Java的編譯執(zhí)行與解釋執(zhí)行,對編譯和解釋感興趣的同學,可以參考下
    2021-04-04
  • Spring IOC的三種實現(xiàn)方式詳解

    Spring IOC的三種實現(xiàn)方式詳解

    這篇文章主要介紹了Spring IOC的三種實現(xiàn)方式,在Spring框架中,IOC通過依賴注入來實現(xiàn),而依賴注入主要有三種實現(xiàn)方式,構造器注入、Setter注入和字段注入,每種方式都有其特點、適用場景和優(yōu)缺點,需要的朋友可以參考下
    2025-02-02
  • 如何自定義MyBatis攔截器更改表名

    如何自定義MyBatis攔截器更改表名

    自定義MyBatis攔截器可以在方法執(zhí)行前后插入自己的邏輯,這非常有利于擴展和定制 MyBatis 的功能,本篇文章實現(xiàn)自定義一個攔截器去改變要插入或者查詢的數據源?,需要的朋友可以參考下
    2023-10-10
  • java 用redisTemplate 的 Operations存取list集合操作

    java 用redisTemplate 的 Operations存取list集合操作

    這篇文章主要介紹了java 用redisTemplate 的 Operations存取list集合操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Mybatis延遲加載原理和延遲加載配置詳解

    Mybatis延遲加載原理和延遲加載配置詳解

    這篇文章主要介紹了Mybatis延遲加載原理和延遲加載配置詳解,MyBatis中的延遲加載,也稱為懶加載,是指在進行表的關聯(lián)查詢時,按照設置延遲規(guī)則推遲對關聯(lián)對象的select查詢,需要的朋友可以參考下
    2023-10-10
  • MybatisX無法自動生成entity實體類的解決方法

    MybatisX無法自動生成entity實體類的解決方法

    本文主要介紹了MybatisX無法自動生成entity實體類的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Spring boot中PropertySource注解的使用方法詳解

    Spring boot中PropertySource注解的使用方法詳解

    這篇文章主要給大家介紹了關于Spring boot中PropertySource注解的使用方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。
    2017-12-12
  • 兩個jar包下相同包名類名引入沖突的解決方法

    兩個jar包下相同包名類名引入沖突的解決方法

    本文主要介紹了兩個jar包下相同包名類名引入沖突的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

尚志市| 新巴尔虎右旗| 简阳市| 甘孜| 吴桥县| 周口市| 逊克县| 清远市| 哈密市| 通榆县| 永康市| 洪雅县| 泸西县| 广元市| 苗栗县| 博客| 手游| 昌都县| 温泉县| 冕宁县| 丹棱县| 荥阳市| 霸州市| 万山特区| 泸定县| 巨野县| 宿州市| 宽城| 子长县| 陆丰市| 寻乌县| 连南| 樟树市| 松桃| 仙游县| 竹北市| 宿松县| 晴隆县| 平潭县| 罗田县| 武强县|