MyBatis中映射文件的使用案例代碼
Mapper 就是“映射”的意思,Mapper 文件時 Mybatis 中的 SQL 語句的配置文件,其會在運行時加載 SQL 語句并映射相應參數(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è)置類型別名,指定包下所有的類型將全部有用默認的別名,即類名且不區(qū)分大小寫 。
- 要注意標簽的先后順序
<!-- 標簽的先后順序 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ù)表
復制進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ù)核心配置文件對應的輸入流獲取SqlSessionFactory對象 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //獲取SqlSession對象 自動提交 sqlSession = sqlSessionFactory.openSession(true); } catch (IOException e) { e.printStackTrace(); } return sqlSession; }
添加
首先得在Mapper接口中創(chuàng)建方法
int insertUser();
在映射文件中使用
insert
標簽,標簽中的id
要與接口中的方法名保持一致。等調(diào)用接口中的方法,它會根據(jù)mapper接口的全類名找到映射文件,然后會根據(jù)我們調(diào)用的方法的方法名,來找到當前的sql
語句,然后獲取當前的sql
來執(zhí)行。
可以將接口的方法寫在標簽的上方,方便查看。
<!-- 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中應該寫實體類的全類名,但是在核心文件中配置了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會自動把當前參數(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標識參數(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),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07Java數(shù)字格式類(NumberFormat類和DecimalFormat類)用法詳解
NumberFormat類是Java提供的一個格式化數(shù)字的類,可以將一串數(shù)字轉(zhuǎn)化成自己想要的數(shù)據(jù)格式,也可以將字符串轉(zhuǎn)化成數(shù)值,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)字格式類(NumberFormat類和DecimalFormat類)用法的相關(guān)資料,需要的朋友可以參考下2022-07-07Spring Boot 配置和使用多線程池的實現(xiàn)
這篇文章主要介紹了Spring Boot 配置和使用多線程池的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06Mybatis?Plus?新版lambda?表達式查詢異常的處理
這篇文章主要介紹了Mybatis?Plus?新版lambda?表達式查詢異常的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01