日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Guice进阶之整合mybatis和druid

發布時間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Guice进阶之整合mybatis和druid 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章中介紹了guice的基本使用配置,關于guice和spring的對比可以自行baidu或者google,我所了解的guice只是實現了依賴注入,而且相對于spring來說周邊生態還是比較弱的,所以我把guice定義為一個輕量級依賴注入框架,由于guice非常小且速度快,對于我們快速開發一些小型項目是非常適合的。

接下來隊guice+mybatis簡單整合下,實現對數據的查詢

項目結構如下:

首先pom中添加相關依賴

?

<!-- https://mvnrepository.com/artifact/com.google.inject/guice --><dependency><groupId>com.google.inject</groupId><artifactId>guice</artifactId><version>4.2.0</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-guice --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-guice</artifactId><version>3.10</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.9</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.7.RELEASE</version></dependency>

?

配置文件(app.properties)

?

#dev #jdbc jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://10.0.2.30:3306/xxx_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=true&zeroDateTimeBehavior=convertToNull jdbc.username=test jdbc.password=test jdbc.filters=stat,wall jdbc.maxActive=20 jdbc.initialSize=5 jdbc.maxWait=60000 jdbc.minIdle=10 jdbc.timeBetweenEvictionRunsMillis=60000 jdbc.minEvictableIdleTimeMillis=300000 jdbc.validationQuery=SELECT 1 jdbc.testWhileIdle=true jdbc.testOnBorrow=false jdbc.testOnReturn=false jdbc.maxOpenPreparedStatements=20 jdbc.removeAbandoned=true jdbc.removeAbandonedTimeout=1800 jdbc.logAbandoned=true#web redis redis.database=0 #redis host & port redis.host=10.0.2.13 redis.port=6379 redis.password= #連接池最大連接數(使用負值表示沒有限制) redis.pool.max.active=1000 # 連接池中的最大空閑連接 redis.pool.max.idle=100 #連接池最大阻塞等待時間(使用負值表示沒有限制) redis.pool.max.wait=-1 # 連接池中的最小空閑連接 redis.pool.min.idle=0 # 連接超時時間(毫秒) redis.timeout=0mybatis.environment.id = scheduled-task

新建自定義數據源provider(當然可以使用guice已注冊好的數據源)我這里使用的自定義的alibaba的druid數據源

?

