一、SqlSessionTemplate簡介
SqlSessionTemplate是MyBatis-Spring的核心之一。它使用了Spring的SqlSession工廠來創建SqlSession,Spring的SqlSession工廠是使用MyBatis的SqlSessionFactory來創建SqlSession的。
SqlSessionTemplate是線程安全的,同時它也管理著SqlSession的生命周期,和SqlSession的關閉。
二、SqlSessionTemplate的優點
SqlSessionTemplate的優點主要體現在以下幾個方面:
1、代碼簡潔
SqlSessionTemplate將SqlSession的使用封裝在了一個類中,我們只需要調用SqlSessionTemplate的方法就可以使用SqlSession了,不用關心SqlSession的創建和關閉。
2、線程安全
SqlSessionTemplate是線程安全的,因為它是通過Spring的SqlSession工廠來創建SqlSession的,SqlSessionTemplate本身是沒有狀態的。
3、統一管理SqlSession的生命周期
SqlSessionTemplate管理著SqlSession的生命周期,它會自動為我們關閉SqlSession。這樣,我們就不用擔心在代碼中忘記關閉SqlSession的問題了。
三、SqlSessionTemplate的常用方法
SqlSessionTemplate提供了一系列的方法,這裡選擇了其中的一部分作為例子進行介紹。
1、insert
insert方法可以插入一條記錄到資料庫中,使用方式如下:
public int insert(String statement, Object parameter) throws DataAccessException {
return this.sqlSession.insert(statement, parameter);
}
參數說明:
- statement:指定要執行的SQL語句。
- parameter:傳入的參數,可以是一個對象或Map。
2、selectOne
selectOne方法可以查詢一條記錄,使用方式如下:
public T selectOne(String statement) throws DataAccessException {
return this.sqlSession.selectOne(statement);
}
public T selectOne(String statement, Object parameter) throws DataAccessException {
return this.sqlSession.selectOne(statement, parameter);
}
參數說明:
- statement:指定要執行的SQL語句。
- parameter:傳入的參數,可以是一個對象或Map。
3、update
update方法可以更新一條記錄,使用方式如下:
public int update(String statement, Object parameter) throws DataAccessException {
return this.sqlSession.update(statement, parameter);
}
參數說明:
- statement:指定要執行的SQL語句。
- parameter:傳入的參數,可以是一個對象或Map。
4、delete
delete方法可以刪除一條記錄,使用方式如下:
public int delete(String statement, Object parameter) throws DataAccessException {
return this.sqlSession.delete(statement, parameter);
}
參數說明:
- statement:指定要執行的SQL語句。
- parameter:傳入的參數,可以是一個對象或Map。
四、完整代碼示例
1、SqlMapConfig.xml配置文件
<?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>
<!-- 配置數據源 -->
<dataSource type="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
<!-- 配置SqlSession工廠 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 配置SqlSessionTemplate -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!-- 配置Mapper的掃描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
</bean>
</configuration>
2、使用SqlSessionTemplate進行資料庫操作的代碼
@Repository
public class UserDao {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public int addUser(User user) {
return sqlSessionTemplate.insert("addUser", user);
}
public User getUserById(int id) {
return sqlSessionTemplate.selectOne("getUserById", id);
}
public List getAllUser() {
return sqlSessionTemplate.selectList("getAllUser");
}
public int updateUser(User user) {
return sqlSessionTemplate.update("updateUser", user);
}
public int deleteUser(int id) {
return sqlSessionTemplate.delete("deleteUser", id);
}
}
3、Mapper.xml文件
<mapper namespace="com.example.mapper.UserMapper">
<!-- 添加用戶 -->
<insert id="addUser" parameterType="com.example.pojo.User">
insert into user(id, username, password) values(#{id}, #{username}, #{password})
</insert>
<!-- 根據id查詢用戶 -->
<select id="getUserById" parameterType="int" resultType="com.example.pojo.User">
select * from user where id = #{id}
</select>
<!-- 查詢所有用戶 -->
<select id="getAllUser" resultType="com.example.pojo.User">
select * from user
</select>
<!-- 更新用戶 -->
<update id="updateUser" parameterType="com.example.pojo.User">
update user set username = #{username}, password = #{password} where id = #{id}
</update>
<!-- 根據id刪除用戶 -->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
原創文章,作者:PPHVV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/331108.html
微信掃一掃
支付寶掃一掃