亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

spring 整合 mybatis 中數據源的幾種配置方式(總結篇)

2024-07-14 08:40:38
字體:
來源:轉載
供稿:網友

因為spring 整合mybatis的過程中, 有好幾種整合方式,尤其是數據源那塊,經??吹讲灰粯拥呐渲梅绞?,總感覺有點亂,所以今天有空總結下。

  一、采用org.mybatis.spring.mapper.MapperScannerConfigurer

  其實逆向工程也是這種方式

  1、數據源配配置文件

 2、DAO文件

 package com.jdd.mapper; import com.jdd.pojo.Employee; import java.util.List; public interface EmployeeMapper {   public Employee getEmployeeById(int id);   public List<Employee> findAllEmployees(); }

  3、Mapper.xml 文件

   <?xml version="." encoding="UTF-" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper .//EN" "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace="com.jdd.mapper.EmployeeMapper">   <select id="getEmployeeById" parameterType="int" resultType="com.jdd.pojo.Employee">     <![CDATA[       select * from employee where id = #{id};     ]]>   </select>   <select id="findAllEmployees" resultType="com.jdd.pojo.Employee">     <![CDATA[       select * from employee where status='';     ]]>   </select> </mapper>

   這樣在service類里就可以直接注入dao接口了

 package com.jdd.service.impl; import com.jdd.mapper.EmployeeMapper; import com.jdd.pojo.Employee; import com.jdd.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service("employeeService") public class EmployeeServiceImpl implements EmployeeService{   @Autowired   private EmployeeMapper employeeMapper;   @Override   public Employee getEmployeeById(int id) {     return employeeMapper.getEmployeeById(id);   }   @Override   public List<Employee> findAllEmployees() {     return employeeMapper.findAllEmployees();   } }

    二、 采用抽象類org.mybatis.spring.support.SqlSessionDaoSupport, 給它注入 sqlSessionFactory的方式

  1、數據源配置文件

   <?xml version="." encoding="UTF-"?> <beans xmlns="http://www.springframework.org/schema/beans"   xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"   xmlns:xsi="http://www.w.org//XMLSchema-instance"   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-..xsd   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-..xsd   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-..xsd">   <!-- 加載配置文件 -->   <context:property-placeholder location="classpath:resource/*.properties" />   <!-- 數據庫連接池 -->   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"     destroy-method="close">     <property name="driverClassName" value="${jdbc.driver}" />     <property name="url" value="${jdbc.url}" />     <property name="username" value="${jdbc.username}" />     <property name="password" value="${jdbc.password}" />     <property name="maxActive" value="" />     <property name="minIdle" value="" />   </bean>   <!-- sqlsessionFactory -->   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">     <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>     <property name="dataSource" ref="dataSource"></property>     <property name="mapperLocations" value="classpath:com/jdd/mapper/*.xml"></property>   </bean> </beans>

   2、baseDao類

 package com.jdd.dao; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.support.SqlSessionDaoSupport; import javax.annotation.Resource; public abstract class BaseDao extends SqlSessionDaoSupport {   @Resource   public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {     super.setSqlSessionFactory(sqlSessionFactory);   } }

   3、接口 EmployeeDao.java 類

 package com.jdd.dao; import com.jdd.pojo.Employee; import java.util.List; public interface EmployeeDao {   Employee getEmployeeById(int id);   List<Employee> findAllEmployees(); }

  4、dao實現類 EmployeeDaoImpl

 package com.jdd.dao.impl; import com.jdd.dao.BaseDao; import com.jdd.dao.EmployeeDao; import com.jdd.pojo.Employee; import org.springframework.stereotype.Repository; import java.util.List; @Repository("employeeDao") public class EmployeeDaoImpl extends BaseDao implements EmployeeDao {   @Override   public Employee getEmployeeById(int id) {     return this.getSqlSession().selectOne("com.jdd.dao.EmployeeDao.getEmployeeById", id);   }   @Override   public List<Employee> findAllEmployees() {     return this.getSqlSession().selectList("com.jdd.dao.EmployeeDao.findAllEmployees");   } }

  5、這樣就可以在service類里注入 employeeDao了

  三、采用 org.mybatis.spring.SqlSessionTemplate 模板類

  1、數據源文件

 <?xml version="." encoding="UTF-"?> <beans xmlns="http://www.springframework.org/schema/beans"   xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"   xmlns:xsi="http://www.w.org//XMLSchema-instance"   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-..xsd   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-..xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-..xsd   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-..xsd">   <!-- 加載配置文件 -->   <context:property-placeholder location="classpath:resource/*.properties" />   <!-- 數據庫連接池 -->     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"     destroy-method="close">     <property name="driverClassName" value="${jdbc.driver}" />     <property name="url" value="${jdbc.url}" />     <property name="username" value="${jdbc.username}" />     <property name="password" value="${jdbc.password}" />     <property name="maxActive" value="" />     <property name="minIdle" value="" />   </bean>   <!-- sqlsessionFactory -->   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">     <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>     <property name="dataSource" ref="dataSource"></property>     <property name="mapperLocations" value="classpath:com/jdd/mapper/*.xml"></property>   </bean>   <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">     <constructor-arg index="" ref="sqlSessionFactory"/>   </bean> </beans>

  2、 basedao.java 類

 package com.jdd.dao; import org.mybatis.spring.SqlSessionTemplate; import javax.annotation.Resource; public abstract class BaseDao {   public SqlSessionTemplate sqlSessionTemplate;   @Resource   public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {     this.sqlSessionTemplate = sqlSessionTemplate;   } }

  3、接口 EmployeeDao.java 類  

