Mybatis映射文件規(guī)則實(shí)例詳解
在說(shuō)明映射文件規(guī)則之前,先來(lái)回顧一下ORM相關(guān)概念。
1.ORM概念
ORM(Object Relationship Mapping)對(duì)象關(guān)系映射
對(duì)象:Java的實(shí)體類(lèi)對(duì)象
關(guān)系:關(guān)系型數(shù)據(jù)庫(kù)
映射:二者之間的對(duì)應(yīng)關(guān)系
字段名和屬性名要一一對(duì)應(yīng)才可以,它們的名字要相同,底層調(diào)用的是反射機(jī)制
Java概念 | 數(shù)據(jù)庫(kù)概念 |
---|---|
屬性 | 列,字段 |
類(lèi) | 表 |
對(duì)象 | 記錄 |
2.映射文件命名規(guī)則
表對(duì)應(yīng)的實(shí)體類(lèi)的類(lèi)名+Mapper.xml
舉例:假如數(shù)據(jù)庫(kù)的表的名字是t_user,它對(duì)應(yīng)的實(shí)體類(lèi)是User,那么對(duì)應(yīng)的映射文件為UserMapper.xml
一個(gè)映射文件對(duì)應(yīng)一個(gè)實(shí)體類(lèi),對(duì)應(yīng)一張表的操作,調(diào)用Mapper中的方法就是來(lái)執(zhí)行SQL
Mybatis映射文件用來(lái)寫(xiě)SQL語(yǔ)句,訪問(wèn)和操作表的數(shù)據(jù)
Mybatis映射文件存放位置是src/main/resources/mappers目錄下面
3.Mybatis的兩個(gè)一致
Mybatis可以面向接口操作數(shù)據(jù),如果我們以包為單位引入映射文件,需要有兩個(gè)一致
① 映射文件的namespace要和mapper接口的全類(lèi)名一致
當(dāng)調(diào)用Mapper接口中的方法,它會(huì)先根據(jù)Mapper接口的全類(lèi)名去找到映射文件,然后根據(jù)方法名去找到對(duì)應(yīng)的SQL語(yǔ)句
②映射文件中SQL語(yǔ)句的id要和mapper接口中的方法名一致
4.總結(jié)創(chuàng)建mybatis的步驟
- 創(chuàng)建maven工程
- 在pom.xml中引入相關(guān)依賴(lài),比如數(shù)據(jù)庫(kù)驅(qū)動(dòng),mybatis,junit單元測(cè)試,log4j日志
- 在src/main/java建包
- 3.1 在pojo包下面創(chuàng)建對(duì)應(yīng)的實(shí)體類(lèi)
注:實(shí)體類(lèi)對(duì)應(yīng)數(shù)據(jù)庫(kù)表的記錄
也就是說(shuō)數(shù)據(jù)庫(kù)查詢(xún)出來(lái)的結(jié)果要以什么方式返回 - 3.2 在mapper包下面創(chuàng)建mapper接口,里面定義操作數(shù)據(jù)庫(kù)中表的相關(guān)方法
- 3.1 在pojo包下面創(chuàng)建對(duì)應(yīng)的實(shí)體類(lèi)
- 在resources目錄下面建mybatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--configuration代表核心配置文件--> <configuration> <!-- The content of element type "configuration" must match " (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?, objectWrapperFactory?,reflectorFactory?,plugins?,environments?, databaseIdProvider?,mappers?)".--> <!-- <typeAliases></typeAliases>--> <!-- 因?yàn)楹竺嬉樵?xún)的語(yǔ)句很多,每一個(gè)查詢(xún)語(yǔ)句要對(duì)應(yīng)一個(gè)實(shí)體類(lèi),那么我們?cè)谥付ǚ祷仡?lèi)型的時(shí)候--> <!-- 要寫(xiě)類(lèi)的全路徑,路徑可能很長(zhǎng),這樣就很麻煩,我們就可以使用標(biāo)簽--> <properties resource="jdbc.properties"/> <!-- 設(shè)置類(lèi)型別名--> <typeAliases> <!-- typeAlias:設(shè)置某個(gè)類(lèi)型的別名 屬性: type:設(shè)置需要設(shè)置別名的類(lèi)型 alias:設(shè)置某個(gè)類(lèi)型的別名,如果不設(shè)置該屬性,則這個(gè)類(lèi)型有默認(rèn)的別名,而且類(lèi)名不區(qū)分大小寫(xiě) --> <typeAlias type="com.atguigu.mybatis.mybatis.pojo.User" alias="User"></typeAlias> <!-- 以包為單位,把包下面的所有類(lèi)型設(shè)置成為默認(rèn)的類(lèi)型別名,——類(lèi)名不區(qū)分大小寫(xiě)--> <package name="com.atguigu.mybatis.pojo"/> </typeAliases> <!-- 環(huán)境可以有多個(gè),我們用默認(rèn)的環(huán)境--> <!-- enviments:配置連接數(shù)據(jù)庫(kù)的環(huán)境 id:表示連接數(shù)據(jù)庫(kù)環(huán)境的唯一標(biāo)識(shí),不能重復(fù)--> <environments default="development"> <environment id="development"> <!-- transactionManager設(shè)置事務(wù)管理方式 type=DBC|MANAGED JDBC:表示在當(dāng)前環(huán)境中,執(zhí)行SQL時(shí),使用的是JDBC中原生的事務(wù)管理方式,事務(wù)的提交或回滾需要手動(dòng)處理 MANAGED:表示被誰(shuí)管理,例如Spring--> <transactionManager type="JDBC"/> <!-- type用來(lái)設(shè)置數(shù)據(jù)源的類(lèi)型 type=POOLED|UNPOOLED|JNDI POOLED:表示使用的是數(shù)據(jù)庫(kù)連接池緩存數(shù)據(jù)庫(kù)連接 UNPOOLED:表示不使用數(shù)據(jù)庫(kù)連接池 JNDI:表示使用的是上下文中的數(shù)據(jù)源--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- 數(shù)據(jù)源就是連接是連接數(shù)據(jù)庫(kù)的信息--> </dataSource> </environment> <environment id="test"> <transactionManager type="JDBC"/> <!-- type=POOLED表示使用數(shù)據(jù)庫(kù)連接池--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 引入映射文件--> <!-- 每一個(gè)Mapper.xml都需要在Mybatis的核心配置文件中注冊(cè)--> <!-- mapper文件的位置是為了找到要執(zhí)行的sql語(yǔ)句 resources屬性指定的是mapper文件的路徑 這個(gè)路徑是從target/classes路徑開(kāi)始的 用/作為分隔符--> <mappers> <!-- <mapper resource="mappers/UserMapper.xml"/>--> <!-- 這個(gè)時(shí)候,這個(gè)包里面的所有配置文件都會(huì)被引入--> <!-- 以包為單位引入映射文件 要求: 1.mapper接口所在的包要和映射文件所在的包一致 2.mapper接口要和映射文件的名字一致 --> <package name="com.atguigu.mybatis.mapper"/> </mappers> </configuration>
4.在resources目錄下面建立mapper映射文件
5.測(cè)試
//加載核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //獲取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //獲取SqlSessionFactory 工廠模式 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //獲取mybatis操作的會(huì)話對(duì)象 //sqlSession默認(rèn)是不自動(dòng)提交事務(wù)的,如果我們寫(xiě)上參數(shù)true,就代表自動(dòng)提交 SqlSession sqlSession = sqlSessionFactory.openSession(true); //獲取mapper接口的對(duì)象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.insertUser(); //提交事務(wù) // sqlSession.commit(); System.out.println("結(jié)果:"+i);
補(bǔ)充:MyBatis_自定義結(jié)果映射規(guī)則
自定義resultMap,實(shí)現(xiàn)高級(jí)結(jié)果集映射
在EmployeeMapperPlus.xml中有:
package com.atguigu.mybatis.dao; import java.util.List; import com.atguigu.mybatis.bean.Employee; public interface EmployeeMapperPlus { ? ? public Employee getEmpById(Integer id); }
在EmployeeMapperPlus.xml中實(shí)現(xiàn)方法:
? ? <!--自定義某個(gè)javaBean的封裝規(guī)則 ? ? type:自定義規(guī)則的Java類(lèi)型 ? ? id:唯一id方便引用 ? ? ? --> ? ? <resultMap type="com.atguigu.mybatis.bean.Employee" id="MySimpleEmp"> ? ? ? ? <!--指定主鍵列的封裝規(guī)則 ? ? ? ? id用來(lái)定義主鍵,會(huì)底層有優(yōu)化; ? ? ? ? column:指定哪一列 ? ? ? ? property:指定對(duì)應(yīng)的javaBean屬性 ? ? ? ? ? --> ? ? ? ? <id column="id" property="id"/> ? ? ? ? <!-- result定義普通列封裝規(guī)則 --> ? ? ? ? <result column="last_name" property="lastName"/> ? ? ? ? <!-- 其他不指定的列會(huì)自動(dòng)封裝:我們只要寫(xiě)resultMap就把全部的映射規(guī)則都寫(xiě)上。 --> ? ? ? ? <result column="email" property="email"/> ? ? ? ? <result column="gender" property="gender"/> ? ? </resultMap> ? ? <!-- resultMap:自定義結(jié)果集映射規(guī)則; ?--> ? ? <!-- resultMap與resultType只能二選一 ?--> ? ? <!-- public Employee getEmpById(Integer id); --> ? ? <select id="getEmpById" ?resultMap="MySimpleEmp"> ? ? ? ? select * from tbl_employee where id=#{id} ? ? </select>
測(cè)試:
先把駝峰命名法關(guān)了<setting name="mapUnderscoreToCamelCase" value="false"/>,或者注釋掉也可以
@Test public void test05() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class); Employee empById = mapper.getEmpById(1); System.out.println(empById); }finally{ openSession.close(); } }
即使把駝峰命名關(guān)了還是可以按照我們自定義的規(guī)則封裝成功的
總結(jié)
到此這篇關(guān)于Mybatis映射文件規(guī)則的文章就介紹到這了,更多相關(guān)Mybatis映射文件規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mybatis關(guān)聯(lián)映射舉例詳解
- Mybatis實(shí)現(xiàn)關(guān)聯(lián)關(guān)系映射的方法示例
- MyBatis多對(duì)多關(guān)聯(lián)映射創(chuàng)建示例
- 關(guān)于MyBatis結(jié)果映射的實(shí)例總結(jié)
- Mybatis全局配置及映射關(guān)系的實(shí)現(xiàn)
- 使用MyBatis-Generator如何自動(dòng)生成映射文件
- MyBatis的SUM映射問(wèn)題及解決
- mybatis映射和實(shí)際類(lèi)型不一致的問(wèn)題
- MyBatisPlus深入探究映射匹配的兼容性
相關(guān)文章
基于Java實(shí)現(xiàn)中文分詞系統(tǒng)的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)易的中文分詞系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-07-07Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(53)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-08-08