MyBatis中常見的SQL執(zhí)行方式及其使用方法
引言
MyBatis 是一個基于 Java 的持久層框架,它提供了多種方式來執(zhí)行 SQL 語句,包括直接使用 SqlSession 執(zhí)行、使用映射器(Mapper)執(zhí)行、使用 SqlSessionTemplate 執(zhí)行等。本文將介紹 MyBatis 中常見的 SQL 執(zhí)行方式及其使用方法。
1. 直接使用 SqlSession 執(zhí)行 SQL 語句
在 MyBatis 中,可以通過 SqlSession 對象直接執(zhí)行 SQL 語句。SqlSession 是 MyBatis 的核心類之一,它負責與數(shù)據(jù)庫進行交互和管理事務(wù)。SqlSession 提供了多個方法來執(zhí)行 SQL 語句,比如 selectOne、selectList、insert、update 和 delete 等。下面是一個簡單的示例:
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í)行查詢語句
User user = sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", 1);
System.out.println(user);
// 執(zhí)行插入語句
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,然后通過 SqlSessionFactoryBuilder 將配置文件解析為 SqlSessionFactory 對象,最后通過 SqlSessionFactory 創(chuàng)建 SqlSession 對象。在 SqlSession 中,可以通過 selectOne、selectList、insert、update 和 delete 等方法執(zhí)行 SQL 語句。其中,selectOne 方法用于查詢單個結(jié)果,selectList 方法用于查詢多個結(jié)果,insert、update 和 delete 方法用于執(zhí)行更新或刪除操作。這些方法的第一個參數(shù)為 SQL 語句的 ID,格式為 “namespace.statementId”,其中 namespace 為映射器的命名空間,statementId 為 SQL 語句的 ID。
2. 使用映射器(Mapper)執(zhí)行 SQL 語句
除了直接使用 SqlSession 執(zhí)行 SQL 語句外,還可以通過映射器(Mapper)執(zhí)行 SQL 語句。映射器是 MyBatis 中用于定義 SQL 語句和 Java 對象之間映射關(guān)系的接口,它可以通過 XML 或注解的方式進行定義。下面是一個簡單的映射器示例:
public interface UserMapper {
// 查詢用戶信息
User getUserById(int id);
// 添加用戶信息
int addUser(User user);
}在上面的示例代碼中,定義了一個名為 UserMapper 的映射器接口,其中包含了兩個方法:getUserById 和 addUser。這兩個方法的實現(xiàn)方式與直接使用 SqlSession 執(zhí)行 SQL 語句的方式類似,只不過將 SQL 語句和參數(shù)映射的工作放在了映射器接口中。下面是一個使用映射器執(zhí)行 SQL 語句的示例:
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í)行查詢語句
User user = userMapper.getUserById(1);
System.out.println(user);
// 執(zhí)行插入語句
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,然后通過 SqlSessionFactoryBuilder 將配置文件解析為SqlSessionFactory 對象,最后通過 SqlSessionFactory 創(chuàng)建 SqlSession 對象。在 SqlSession 中,通過 getMapper 方法獲取映射器接口的實例,然后就可以直接調(diào)用映射器接口中的方法執(zhí)行 SQL 語句了。
3. 使用 SqlSessionTemplate 執(zhí)行 SQL 語句
除了直接使用 SqlSession 和映射器執(zhí)行 SQL 語句外,還可以使用 SqlSessionTemplate 執(zhí)行 SQL 語句。SqlSessionTemplate 是 MyBatis-Spring 模塊提供的一個類,它封裝了 SqlSession 的常用操作,可以方便地在 Spring 框架中使用。下面是一個簡單的示例:
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);
}
}在上面的示例代碼中,通過注入 SqlSessionTemplate 對象來執(zhí)行 SQL 語句。SqlSessionTemplate 提供了多個方法來執(zhí)行 SQL 語句,包括 selectOne、selectList、insert、update 和 delete 等。這些方法的使用方式與直接使用 SqlSession 執(zhí)行 SQL 語句的方式類似。
4. SQL 語句的參數(shù)映射
在執(zhí)行 SQL 語句時,需要將 SQL 語句中的參數(shù)映射到 Java 對象中。MyBatis 提供了多種方式來實現(xiàn)參數(shù)映射,包括基本類型參數(shù)、JavaBean 參數(shù)、Map 參數(shù)和注解參數(shù)等。下面是一個簡單的示例:
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ù)時,需要將 SQL 語句中的參數(shù)與 Java 對象的屬性進行映射。在使用注解參數(shù)時,需要在 SQL 語句中使用 #{paramName} 的方式,其中 paramName 為注解參數(shù)的名稱。
5. SQL 語句的返回結(jié)果映射
在執(zhí)行 SQL 語句時,需要將 SQL 語句中的返回結(jié)果映射到 Java 對象中。MyBatis 提供了多種方式來實現(xiàn)返回結(jié)果映射,包括基本類型返回、JavaBean 返回、Map 返回和注解返回等。下面是一個簡單的示例:
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 方法返回了一個 JavaBean,getUserByIdMap 方法返回了一個 Map,getUserByIdAnnotation 方法使用了注解返回。在使用注解返回時,需要在 SQL 語句中使用 @Results 和 @Result 注解將查詢結(jié)果與 JavaBean 的屬性進行映射。
6. 總結(jié)
MyBatis 提供了多種方式來執(zhí)行 SQL 語句,包括直接使用 SqlSession 執(zhí)行、使用映射器執(zhí)行、使用 SqlSessionTemplate 執(zhí)行等。在執(zhí)行 SQL 語句時,需要將 SQL 語句中的參數(shù)和返回結(jié)果
到此這篇關(guān)于MyBatis中常見的SQL執(zhí)行方式及其使用方法的文章就介紹到這了,更多相關(guān)MyBatis執(zhí)行SQL語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實現(xiàn)Excel百萬級數(shù)據(jù)導(dǎo)入功能的示例代碼
這篇文章主要為大家詳細介紹了Java如何實現(xiàn)Excel百萬級數(shù)據(jù)導(dǎo)入功能,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下2024-04-04
SpringBoot?ApplicationContext接口深入分析
ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊監(jiān)聽事件,加載資源文件等2022-11-11
springboot單獨使用feign簡化接口調(diào)用方式
這篇文章主要介紹了springboot單獨使用feign簡化接口調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
解決java數(shù)值范圍以及float與double精度丟失的問題
下面小編就為大家?guī)硪黄鉀Qjava數(shù)值范圍以及float與double精度丟失的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
SpringBoot3.x嵌入MongoDB進行測試的步驟詳解
本文介紹了在?Spring?Boot?應(yīng)用中使用Flapdoodle?Embed?Mongo進行?MongoDB?測試的方法,包括Embed?Mongo?的概念,添加依賴、配置、運行測試的步驟,還列舉了其優(yōu)勢如快速啟動關(guān)閉、環(huán)境一致、無需外部依賴等,以及注意事項和結(jié)論,需要的朋友可以參考下2024-12-12

