一、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-hk/n/331108.html