package com.jdd.dao; import com.jdd.pojo.Employee; import java.util.List; public interface EmployeeDao {   Employee getEmployeeById(int id);   List<Employee> findAllEmployees(); }

  4、dao實現類 EmployeeDaoImpl

 package com.jdd.dao.impl; import com.jdd.dao.BaseDao; import com.jdd.dao.EmployeeDao; import com.jdd.pojo.Employee; import org.springframework.stereotype.Repository; import java.util.List; @Repository("employeeDao") public class EmployeeDaoImpl extends BaseDao implements EmployeeDao {   @Override   public Employee getEmployeeById(int id) {     return sqlSessionTemplate.selectOne("com.jdd.dao.EmployeeDao.getEmployeeById", id);   }   @Override   public List<Employee> findAllEmployees() {     return sqlSessionTemplate.selectList("com.jdd.dao.EmployeeDao.findAllEmployees");   } }

  5、同樣現在也可以在service類里直接注入 employeeDao使用了。

  注:這里basedao的注入比較靈活,也可以注入 SqlSessionFactory, 然后再setter方法里創建 SqlSessionTemplate,如下:

 package com.jdd.dao; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import javax.annotation.Resource; public abstract class BaseDao {   public SqlSessionTemplate sqlSessionTemplate;   @Resource   public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {     sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);   } }

  其實不管是采用 繼承SqlSessionDaoSupport類, 注入 sqlSessionFactory的方式, 還是直接注入 SqlSessionTemplate 的方式, 本質上是一樣的。

  如果你采用 注入 sqlSessionFactory的方式, 它在底層也是通過sqlSessionFactory 來創建 SqlSessionTemplate ,然后通過其api來操作。

  不信給你們看下 SqlSessionDaoSupport 的源碼:

 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package org.mybatis.spring.support; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.dao.support.DaoSupport; import org.springframework.util.Assert; public abstract class SqlSessionDaoSupport extends DaoSupport {   private SqlSession sqlSession;   private boolean externalSqlSession;   public SqlSessionDaoSupport() {   }   public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {     if (!this.externalSqlSession) {       this.sqlSession = new SqlSessionTemplate(sqlSessionFactory);     }   }   public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {     this.sqlSession = sqlSessionTemplate;     this.externalSqlSession = true;   }   public SqlSession getSqlSession() {     return this.sqlSession;   }   protected void checkDaoConfig() {     Assert.notNull(this.sqlSession, "Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required");   } }

   同樣 SqlSessionTemplate 繼承了 SqlSession 接口, 因此不管操作哪個效果都一樣

 //  // Source code recreated from a .class file by IntelliJ IDEA  // (powered by Fernflower decompiler)  //  package org.mybatis.spring;  import java.lang.reflect.InvocationHandler;  import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.util.List; import java.util.Map; import org.apache.ibatis.exceptions.PersistenceException; import org.apache.ibatis.executor.BatchResult; import org.apache.ibatis.reflection.ExceptionUtil; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.util.Assert; public class SqlSessionTemplate implements SqlSession {   private final SqlSessionFactory sqlSessionFactory;   private final ExecutorType executorType;   private final SqlSession sqlSessionProxy;   private final PersistenceExceptionTranslator exceptionTranslator;   public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {     this(sqlSessionFactory, sqlSessionFactory.getConfiguration().getDefaultExecutorType());   }   public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType) {     this(sqlSessionFactory, executorType, new MyBatisExceptionTranslator(sqlSessionFactory.getConfiguration().getEnvironment().getDataSource(), true));   }   public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType, PersistenceExceptionTranslator exceptionTranslator) {     Assert.notNull(sqlSessionFactory, "Property 'sqlSessionFactory' is required");     Assert.notNull(executorType, "Property 'executorType' is required");     this.sqlSessionFactory = sqlSessionFactory;     this.executorType = executorType;     this.exceptionTranslator = exceptionTranslator;     this.sqlSessionProxy = (SqlSession)Proxy.newProxyInstance(SqlSessionFactory.class.getClassLoader(), new Class[]{SqlSession.class}, new SqlSessionTemplate.SqlSessionInterceptor());   }   public SqlSessionFactory getSqlSessionFactory() {     return this.sqlSessionFactory;   }   public ExecutorType getExecutorType() {     return this.executorType;   }   public PersistenceExceptionTranslator getPersistenceExceptionTranslator() {     return this.exceptionTranslator;   }   public <T> T selectOne(String statement) {     return this.sqlSessionProxy.selectOne(statement);   }   public <T> T selectOne(String statement, Object parameter) {     return this.sqlSessionProxy.selectOne(statement, parameter);   }   public <K, V> Map<K, V> selectMap(String statement, String mapKey) {     return this.sqlSessionProxy.selectMap(statement, mapKey);   }   public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey) {     return this.sqlSessionProxy.selectMap(statement, parameter, mapKey);   }   public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds) {     return this.sqlSessionProxy.selectMap(statement, parameter, mapKey, rowBounds);   }   public <E> List<E> selectList(String statement) {     return this.sqlSessionProxy.selectList(statement);   }   public <E> List<E> selectList(String statement, Object parameter) {     return this.sqlSessionProxy.selectList(statement, parameter);   }   public <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) {     return this.sqlSessionProxy.selectList(statement, parameter, rowBounds);   }   public void select(String statement, ResultHandler handler) {     this.sqlSessionProxy.select(statement, handler);   }   public void select(String statement, Object parameter, ResultHandler handler) {     this.sqlSessionProxy.select(statement, parameter, handler);   }   public void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler) {     this.sqlSessionProxy.select(statement, parameter, rowBounds, handler);   }   public int insert(String statement) {     return this.sqlSessionProxy.insert(statement);   }   public int insert(String statement, Object parameter) {     return this.sqlSessionProxy.insert(statement, parameter);   }   public int update(String statement) {     return this.sqlSessionProxy.update(statement);   }   public int update(String statement, Object parameter) {     return this.sqlSessionProxy.update(statement, parameter);   }   public int delete(String statement) {     return this.sqlSessionProxy.delete(statement);   }   public int delete(String statement, Object parameter) {     return this.sqlSessionProxy.delete(statement, parameter);   }   public <T> T getMapper(Class<T> type) {     return this.getConfiguration().getMapper(type, this);   }   public void commit() {     throw new UnsupportedOperationException("Manual commit is not allowed over a Spring managed SqlSession");   }   public void commit(boolean force) {     throw new UnsupportedOperationException("Manual commit is not allowed over a Spring managed SqlSession");   }   public void rollback() {     throw new UnsupportedOperationException("Manual rollback is not allowed over a Spring managed SqlSession");   }   public void rollback(boolean force) {     throw new UnsupportedOperationException("Manual rollback is not allowed over a Spring managed SqlSession");   }   public void close() {     throw new UnsupportedOperationException("Manual close is not allowed over a Spring managed SqlSession");   }   public void clearCache() {     this.sqlSessionProxy.clearCache();   }   public Configuration getConfiguration() {     return this.sqlSessionFactory.getConfiguration();   }   public Connection getConnection() {     return this.sqlSessionProxy.getConnection();   }   public List<BatchResult> flushStatements() {     return this.sqlSessionProxy.flushStatements();   }   private class SqlSessionInterceptor implements InvocationHandler {     private SqlSessionInterceptor() {     }     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {       SqlSession sqlSession = SqlSessionUtils.getSqlSession(SqlSessionTemplate.this.sqlSessionFactory, SqlSessionTemplate.this.executorType, SqlSessionTemplate.this.exceptionTranslator);       Object unwrapped;       try {         Object result = method.invoke(sqlSession, args);         if (!SqlSessionUtils.isSqlSessionTransactional(sqlSession, SqlSessionTemplate.this.sqlSessionFactory)) {           sqlSession.commit(true);         }         unwrapped = result;       } catch (Throwable var) {         unwrapped = ExceptionUtil.unwrapThrowable(var);         if (SqlSessionTemplate.this.exceptionTranslator != null && unwrapped instanceof PersistenceException) {           SqlSessionUtils.closeSqlSession(sqlSession, SqlSessionTemplate.this.sqlSessionFactory);           sqlSession = null;           Throwable translated = SqlSessionTemplate.this.exceptionTranslator.translateExceptionIfPossible((PersistenceException)unwrapped);           if (translated != null) {             unwrapped = translated;           }         }         throw (Throwable)unwrapped;       } finally {         if (sqlSession != null) {           SqlSessionUtils.closeSqlSession(sqlSession, SqlSessionTemplate.this.sqlSessionFactory);         }       }       return unwrapped;     }   } }

