当前位置: 首页 > news >正文

江宁区建设局网站张家港外贸型网站制作

江宁区建设局网站,张家港外贸型网站制作,潍坊公司网站模板建站,长治网站制作一般多少钱一、简介MybatisPlus中引用多数据库时#xff0c;传统的配置就失效了#xff0c;需要单独写配置来实现#xff0c;下面就说一下具体应该如何操作二、引入MybatisPlus多数据源配置还是先看一下我的项目结构#xff0c;Model是单独的模块#xff0c;请自行创建1、创建一个Ma…一、简介MybatisPlus中引用多数据库时传统的配置就失效了需要单独写配置来实现下面就说一下具体应该如何操作二、引入MybatisPlus多数据源配置还是先看一下我的项目结构Model是单独的模块请自行创建1、创建一个Maven项目修改pom.xml文件增加对spring boot、mybatis plus、druid、mysql connector的引用org.springframework.bootspring-boot-dependencies2.0.3.RELEASEpomimportorg.springframework.bootspring-boot-starter-webcom.alibabadruid-spring-boot-starter1.1.10mysqlmysql-connector-java5.1.9com.baomidoumybatis-plus-boot-starter2.32、创建resources文件夹并创建application.yml文件增加以下配置此处不需要写mybatis plus的配置了因为多数据源时这里的mybatis plus会失效具体原因还没找到#设置提供的服务名spring:application:name: javademo-tyh-service-hotel#配置数据库datasource:type: com.alibaba.druid.pool.DruidDataSourcedb1:url: jdbc:mysql://10.11.12.237:3306/db_test?useUnicodetruecharacterEncodingutf8username: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverdb2:url: jdbc:mysql://10.11.12.237:3306/tyh_test?useUnicodetruecharacterEncodingutf8username: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver#设置自己启动的端口server:port:120003、在resources文件夹下创建mapper文件夹在其内部创建两个数据库的两张表的mapper.xml文件分别编写一个自定义方法BaseInfoMapper.xmlselect count(*) from base_info;UserInfoMapper.xmlselect count(*) from user_info;4、打开main方法所在的类并修改为如下代码importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationMapperScan(javademo.tyh.service.hotel.mapper)//标记扫描的mapper位置public classAppServiceHotel{public static voidmain( String[] args ){SpringApplication.run(AppServiceHotel.class, args);}}5、创建config文件夹存放mybatis plus的相关配置此内部的类很多都摘自官网是按照他的方式进行实现的创建枚举DBTypeEnum/*** 多数据源枚举*/public enumDBTypeEnum {db1(db1), db2(db2);privateString value;DBTypeEnum(String value) {this.value value;}publicString getValue() {returnvalue;}}创建数据源操作类DbContextHolderpublic classDbContextHolder {private static final ThreadLocal contextHolder new ThreadLocal();/*** 设置数据源*paramdbTypeEnum*/public static voidsetDbType(DBTypeEnum dbTypeEnum) {contextHolder.set(dbTypeEnum.getValue());}/*** 取得当前数据源*return*/public staticString getDbType() {return(String) contextHolder.get();}/*** 清除上下文数据*/public static voidclearDbType() {contextHolder.remove();}}创建spring的DataSource抽象类 DynamicDataSourceimportorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/** 扩展Spring的AbstractRoutingDataSource抽象类实现动态数据源。* AbstractRoutingDataSource中的抽象方法determineCurrentLookupKey是实现数据源的route的核心* 这里对该方法进行Override。 【上下文DbContextHolder为一线程安全的ThreadLocal】*/public class DynamicDataSource extendsAbstractRoutingDataSource {/*** 取得当前使用哪个数据源*return*/OverrideprotectedObject determineCurrentLookupKey(){returnDbContextHolder.getDbType();}}创建MybatisPlusConfig配置类importcom.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;importcom.baomidou.mybatisplus.MybatisConfiguration;importcom.baomidou.mybatisplus.entity.GlobalConfiguration;importcom.baomidou.mybatisplus.mapper.LogicSqlInjector;importcom.baomidou.mybatisplus.plugins.PaginationInterceptor;importcom.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;importorg.apache.ibatis.plugin.Interceptor;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.type.JdbcType;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;importjavax.sql.DataSource;importjava.util.HashMap;importjava.util.Map;/*** MybatisPlus配置*/Configurationpublic classMybatisPlusConfig {//分页拦截器BeanpublicPaginationInterceptor paginationInterceptor() {return newPaginationInterceptor();}//定义db1Bean(name db1)ConfigurationProperties(prefix spring.datasource.db1)//与配置文件中的层次结构相同publicDataSource db1() {returnDruidDataSourceBuilder.create().build();}//定义db2Bean(name db2)ConfigurationProperties(prefix spring.datasource.db2)//与配置文件中的层次结构相同publicDataSource db2() {returnDruidDataSourceBuilder.create().build();}/*** 动态数据源配置*return*/BeanPrimarypublic DataSource multipleDataSource(Qualifier(db1) DataSource db1, Qualifier(db2) DataSource db2) {DynamicDataSource dynamicDataSource newDynamicDataSource();Map targetDataSources new HashMap();targetDataSources.put(DBTypeEnum.db1.getValue(), db1);targetDataSources.put(DBTypeEnum.db2.getValue(), db2);dynamicDataSource.setTargetDataSources(targetDataSources);dynamicDataSource.setDefaultTargetDataSource(db1);returndynamicDataSource;}Bean(sqlSessionFactory)public SqlSessionFactory sqlSessionFactory() throwsException {//***导入MybatisSqlSession配置***MybatisSqlSessionFactoryBean sqlSessionFactory newMybatisSqlSessionFactoryBean();//指明数据源sqlSessionFactory.setDataSource(multipleDataSource(db1(), db2()));//指明mapper.xml位置(配置文件中指明的xml位置会失效用此方式代替具体原因未知)sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath*:/mapper/**Mapper.xml));//指明实体扫描(多个package用逗号或者分号分隔)sqlSessionFactory.setTypeAliasesPackage(javademo.tyh.model.base;javademo.tyh.model.hotel);//***导入Mybatis配置***MybatisConfiguration configuration newMybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);sqlSessionFactory.setConfiguration(configuration);sqlSessionFactory.setPlugins(newInterceptor[]{paginationInterceptor()});//***导入全局配置***sqlSessionFactory.setGlobalConfig(globalConfiguration());returnsqlSessionFactory.getObject();}/*** 在代码中配置MybatisPlus替换掉application.yml中的配置*return*/BeanpublicGlobalConfiguration globalConfiguration() {GlobalConfiguration conf new GlobalConfiguration(newLogicSqlInjector());//主键类型 0:数据库ID自增, 1:用户输入ID,2:全局唯一ID (数字类型唯一ID), 3:全局唯一ID UUIDconf.setIdType(0);//字段策略(拼接sql时用于判断属性值是否拼接) 0:忽略判断,1:非NULL判断,2:非空判断conf.setFieldStrategy(2);//驼峰下划线转换含查询column及返回column(column下划线命名create_time返回java实体是驼峰命名createTime开启后自动转换否则保留原样)conf.setDbColumnUnderline(true);//是否动态刷新mapperconf.setRefresh(true);returnconf;}}6、创建mapper文件夹用于存放于xml对应的mapper接口BaseInfoMapperimportcom.baomidou.mybatisplus.mapper.BaseMapper;importjavademo.tyh.model.hotel.BaseInfoModel;importorg.springframework.stereotype.Component;Componentpublic interface BaseInfoMapper extends BaseMapper{//自定义方法intlistCount();}UserInfoMapperimportcom.baomidou.mybatisplus.mapper.BaseMapper;importjavademo.tyh.model.hotel.UserInfoModel;importorg.springframework.stereotype.Component;Componentpublic interface UserInfoMapper extends BaseMapper{//自定义方法intlistCount();}7、创建service文件夹用于存放业务逻辑类importjavademo.tyh.model.hotel.BaseInfoModel;importjavademo.tyh.model.hotel.UserInfoModel;importjavademo.tyh.service.hotel.config.DBTypeEnum;importjavademo.tyh.service.hotel.config.DbContextHolder;importjavademo.tyh.service.hotel.mapper.BaseInfoMapper;importjavademo.tyh.service.hotel.mapper.UserInfoMapper;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;Servicepublic classHotelService {AutowiredBaseInfoMapper baseMapper;AutowiredUserInfoMapper userMapper;public voidtestDynamicDb() {//使用db1DbContextHolder.setDbType(DBTypeEnum.db1);BaseInfoModel baseModel baseMapper.selectById(1);int baseCount baseMapper.listCount();System.out.println(db1 baseModel.getNickname());//使用db2DbContextHolder.setDbType(DBTypeEnum.db2);UserInfoModel userModel userMapper.selectById(1);int userCount userMapper.listCount();System.out.println(db2 userModel.getUsername());}}8、创建controller文件夹编写一个controller和action用于测试importjavademo.tyh.service.hotel.service.HotelService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;ControllerRequestMapping(/hotel)public classHotelController {AutowiredHotelService service;ResponseBodyRequestMapping(/test)public voidtest() {service.testDynamicDb();}}9、创建自己的实体Modelget/set方法自己生成吧BaseInfoModelimportcom.baomidou.mybatisplus.annotations.TableName;importjava.time.LocalDateTime;TableName(base_info)public classBaseInfoModel {private intid;privateString nickname;privateLocalDateTime updateTime;}UserInfoModelimportcom.baomidou.mybatisplus.annotations.TableName;importjava.time.LocalDateTime;TableName(user_info)public classUserInfoModel {private intid;privateString username;privateString password;private intsex;private intage;privateLocalDateTime createTime;}OK至此Mybatis Plus多数据源配置Demo就完成了可以运行http://localhost:12000/hotel/test看一下console控制台会得到以下输出db1和db2就切换成功了
http://www.pierceye.com/news/764842/