package com.yingda.xsignal.scheduled.provider;import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.name.Named;import com.alibaba.druid.pool.DruidDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.sql.SQLException; import java.util.Properties;import javax.sql.DataSource;/*** @author xiaofeng* @version V1.0* @title: DruidDataSourceProvider* @package: com.yingda.xsignal.scheduled.provider* @description: Provides the Druid DataSource* @date 2018/6/26 16:46*/ public class DruidDataSourceProvider implements Provider<DataSource> {Logger logger = LoggerFactory.getLogger(getClass());DruidDataSource dataSource = new DruidDataSource();@Injectpublic void setDriverClassName(@Named("jdbc.driverClassName") final String driverClassName) {dataSource.setDriverClassName(driverClassName);}@Injectpublic void setUrl(@Named("jdbc.url") final String url) {dataSource.setUrl(url);}@Injectpublic void setUsername(@Named("jdbc.username") final String username) {dataSource.setUsername(username);}@Injectpublic void setPassword(@Named("jdbc.password") final String password) {dataSource.setPassword(password);}@Inject(optional = true)public void setDefaultAutoCommit(@Named("jdbc.autoCommit") final boolean defaultAutoCommit) {dataSource.setDefaultAutoCommit(defaultAutoCommit);}@Inject(optional = true)public void setDefaultReadOnly(@Named("jdbc.readOnly") final boolean defaultReadOnly) {dataSource.setDefaultReadOnly(defaultReadOnly);}@Inject(optional = true)public void setDefaultTransactionIsolation(@Named("jdbc.transactionIsolation") final int defaultTransactionIsolation) {dataSource.setDefaultTransactionIsolation(defaultTransactionIsolation);}@Inject(optional = true)public void setDefaultCatalog(@Named("jdbc.catalog") final String defaultCatalog) {dataSource.setDefaultCatalog(defaultCatalog);}@Inject(optional = true)public void setMaxActive(@Named("jdbc.maxActive") final int maxActive) {dataSource.setMaxActive(maxActive);}@Inject(optional = true)public void setMinIdle(@Named("jdbc.minIdle") final int minIdle) {dataSource.setMinIdle(minIdle);}@Inject(optional = true)public void setInitialSize(@Named("jdbc.initialSize") final int initialSize) {dataSource.setInitialSize(initialSize);}@Inject(optional = true)public void setMaxWait(@Named("jdbc.maxWait") final long maxWait) {dataSource.setMaxWait(maxWait);}@Inject(optional = true)public void setTestOnBorrow(@Named("jdbc.testOnBorrow") final boolean testOnBorrow) {dataSource.setTestOnBorrow(testOnBorrow);}@Inject(optional = true)public void setTestOnReturn(@Named("jdbc.testOnReturn") final boolean testOnReturn) {dataSource.setTestOnReturn(testOnReturn);}@Inject(optional = true)public void setTimeBetweenEvictionRunsMillis(@Named("jdbc.timeBetweenEvictionRunsMillis") final long timeBetweenEvictionRunsMillis) {dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);}@Inject(optional = true)public void setMinEvictableIdleTimeMillis(@Named("jdbc.minEvictableIdleTimeMillis") final long minEvictableIdleTimeMillis) {dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);}@Inject(optional = true)public void setTestWhileIdle(@Named("jdbc.testWhileIdle") final boolean testWhileIdle) {dataSource.setTestWhileIdle(testWhileIdle);}@Inject(optional = true)public void setValidationQuery(@Named("jdbc.validationQuery") final String validationQuery) {dataSource.setValidationQuery(validationQuery);}@Inject(optional = true)public void setValidationQueryTimeout(@Named("jdbc.validationQueryTimeout") final int validationQueryTimeout) {dataSource.setValidationQueryTimeout(validationQueryTimeout);}@Inject(optional = true)public void setAccessToUnderlyingConnectionAllowed(@Named("jdbc.accessToUnderlyingConnectionAllowed") final boolean accessToUnderlyingConnectionAllowed) {dataSource.setAccessToUnderlyingConnectionAllowed(accessToUnderlyingConnectionAllowed);}@Inject(optional = true)public void setRemoveAbandoned(@Named("jdbc.removeAbandoned") final boolean removeAbandoned) {dataSource.setRemoveAbandoned(removeAbandoned);}@Inject(optional = true)public void setRemoveAbandonedTimeout(@Named("jdbc.removeAbandonedTimeout") final int removeAbandonedTimeout) {dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);}@Inject(optional = true)public void setLogAbandoned(@Named("jdbc.logAbandoned") final boolean logAbandoned) {dataSource.setLogAbandoned(logAbandoned);}@Inject(optional = true)public void setPoolPreparedStatements(@Named("jdbc.poolPreparedStatements") final boolean poolPreparedStatements) {dataSource.setPoolPreparedStatements(poolPreparedStatements);}@Inject(optional = true)public void setMaxOpenPreparedStatements(@Named("jdbc.maxOpenPreparedStatements") final int maxOpenPreparedStatements) {dataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);}@Inject(optional = true)public void setConnectProperties(@Named("jdbc.connectProperties") final Properties connectionProperties) {dataSource.setConnectProperties(connectionProperties);}@Inject(optional = true)public void setConnectionProperties(@Named("jdbc.connectionProperties") final String connectionProperties) {dataSource.setConnectionProperties(connectionProperties);}@Inject(optional = true)public void setFilters(@Named("jdbc.filters") final String filters) throws SQLException {dataSource.setFilters(filters);}@Inject(optional = true)public void setExceptionSorter(@Named("jdbc.exceptionSorter") final String exceptionSorter) throws SQLException {dataSource.setExceptionSorter(exceptionSorter);}@Inject(optional = true)public void setExceptionSorterClassName(@Named("jdbc.exceptionSorterClassName") final String exceptionSorterClassName)throws Exception {dataSource.setExceptionSorterClassName(exceptionSorterClassName);}@Overridepublic String toString() {return "DruidDataSourceProvider{" +"jdbc.url=" + dataSource.getUrl() +",username='" + dataSource.getUsername() +'}';}@Overridepublic DataSource get() {logger.info("dataSource config ---> " + toString());return dataSource;}}

新建module用于依賴綁定

