MyBatis中執(zhí)行SQL語(yǔ)句的幾種方式總結(jié)
MyBatis 中如何執(zhí)行 SQL 語(yǔ)句
MyBatis 是一個(gè)基于 Java 的持久層框架,它提供了多種方式來(lái)執(zhí)行 SQL 語(yǔ)句,包括直接使用 SqlSession 執(zhí)行、使用映射器(Mapper)執(zhí)行、使用 SqlSessionTemplate 執(zhí)行等。本文將介紹 MyBatis 中常見(jiàn)的 SQL 執(zhí)行方式及其使用方法。
1. 直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句
在 MyBatis 中,可以通過(guò) SqlSession 對(duì)象直接執(zhí)行 SQL 語(yǔ)句。SqlSession 是 MyBatis 的核心類之一,它負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互和管理事務(wù)。SqlSession 提供了多個(gè)方法來(lái)執(zhí)行 SQL 語(yǔ)句,比如 selectOne、selectList、insert、update 和 delete 等。下面是一個(gè)簡(jiǎn)單的示例:
public class MyBatisTest { public static void main(String[] args) { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { // 執(zhí)行查詢語(yǔ)句 User user = sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", 1); System.out.println(user); // 執(zhí)行插入語(yǔ)句 User newUser = new User(); newUser.setName("Tom"); newUser.setAge(20); int result = sqlSession.insert("com.example.mapper.UserMapper.addUser", newUser); System.out.println(result); sqlSession.commit(); } finally { sqlSession.close(); } } }
在上面的示例代碼中,首先讀取了配置文件 mybatis-config.xml,然后通過(guò) SqlSessionFactoryBuilder 將配置文件解析為 SqlSessionFactory 對(duì)象,最后通過(guò) SqlSessionFactory 創(chuàng)建 SqlSession 對(duì)象。在 SqlSession 中,可以通過(guò) selectOne、selectList、insert、update 和 delete 等方法執(zhí)行 SQL 語(yǔ)句。其中,selectOne 方法用于查詢單個(gè)結(jié)果,selectList 方法用于查詢多個(gè)結(jié)果,insert、update 和 delete 方法用于執(zhí)行更新或刪除操作。這些方法的第一個(gè)參數(shù)為 SQL 語(yǔ)句的 ID,格式為 “namespace.statementId”,其中 namespace 為映射器的命名空間,statementId 為 SQL 語(yǔ)句的 ID。
2. 使用映射器(Mapper)執(zhí)行 SQL 語(yǔ)句
除了直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句外,還可以通過(guò)映射器(Mapper)執(zhí)行 SQL 語(yǔ)句。映射器是 MyBatis 中用于定義 SQL 語(yǔ)句和 Java 對(duì)象之間映射關(guān)系的接口,它可以通過(guò) XML 或注解的方式進(jìn)行定義。下面是一個(gè)簡(jiǎn)單的映射器示例:
public interface UserMapper { // 查詢用戶信息 User getUserById(int id); // 添加用戶信息 int addUser(User user); }
在上面的示例代碼中,定義了一個(gè)名為 UserMapper 的映射器接口,其中包含了兩個(gè)方法:getUserById 和 addUser。這兩個(gè)方法的實(shí)現(xiàn)方式與直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句的方式類似,只不過(guò)將 SQL 語(yǔ)句和參數(shù)映射的工作放在了映射器接口中。下面是一個(gè)使用映射器執(zhí)行 SQL 語(yǔ)句的示例:
public class MyBatisTest { public static void main(String[] args) { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 執(zhí)行查詢語(yǔ)句 User user = userMapper.getUserById(1); System.out.println(user); // 執(zhí)行插入語(yǔ)句 User newUser = new User(); newUser.setName("Tom"); newUser.setAge(20); int result = userMapper.addUser(newUser); System.out.println(result); sqlSession.commit(); } finally { sqlSession.close(); } } }
在上面的示例代碼中,首先讀取了配置文件 mybatis-config.xml,然后通過(guò) SqlSessionFactoryBuilder 將配置文件解析為SqlSessionFactory 對(duì)象,最后通過(guò) SqlSessionFactory 創(chuàng)建 SqlSession 對(duì)象。在 SqlSession 中,通過(guò) getMapper 方法獲取映射器接口的實(shí)例,然后就可以直接調(diào)用映射器接口中的方法執(zhí)行 SQL 語(yǔ)句了。
3. 使用 SqlSessionTemplate 執(zhí)行 SQL 語(yǔ)句
除了直接使用 SqlSession 和映射器執(zhí)行 SQL 語(yǔ)句外,還可以使用 SqlSessionTemplate 執(zhí)行 SQL 語(yǔ)句。SqlSessionTemplate 是 MyBatis-Spring 模塊提供的一個(gè)類,它封裝了 SqlSession 的常用操作,可以方便地在 Spring 框架中使用。下面是一個(gè)簡(jiǎn)單的示例:
public class UserServiceImpl implements UserService { private SqlSessionTemplate sqlSessionTemplate; public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSessionTemplate = sqlSessionTemplate; } @Override public User getUserById(int id) { return sqlSessionTemplate.selectOne("com.example.mapper.UserMapper.getUserById", id); } @Override public int addUser(User user) { return sqlSessionTemplate.insert("com.example.mapper.UserMapper.addUser", user); } }
在上面的示例代碼中,通過(guò)注入 SqlSessionTemplate 對(duì)象來(lái)執(zhí)行 SQL 語(yǔ)句。SqlSessionTemplate 提供了多個(gè)方法來(lái)執(zhí)行 SQL 語(yǔ)句,包括 selectOne、selectList、insert、update 和 delete 等。這些方法的使用方式與直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句的方式類似。
4. SQL 語(yǔ)句的參數(shù)映射
在執(zhí)行 SQL 語(yǔ)句時(shí),需要將 SQL 語(yǔ)句中的參數(shù)映射到 Java 對(duì)象中。MyBatis 提供了多種方式來(lái)實(shí)現(xiàn)參數(shù)映射,包括基本類型參數(shù)、JavaBean 參數(shù)、Map 參數(shù)和注解參數(shù)等。下面是一個(gè)簡(jiǎn)單的示例:
public interface UserMapper { // 查詢用戶信息 User getUserById(int id); // 添加用戶信息 int addUser(User user); // 查詢用戶信息,使用 Map 參數(shù) User getUserByIdMap(Map<String, Object> paramMap); // 添加用戶信息,使用注解參數(shù) @Insert("insert into user(name, age) values(#{user.name}, #{user.age})") int addUserAnnotation(@Param("user") User user); }
在上面的示例代碼中,getUserById 和 addUser 方法使用了 JavaBean 參數(shù),getUserByIdMap 方法使用了 Map 參數(shù),addUserAnnotation 方法使用了注解參數(shù)。在使用 JavaBean 參數(shù)和 Map 參數(shù)時(shí),需要將 SQL 語(yǔ)句中的參數(shù)與 Java 對(duì)象的屬性進(jìn)行映射。在使用注解參數(shù)時(shí),需要在 SQL 語(yǔ)句中使用 #{paramName} 的方式,其中 paramName 為注解參數(shù)的名稱。
5. SQL 語(yǔ)句的返回結(jié)果映射
在執(zhí)行 SQL 語(yǔ)句時(shí),需要將 SQL 語(yǔ)句中的返回結(jié)果映射到 Java 對(duì)象中。MyBatis 提供了多種方式來(lái)實(shí)現(xiàn)返回結(jié)果映射,包括基本類型返回、JavaBean 返回、Map 返回和注解返回等。下面是一個(gè)簡(jiǎn)單的示例:
public interface UserMapper { // 查詢用戶信息,返回 JavaBean User getUserById(int id); // 查詢用戶信息,返回 Map Map<String, Object> getUserByIdMap(int id); // 查詢用戶信息,使用注解返回 @Select("select name, age from user where id=#{id}") @Results({ @Result(property = "name", column = "name"), @Result(property = "age", column = "age") }) User getUserByIdAnnotation(int id); }
在上面的示例代碼中,getUserById 方法返回了一個(gè) JavaBean,getUserByIdMap 方法返回了一個(gè) Map,getUserByIdAnnotation 方法使用了注解返回。在使用注解返回時(shí),需要在 SQL 語(yǔ)句中使用 @Results 和 @Result 注解將查詢結(jié)果與 JavaBean 的屬性進(jìn)行映射。
6. 總結(jié)
MyBatis 提供了多種方式來(lái)執(zhí)行 SQL 語(yǔ)句,包括直接使用 SqlSession 執(zhí)行、使用映射器執(zhí)行、使用 SqlSessionTemplate 執(zhí)行等。在執(zhí)行 SQL 語(yǔ)句時(shí),需要將 SQL 語(yǔ)句中的參數(shù)和返回結(jié)果
到此這篇關(guān)于MyBatis中執(zhí)行SQL語(yǔ)句的幾種方式的文章就介紹到這了,更多相關(guān)MyBatis執(zhí)行SQL語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
動(dòng)態(tài)代理模擬實(shí)現(xiàn)aop的示例
下面小編就為大家?guī)?lái)一篇?jiǎng)討B(tài)代理模擬實(shí)現(xiàn)aop的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望對(duì)大家有所幫助2017-11-11spring?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程
這篇文章主要為大家介紹了spring?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03Springboot注入成員變量HttpServletRequest的原理分析
這篇文章主要介紹了Springboot注入成員變量HttpServletRequest的原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05java可以作為第一門編程語(yǔ)言學(xué)習(xí)嗎
在本篇內(nèi)容里小編給JAVA零基礎(chǔ)的網(wǎng)友分享一篇關(guān)于java可以作為第一門編程語(yǔ)言學(xué)習(xí)嗎的文章,有興趣的朋友們可以參考下。2020-11-11Java中區(qū)別.toString() ,(String),valueOf()方法
這篇文章主要介紹了Java中區(qū)別.toString() ,(String),valueOf()方法,需要的朋友可以參考下2017-01-01關(guān)于@Autowired注解和靜態(tài)方法及new的關(guān)系
這篇文章主要介紹了關(guān)于@Autowired注解和靜態(tài)方法及new的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java圖形用戶界面設(shè)計(jì)(Swing)的介紹
看到多數(shù)人提到 Java 就以為是網(wǎng)絡(luò)開(kāi)發(fā),其實(shí)不是這樣的,Java 也可以開(kāi)發(fā)應(yīng)用程序,而且可以開(kāi)發(fā)出漂亮的圖形用戶界面的應(yīng)用程序,因此,我寫下這篇文章,希望能帶你進(jìn)入 Java 圖形用戶界面設(shè)計(jì)之門。2016-07-07Java深入了解數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹(shù)增 插 刪 創(chuàng)詳解
二叉搜索樹(shù)是以一棵二叉樹(shù)來(lái)組織的。每個(gè)節(jié)點(diǎn)是一個(gè)對(duì)象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點(diǎn)的左孩子,right指向該節(jié)點(diǎn)的右孩子,p指向該節(jié)點(diǎn)的父節(jié)點(diǎn),key是它的值2022-01-01