相关文章:

  • 网页创建网站做商城网站报价
  • 网网站建设公司网络整合营销
  • 广州本地门户网站wordpress视频格式
  • 做网站如何购买服务器自己做的网站注册用户无法收到激活邮箱的邮件
  • 商城网站系统建设中信建设有限责任公司 吴方旭
  • 辽阳市建设行业培训中心网站蒙文门户网站建设
  • 凡科建站官网入口wordpress个性首页
  • 上海信息技术做网站不连接wordpress安装
  • 高端网站开发培训免费企业黄页查询网站
  • 最新的网站开发技术全国新冠新增最新消息
  • 试玩app推广网站建设广州网站维护制作
  • 2018年网站设计公司阿里巴巴网官方网站
  • 英文网站常用字体icp备案的网站名称
  • 扬州恒通建设网站镇江润州区建设局网站
  • 关于网站制作的论文网站注册时间
  • 一个人可以备案几个网站做图去哪个网站找素材
  • 江苏建设管理信息网站自己可以做装修效果图的网站
  • html网站欣赏杭州战争网站建设
  • 乐清市做淘宝网站公司网站支付体现功能怎么做
  • 做网站公司促销海报本网站只做信息展示
  • 网站建设商城模板仿我喜欢网站源码免费
  • 工商服务网优化网站推广
  • 嘉兴网站系统总部做一个网站一般要多少钱
  • win10电脑做网站网站为什么有价值是
  • 凡科网站建设视频impreza 4 wordpress
  • 北京大兴地区网站建设国外网站设计欣赏分析
  • 如何在网站中加入百度地图广东深圳软件开发公司
  • 诸城网站建设报价兰州网站建设公司有哪些
  • 技术网站的费用怎么做会计分录潍坊模板开发建站
  • 男生女生在床上做的那个网站公众号推广一个6元