package com.yingda.xsignal.scheduled.module;import com.google.inject.AbstractModule; import com.google.inject.Scopes; import com.google.inject.name.Names; import com.yingda.xsignal.scheduled.dao.ExtraScoreInfoMapper; import com.yingda.xsignal.scheduled.provider.DruidDataSourceProvider; import com.yingda.xsignal.scheduled.provider.MasterRedisClientProvider; import com.yingda.xsignal.scheduled.provider.RedisExtendClientProvider; import com.yingda.xsignal.scheduled.redis.MasterRedisExtendClient; import com.yingda.xsignal.scheduled.service.DbQueryService; import com.yingda.xsignal.scheduled.service.DispathResourceService; import com.yingda.xsignal.scheduled.service.impl.DbQueryServiceImpl; import com.yingda.xsignal.scheduled.service.impl.DispathResourceServiceImpl; import com.yingda.xsignal.scheduled.util.PropertyUtil; import com.yingda.xsignal2.util.redis.RedisExtendClient; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import org.mybatis.guice.MyBatisModule;/*** @author xiaofeng* @version V1.0* @title: MybatisModule* @package: com.yingda.xsignal.scheduled.module* @description: TODO* @date 2018/6/26 18:24*/ public class ScheduledModule extends AbstractModule {private String file = "config/app.properties";@Overrideprotected void configure() {Names.bindProperties(binder(), PropertyUtil.loadFile(file, getClass()));bind(DbQueryService.class).to(DbQueryServiceImpl.class);this.install(new MyBatisModule() {@Overrideprotected void initialize() {//綁定我們自定義的數據源provider,也可以使用guice已經編寫好的bindDataSourceProviderType(DruidDataSourceProvider.class);bindTransactionFactoryType(JdbcTransactionFactory.class);//添加我們的mapper接口,可以按類注入(即通過類名注入),也可以指定整個包的路徑 // addMapperClass(ExtraScoreInfoMapper.class);addMapperClasses("com.yingda.xsignal.scheduled.dao");}});} }

新建mapper(dao),用于查詢數據庫表

package com.yingda.xsignal.scheduled.dao;import com.yingda.xsignal.scheduled.model.ScoreInfo; import org.apache.ibatis.annotations.Select;import java.util.List; import java.util.Map; /*** @author xiaofeng* @version V1.0* @title: ExtraScoreInfoMapper* @package: com.yingda.xsignal.scheduled.dao* @description: 用戶積分mapper* @date 2018/6/27 15:59*/ public interface ExtraScoreInfoMapper {/*** 根據更新時間查詢積分信息** @param params* @return*/@Select("<script> " +"SELECT id, user_id, company_id, current_point, recharge_point, present_point, profit_point, " +" invite_point, share_point, blocking_point, recharge_deposit, present_deposit, profit_deposit, " +" invite_deposit, share_deposit, update_time, create_time, create_by, update_by, remark " +"FROM tb_score_info " +"WHERE 1=1 " +"<if test='date!=null'> " +"AND UNIX_TIMESTAMP(update_time) &gt; UNIX_TIMESTAMP(#{date}) " +"</if> " +"</script>")List<ScoreInfo> selectListByUpdateTime(Map<String, Object> params);}

service實現

package com.yingda.xsignal.scheduled.service.impl;import com.google.inject.Inject; import com.yingda.xsignal.scheduled.dao.ExtraScoreInfoMapper; import com.yingda.xsignal.scheduled.model.ScoreInfo; import com.yingda.xsignal.scheduled.service.DbQueryService;import java.util.List; /*** @author xiaofeng* @version V1.0* @title: DbQueryServiceImpl* @package: com.yingda.xsignal.scheduled.service.impl* @description: TODO* @date 2018/6/28 11:16*/ public class DbQueryServiceImpl implements DbQueryService {@InjectExtraScoreInfoMapper extraScoreInfoMapper;@Overridepublic List<ScoreInfo> queryList() {return extraScoreInfoMapper.selectListByUpdateTime(null);} }

主函數入口

package com.yingda.xsignal.scheduled;import com.google.inject.Guice; import com.google.inject.Injector; import com.yingda.xsignal.scheduled.model.ScoreInfo; import com.yingda.xsignal.scheduled.module.ScheduledModule; import com.yingda.xsignal.scheduled.service.DbQueryService; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.util.List;/*** @author xiaofeng* @version V1.0* @title: TaskWorkerApplication* @package: com.yingda.xsignal.task* @description: scheduled task* @date 2018/6/26 14:54*/ public class TaskWorkerApplication {private Logger logger = LoggerFactory.getLogger(getClass());private Injector injector;private DbQueryService queryService;private TaskWorkerApplication() {logger.info("init something......");injector = Guice.createInjector(new ScheduledModule());queryService = injector.getInstance(DbQueryService.class);}private void run() {logger.info("doing something......");queryService.queryList()}public static void main(String[] args) {TaskWorkerApplication taskWorkerApplication = new TaskWorkerApplication();try {taskWorkerApplication.run();} catch (Exception e) {e.printStackTrace();}} }

右鍵運行即可!至此,我們已成整合了guice + mybatis 包括redis,已滿足項目的基本開發!

總結

以上是生活随笔為你收集整理的Guice进阶之整合mybatis和druid的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。