MyBatis中映射文件的使用案例代碼
Mapper 就是“映射”的意思,Mapper 文件時 Mybatis 中的 SQL 語句的配置文件,其會在運行時加載 SQL 語句并映射相應(yīng)參數(shù)。在 Mybatis 的全局配置文件中,其中最后一項就是 mapper 文件的資源路徑的配置,因為創(chuàng)建 SqlSessionFactory 時會加載全局配置文件,這說明 Mapper 映射文件會在創(chuàng)建伊始就會被加載了。本文重點講解MyBatis映射文件的使用。
MyBatis中映射文件的使用
1、配置核心文件
①引入映射文件
? 首先我們得在核心配置文件中配置mappers,引入映射文件所在的包
<mappers>
<package name="com.ch.mybatis.mapper"></package>
</mappers>這里必須滿足兩個條件:
- 接口和映射文件所在的包必須一致
- 接口的名字和映射文件的名字必須一致

②配置typeAliases
typeAliases:設(shè)置類型別名,即為某個具體的類型設(shè)置一個別名。在MyBatis的范圍中,就可以使用別名表示一個具體的類型。
在核心配置文件中設(shè)置typeAliases,在映射文件中則可以直接使用別名。
- 通過包設(shè)置類型別名,指定包下所有的類型將全部有用默認(rèn)的別名,即類名且不區(qū)分大小寫 。
- 要注意標(biāo)簽的先后順序
<!--
標(biāo)簽的先后順序
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?
-->
<typeAliases>
<package name="com.ch.mybatis.pojo"></package>
</typeAliases>③配置映射文件
namespace接口的全類名和映射文件namespace一致。
<mapper namespace="com.ch.mybatis.mapper.userMapper">
</mapper>2、MyBatis的增刪改查
創(chuàng)建數(shù)據(jù)表
復(fù)制進MySQL數(shù)據(jù)庫中運行即可
DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `age` int(11) DEFAULT NULL, `gender` char(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;

工具類
? 創(chuàng)建一個工具類,每次測試就不用去重新寫,直接調(diào)用獲取返回值即可
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
try {
//獲取核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatis-config.xml");
//獲取SqlSessionFactoryBuilder對象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//根據(jù)核心配置文件對應(yīng)的輸入流獲取SqlSessionFactory對象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//獲取SqlSession對象 自動提交
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}添加
首先得在Mapper接口中創(chuàng)建方法
int insertUser();
在映射文件中使用
insert標(biāo)簽,標(biāo)簽中的id要與接口中的方法名保持一致。等調(diào)用接口中的方法,它會根據(jù)mapper接口的全類名找到映射文件,然后會根據(jù)我們調(diào)用的方法的方法名,來找到當(dāng)前的sql語句,然后獲取當(dāng)前的sql來執(zhí)行。
可以將接口的方法寫在標(biāo)簽的上方,方便查看。
<!-- int insertUser(); -->
<insert id="insertUser">
insert into t_user
values (null, 'admin', '123456', 23, '男', '12345@qq.com')
</insert>測試代碼
public void testinsert(){
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.insertUser();
sqlSession.close();
}修改
<!-- void updateUser(); -->
<update id="updateUser">
update t_user set username='root',password='123'where id = 1
</update>刪除
<!-- void deleteUser(); -->
<delete id="deleteUser">
delete from t_user where id = 1
</delete>查詢
查詢比較特殊除了得設(shè)置id還必須得設(shè)置另外一個參數(shù)resultType或resultMap
resultType:設(shè)置結(jié)果類型,即查詢的數(shù)據(jù)要轉(zhuǎn)換為的java的類型
resultMap:自定義映射,處理多對一或一對多的映射關(guān)系resultType中應(yīng)該寫實體類的全類名,但是在核心文件中配置了typeAliases,所以這里可以直接寫實體類的名字不區(qū)分大小寫
<!-- User selectUser();-->
<select id="selectUser" resultType="user">
select id, username, password, age, gender, email from t_user where id = 1
</select>3、MyBatis獲取參數(shù)值的兩種方式
MyBatis獲取參數(shù)值的兩種方式:${}和#{}
${}的本質(zhì)就是字符串拼接,#{}的本質(zhì)就是占位符賦值
${}使用字符串拼接的方式拼接sql,若為字符串類型或日期類型的字段進行賦值時,需要手動加單引號;
但是#{}使用占位符賦值的方式拼接sql,此時為字符串類型或日期類型的字段進行賦值時, 可以自動添加單引號
單個字面量類型的參數(shù)
<!-- User getUserByUsername(String username); -->
<select id="getUserByUsername" resultType="user">
<!-- select * from t_user where username = #{username}-->
select * from t_user where username = '${username}'
</select>mapper接口方法的參數(shù)為單個的字面量類型此時可以通過
#{}和${}以任意的內(nèi)容獲取參數(shù)值,一定要注意${}的單引號問題
多個字面量類型的參數(shù)
<!-- User chekLogin(String username , String password); -->
<select id="chekLogin" resultType="user">
<!-- select * from t_user where username = #{arg0} and password = #{arg1}-->
select * from t_user where username = '${param1}' and password = '${param2}'
</select>mybatis會自動把當(dāng)前參數(shù)放在一個Map集合中
放在Map集合中會以兩種方式存儲數(shù)據(jù)
①arg0,arg1…為鍵,以參數(shù)為值
②param1,param2…為鍵,以參數(shù)為值
map集合類型的參數(shù)
<!-- User chekLoginByMap(Map<String,Object> map);-->
<select id="chekLoginByMap" resultType="user">
select * from t_user where username = #{username} and password = #{password}
</select>mapper接口方法的參數(shù)為map集合類型的參數(shù)
只需要通過#{}和${}范圍map集合的鍵,
就可以獲取相對于的值,一定要注意${}的單引號問題
測試代碼
public void testChekLoginByMap() {
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
userMapper mapper = sqlSession.getMapper(userMapper.class);
Map map = new HashMap<String, Object>();
map.put("username", "admin");
map.put("password", "123456");
User admin = mapper.chekLoginByMap(map);
System.out.println(admin);
}實體類類型的參數(shù)
<!-- void selectUser(User User); -->
<insert id="selectUser">
insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>mapper接口方法的參數(shù)為實體類類型的參數(shù)
只需要通過#{}和${}訪問實體類中的屬性名,
就可以獲取相對于的屬性值,一定要注意${}的單引號問題
使用@Param標(biāo)識參數(shù)
<!-- User chekLoginByUser(@Param("username") String username ,@Param("password") String password); -->
<select id="chekLoginByUser" resultType="user">
select * from t_user where username = #{username} and password = #{password}
</select>可以在mapper接口將這些參數(shù)上設(shè)置@param注解
此時MyBatis會將這些參數(shù)放在map中,以@Param注解的value屬性值為鍵,以參數(shù)為值;
到此這篇關(guān)于MyBatis中映射文件的使用的文章就介紹到這了,更多相關(guān)MyBatis映射文件的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java基于JDBC連接數(shù)據(jù)庫及顯示數(shù)據(jù)操作示例
這篇文章主要介紹了Java基于JDBC連接數(shù)據(jù)庫及顯示數(shù)據(jù)操作,結(jié)合實例形式分析了Java使用jdbc進行mysql數(shù)據(jù)庫連接與數(shù)據(jù)讀取、顯示等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
一文解決pom.xml報錯Dependency "xxx" not f
我們在使用maven進行jar包管理時有時會遇到pom.xml中報錯Dependency “XXX” not found,所以在本文中將給大家介紹一下pom.xml報錯Dependency "xxx" not found的解決方案,需要的朋友可以參考下2024-01-01
東方通TongWeb結(jié)合Spring-Boot使用的實現(xiàn)
本文主要介紹了東方通TongWeb結(jié)合Spring-Boot使用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Java數(shù)字格式類(NumberFormat類和DecimalFormat類)用法詳解
NumberFormat類是Java提供的一個格式化數(shù)字的類,可以將一串?dāng)?shù)字轉(zhuǎn)化成自己想要的數(shù)據(jù)格式,也可以將字符串轉(zhuǎn)化成數(shù)值,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)字格式類(NumberFormat類和DecimalFormat類)用法的相關(guān)資料,需要的朋友可以參考下2022-07-07
Spring Boot 配置和使用多線程池的實現(xiàn)
這篇文章主要介紹了Spring Boot 配置和使用多線程池的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
Mybatis?Plus?新版lambda?表達(dá)式查詢異常的處理
這篇文章主要介紹了Mybatis?Plus?新版lambda?表達(dá)式查詢異常的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