總結

以上所述是小編給大家介紹的spring 整合 mybatis 中數據源的幾種配置方式,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一区在线直播| 色视频www在线播放国产成人| 九色成人免费视频| 亚洲成在人线av| 亚洲视频国产视频| 精品亚洲一区二区三区四区五区| 国产精品成人久久久久| 亚洲香蕉成视频在线观看| 日韩网站免费观看高清| 国产免费观看久久黄| 日韩经典第一页| 欧美性20hd另类| 亚洲人高潮女人毛茸茸| 亚洲国产天堂久久国产91| 亚洲国产精久久久久久| 亚洲va欧美va国产综合剧情| 色婷婷av一区二区三区在线观看| 日韩高清电影免费观看完整版| 国产精品专区第二| 精品女厕一区二区三区| 国产精品久久久久久久久免费看| 精品久久久一区二区| 久久精品国产清自在天天线| 亚洲激情视频在线播放| 黄色成人在线免费| 欧美国产中文字幕| 欧美精品在线第一页| 一区二区三区www| 亚洲欧美日韩中文在线制服| 日韩禁在线播放| 久久全国免费视频| 国产精品99久久久久久白浆小说| 欧美成人精品三级在线观看| 欧美自拍大量在线观看| 久久久久久久久久婷婷| 国产精品福利网| 日韩精品中文字幕在线播放| 尤物yw午夜国产精品视频明星| 日韩在线精品视频| 国产精品福利网站| 久久久久久免费精品| 国产精品偷伦免费视频观看的| 欧美高清在线观看| 日韩精品在线私人| 26uuu另类亚洲欧美日本老年| 成人在线视频福利| 国产精品视频区1| 日韩精品免费在线| 欧美电影电视剧在线观看| 亚洲天堂日韩电影| 欧美大学生性色视频| 久久精品男人天堂| 4388成人网| 亚洲网址你懂得| 97视频免费看| 欧美xxxx18国产| 国产精品第三页| 欧美视频在线观看免费| 九九综合九九综合| 色噜噜久久综合伊人一本| 日韩视频免费观看| 亚洲色图综合网| 97超碰蝌蚪网人人做人人爽| 国产伦精品免费视频| 亚洲成人精品av| 中文字幕日韩视频| 国产成人精品久久亚洲高清不卡| 91精品视频大全| 中文字幕久精品免费视频| 中文字幕欧美日韩va免费视频| 91在线观看免费高清完整版在线观看| 亚洲视频在线免费看| 97国产精品免费视频| 国产手机视频精品| 91久久久久久久| 欧美激情伊人电影| 欧美在线激情视频| 色七七影院综合| 久久久精品2019中文字幕神马| 成人夜晚看av| 国产精品久久久久久久久久东京| www.国产精品一二区| 97香蕉久久夜色精品国产| 中日韩美女免费视频网站在线观看| 精品久久久久久国产| 久久97久久97精品免视看| 成人免费网站在线观看| www.国产精品一二区| 一本色道久久88综合日韩精品| 日韩欧美中文免费| 中文字幕亚洲色图| 国产成人欧美在线观看| 久久久精品日本| 欧美成人亚洲成人日韩成人| 狠狠色香婷婷久久亚洲精品| 国产精品网站视频| 亚洲激情视频网| 国产精品视频xxxx| 日韩av在线影院| 欧美超级免费视 在线| 91久久国产精品91久久性色| 最新69国产成人精品视频免费| 亚洲欧美日韩直播| 91地址最新发布| 亚洲综合国产精品| 亚洲欧美日韩久久久久久| 国产精品精品视频一区二区三区| 成人h视频在线观看播放| 成人免费观看a| 高清欧美性猛交xxxx| 8090理伦午夜在线电影| 性欧美办公室18xxxxhd| 久久久999精品免费| 亚洲成人久久久久| 久久在精品线影院精品国产| 国产免费一区二区三区在线观看| 精品亚洲国产成av人片传媒| 日韩欧美亚洲综合| 国产精品美女www| 国产亚洲精品美女久久久久| 日韩在线观看免费全集电视剧网站| 国产精品久久久久久久久久小说| 97在线免费观看视频| 日韩二区三区在线| 精品国产老师黑色丝袜高跟鞋| 亚洲va欧美va国产综合久久| 欧美疯狂做受xxxx高潮| 亚洲国产精品一区二区三区| 亚洲精美色品网站| 国产精品久久久久久久电影| 国内精品久久久久影院 日本资源| 色噜噜狠狠狠综合曰曰曰88av| 国产成人精品在线观看| 久久成人精品视频| 亚洲国产精品国自产拍av秋霞| 久久天天躁狠狠躁夜夜躁| 欧美超级免费视 在线| xvideos国产精品| 国产成人鲁鲁免费视频a| 国产精品美女视频网站| 欧美肥臀大乳一区二区免费视频| 成人黄色短视频在线观看| 95av在线视频| 亚洲三级免费看| 中文字幕视频一区二区在线有码| 热草久综合在线| 国产精品视频一| 亚洲第一男人天堂| 77777少妇光屁股久久一区| 欧美日韩激情视频| 亚洲性日韩精品一区二区| 亚洲成人av中文字幕| 亚洲国产精品yw在线观看| 中文字幕av一区二区| 日本高清视频精品| 亚洲的天堂在线中文字幕| 日韩在线中文视频| 午夜精品一区二区三区在线视频| 国内揄拍国内精品少妇国语| 久久精品99久久久久久久久| 亚洲电影在线观看| 久久成人精品视频| 久久免费少妇高潮久久精品99| 欧美在线xxx|