ssionTemplate是個線程安全的類,每運行一個SqlSessionTemplate時,它就會重新獲取一個新的SqlSession,所以每個方法都有一個獨立的SqlSession,這意味着它是線稱安全的。
第一步:創建spring-mybatis.xml文件並配置數據源
這里使用DBCP數據庫連接池的方式:
<!-- 第一步:配置數據源--使用數據庫連接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.postgresql.Driver" /> <property name="url" value="jdbc:postgresql://localhost:5433/postgres" /> <property name="username" value="postgres" /> <property name="password" value="postgres" /> <!-- 最大數據庫連接數 --> <property name="maxActive" value="100" /> <!-- 最大空閑數,即等待連接數 --> <property name="maxIdle" value="5" /> <!-- 最大等待連接時間 --> <property name="maxWait" value="10000" /> </bean>
第二步:配置SqlSessionFactory
<!--第二步:配置SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 配置數據源 --> <property name="dataSource" ref="dataSource" /> <!-- 配置mybatis --> <property name="configLocation" value="mybatis-config2.xml" /> </bean>
mybatis-config2.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"> <!-- mybatis的基本配置文件:主要配置基本的上下文參數和運行環境 --> <configuration> <!--設置 --> <settings> <!--緩存配置的全局開關:如果這里設置成false,那么即便在映射器中配置開啟也無濟於事 --> <setting name="cacheEnabled" value="true" /> <!--延時加載的全局開關 --> <setting name="lazyLoadingEnabled" value="false" /> <!-- 是否允許單一語句返回多結果集 --> <setting name="multipleResultSetsEnabled" value="false" /> <!-- 使用列標簽代替列名,需要兼容驅動 --> <setting name="useColumnLabel" value="true" /> <!-- 允許JDBC自動生成主鍵,需要驅動兼容。如果設置為true,則這個設置強制使用自動生成主鍵,盡管一些驅動不能兼容但仍能正常工作 --> <setting name="useGeneratedKeys" value="false" /> <!-- 指定MyBatis該如何自動映射列到字段或屬性:NONE表示取消自動映射;PARTIAL表示只會自動映射,沒有定義嵌套結果集和映射結果集;FULL會自動映射任意復雜的結果集,無論是否嵌套 --> <setting name="autoMappingBehavior" value="PARTIAL" /> <!-- 配置默認的執行器:SIMPLE是普通的執行器;REUSE會重用預處理語句;BATCH會重用語句並執行批量更新 --> <setting name="defaultExecutorType" value="SIMPLE" /> <!--設置超時時間:它決定驅動等待數據庫響應的秒數,任何正整數 --> <!-- <setting name="defaultStatementTimeout" value="25"/> --> <!--設置數據庫驅動程序默認返回的條數限制,此參數可以重新設置,任何正整數 --> <!-- <setting name="defaultFetchSize" value="100" /> --> <!-- 允許在嵌套語句中使用分頁(RowBounds) --> <setting name="safeRowBoundsEnabled" value="false" /> <!-- 是否開啟自動駝峰命名規則,即從a_example到aExample的映射 --> <setting name="mapUnderscoreToCamelCase" value="true" /> <!-- 本地緩存機制,防止循環引用和加速重復嵌套循環 --> <setting name="localCacheScope" value="SESSION" /> <!-- 當沒有為參數提供特定JDBC類型時,為空值指定JDBC類型。某些驅動需要指定列的JDBC類型,多數情況直接用一般類型即可,如NULL/VARCHAR/OTHER --> <setting name="jdbcTypeForNull" value="OTHER" /> <!-- 指定觸發延遲加載的方法,如equals/clone/hashCode/toString --> <setting name="lazyLoadTriggerMethods" value="equals" /> </settings> <!--類型命名 --> <!--別名:pojo對象的別名 --> <typeAliases> <!-- 對包進行掃描,可以批量進行別名設置,設置規則是:獲取類名稱,將其第一個字母變為小寫 --> <package name="com.hyc.pojo" /> <package name="com.hyc.objectfactory" /> <package name="com.hyc.bean" /> <package name="com.hyc.dao" /> </typeAliases> <!--插件 --> <!-- <plugins /> --> <!-- 映射器 --> <mappers> <mapper resource="com/hyc/mapper/ProductMapper.xml" /> </mappers> </configuration>
因為里面配置了映射器,所以下一步需要創建映射器。在創建映射器之前,還要配置SqlSessionTemplate,其配置如下:
<!-- 配置一個可以批量執行的sqlSession--> <!--配置sqlSessionTemplate:通過帶參數的構造方法創建對象 --> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <!-- 以sqlSessionFactory為參數傳入構造函數中 --> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" /> <!-- mybatis執行器,取值范圍是SIMPLE/REUSE/BATCH三種類型 --> <constructor-arg name="executorType" value="BATCH" /> </bean>
詳細配置看注釋。注意⚠️:數據源、sqlSessionFactory、sqlSessionTemplate都是配置在spring配置文件spring-mybatis.xml中。
第三步:創建mapper
1.創建接口:ProductMapper.java
public interface ProductMapper { int insertProduct(Product product); int deleteByPrimaryKey(String id); int updateByPrimaryKey(Product product); List<Product> selectProducts(String name); }
2.創建mapper:ProductMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hyc.dao.ProductMapper"> <resultMap id="BaseResultMap" type="com.hyc.pojo.Product"> <id column="id" jdbcType="VARCHAR" property="id" /> <result column="product_name" jdbcType="VARCHAR" property="productName" /> <result column="product_price" jdbcType="VARCHAR" property="productPrice" /> <result column="product_type" jdbcType="VARCHAR" property="productType" /> </resultMap> <sql id="Base_Column_List"> id, product_name, product_price, product_type </sql> <!-- 查詢所有產品 --> <select id="selectProducts" resultMap="BaseResultMap" parameterType="String"> select * from product where product_name like concat('%',#{name},'%') </select> <!-- 插入產品 --> <insert id="insertProduct" parameterType="com.hyc.pojo.Product"> insert into product (id, product_name, product_price, product_type) values (#{id,jdbcType=VARCHAR}, #{productName,jdbcType=VARCHAR}, #{productPrice,jdbcType=VARCHAR}, #{productType,jdbcType=VARCHAR}) </insert> <!-- 根據ID刪除產品 --> <delete id="deleteByPrimaryKey" parameterType="java.lang.String"> delete from product where id = #{id,jdbcType=VARCHAR} </delete> <!--修改產品 --> <update id="updateByPrimaryKey" parameterType="com.hyc.pojo.Product"> update product set product_name = #{productName,jdbcType=VARCHAR}, product_price = #{productPrice,jdbcType=VARCHAR}, product_type = #{productType,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} </update> </mapper>
在mapper中實現數據庫的增刪改查操作
第四步:
==============================================================
創建單元測試(方法一):通過傳統的方式ApplicationContext獲得javaBean.
1.先創建一個基類初始化SqlSessionTemplate
public class BaseTest { public SqlSessionTemplate template = null; ClassPathXmlApplicationContext context = null; @Before public void before() { context = new ClassPathXmlApplicationContext("classpath:spring-mybatis.xml"); template = context.getBean(SqlSessionTemplate.class); } }
2.創建測試類
public class TestSqlSessionTemplate extends BaseTest { @Test public void testInsert() { Product product = (Product) super.context.getBean("product"); String sql = "com.hyc.dao.ProductMapper.insertProduct"; int add = super.template.insert(sql, product); System.out.println(add > 0 ? "插入成功" : "插入失敗"); } @Test public void testDelete() { String sql = "com.hyc.dao.ProductMapper.deleteByPrimaryKey"; int del = super.template.delete(sql, "2"); System.out.println(del > 0 ? "刪除成功" : "刪除失敗"); } @Test public void testUpdate() { String sql = "com.hyc.dao.ProductMapper.updateByPrimaryKey"; Product product = (Product) super.context.getBean("product"); product.setProductName("test"); product.setProductPrice("4000"); product.setProductType("test"); int update = super.template.update(sql, product); System.out.println(update > 0 ? "修改成功" : "修改失敗"); } @Test public void testSelect() { String sql = "com.hyc.dao.ProductMapper.selectProducts"; List<Product> produts = super.template.selectList(sql, "襯"); System.out.println(produts.size()); } }
=======================================================================
創建單元測試(方法二):通過spring-test包的注解方式(推薦如下)獲得javaBean.
package com.hyc.test; import org.junit.runner.RunWith; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.hyc.mapper.ProductMapper; /** * * 在通過spring獲取bean實例時,可通過傳統的方式ApplicationContext,也可以通過spring-test包的注解方式(推薦如下) * 1.導入spring-test包 * 2.@ContextConfiguration指定Spring的配置文件,即可使用Spring. * 3.@Autowired就可以拿到相關Bean */ @RunWith(SpringJUnit4ClassRunner.class) //表示繼承了SpringJUnit4ClassRunner類 (spring提供的單元測試類) @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) public class TestSqlSessionTemplate { @Autowired private SqlSessionTemplate template; public void testInsert() { //...測試方法 ProductMapper product = template.getMapper(ProductMapper.class); //產品的增加方法.... } }
......
轉 : https://www.cnblogs.com/hellowhy/p/9728862.html