com.alibaba
druid-spring-boot-starter
1.1.10
com.baomidou
mybatis-plus-boot-starter
3.0.6
com.baomidou
dynamic-datasource-spring-boot-starter
2.4.2
com.microsoft.sqlserver
sqljdbc4
4.0
runtime
com.microsoft.sqlserver
mssql-jdbc
6.2.0.jre8
runtime
mysql
mysql-connector-java
runtime
我的主数据库是mySql 从数据库是sqlServer
spring.datasource.dynamic.primary=mysql
spring.datasource.dynamic.datasource.mysql.username=数据库名称
spring.datasource.dynamic.datasource.mysql.password=数据库密码
spring.datasource.dynamic.datasource.mysql.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.mysql.url=jdbc:mysql://127.0.0.1:3306/数据库名称
#比如oracle就需要重新设置这个 select 1 FROM DUAL
spring.datasource.dynamic.datasource.mysql.druid.validation-query=select 'x'
spring.datasource.dynamic.datasource.sqlserver.username=数据库名称
spring.datasource.dynamic.datasource.sqlserver.password=数据库密码
spring.datasource.dynamic.datasource.sqlserver.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#10.98.247.141
spring.datasource.dynamic.datasource.sqlserver.url=jdbc:sqlserver://数据库链接:端口号;DatabaseName=数据库名称
#比如oracle就需要重新设置这个 select 1 FROM DUAL
spring.datasource.dynamic.datasource.sqlserver.druid.validation-query=select 'x'
#mybatis-plus 要启动必须配置这个(路径根据项目实际情况更改)
mybatis-plus.mapper-locations=classpath*:**/mapper/xml/*Mapper.xml
多数据源:
实体类 两个数据库 用同一个实体类(数据库名可以不同,表名类名相同)
如果在实体类中添加数据库没有的字段 字段上面要 加@TableField(exist = false) 这个注解
package com.cn.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
@ApiModel(value = "叫号表")
@TableName("lcd_show")
public class LcdShow extends Model implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 小屏地址
*/
@ApiModelProperty(value = "小屏地址")
private String xpdz;
/**
* 医生姓名
*/
@ApiModelProperty(value = "医生姓名")
private String ysxm;
/**
* 医生工号
*/
@ApiModelProperty(value = "医生工号")
private String ysgh;
/**
* 房间名称
*/
@ApiModelProperty(value = "房间名称")
private String fjmc;
/**
* 医生格言
*/
@ApiModelProperty(value = "医生格言")
private String ysgy;
/**
* 排队号码
*/
@ApiModelProperty(value = "排队号码")
private String pdhm;
/**
* 病人姓名
*/
@ApiModelProperty(value = "病人姓名")
private String brxm;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
private Date createTime;
@ApiModelProperty(value = "修改时间")
@TableField("update_time")
private Date updateTime;
@ApiModelProperty(value = "状态")
private Integer status;
@ApiModelProperty(value = "医生状态")
@TableField(exist = false)
private String yszt;
@ApiModelProperty(value = "医生职称")
@TableField(exist = false)
private String yszc;
@ApiModelProperty(value = "医生头像")
@TableField(exist = false)
private String ystx;
@ApiModelProperty(value = "医生简介")
@TableField(exist = false)
private String ysjj;
//省略了getset方法 构造方法.....
}
mapper: 两个实体类Mapper 接口在同一个Mapper中
从数据库Mapper接口 上面注解@DS("里面放的是 从数据库配置中的名字 字母大小要相同")
package com.cn.upms.mapper;
import com.cn.upms.entity.LcdShow;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author wh
*
*/
public interface LcdShowMapper extends BaseMapper {
/**
* @Description: 根据IP查询最新叫号数据
* @param
* @Author: wh
* @return
*/
LcdShow selectByXpdz(@Param("xpdz") String xpdz);
/**
* @Description: 查询当天叫号数据
* @param
* @Author: wh
* @Date: 2019/3/28
* @return
*/
List selectLcdShowByMysql();
/**
* @Description: 获取外部叫号数据
* @param 注意这个DS
* @Author: wh
* @Date: 2019/3/28
* @return
*/
@DS("sqlserver")
List selectLcdShowBySqlServer();
/**
* 根据xpdz更新数据
* @param lcdShow
*/
void updateByXpdz(LcdShow lcdShow);
}
mapper.xml :查询 resultMap 、 更新parameterType (resultMap 与parameterType 区别:https://blog.csdn.net/a791123503/article/details/79936433)
mysql语句 中没有top 1 只能用limit 1
在同一个Service 接口写 两个表的 接口
package com.cn.service;
import com.cn.entity.LcdShow;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
*
* @author wh
* @date 2019-03-29 11:33:31
*/
public interface ILcdShowService extends IService {
/**
* 查询主表
*/
List getLcdShowListByMysql();
/**
* 查询从表
*/
List getLcdShowListBySqlServer();
/**
*根据IP查询 更新叫号数据
*/
void updateByXpdz(LcdShow lcdShow);
/**
* 根据IP查询 叫号数据
*/
LcdShow getByXpdz(String xpdz);
/**
* 清空数据库所有数据
*/
void clearEmpty();
}
在同一个ServiceImpl 实现类中 写逻辑 还有mapper接口 的调用 类上面 注解@Service
package com.cn.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.cn.common.util.DateUtil;
import com.cn.entity.LcdShow;
import com.cn.mapper.LcdShowMapper;
import com.cn.service.ILcdShowService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author wh
* @date 2019-03-29 11:33:31
*/
@Service
public class LcdShowServiceImpl extends ServiceImpl implements ILcdShowService {
@Override
public List getLcdShowListByMysql() {
return this.baseMapper.selectLcdShowByMysql();
}
@Override
public List getLcdShowListBySqlServer() {
return this.baseMapper.selectLcdShowBySqlServer();
}
@Override
public void updateByXpdz(LcdShow lcdShow) {
if(StringUtils.isBlank(lcdShow.getXpdz())){
return;
}
this.baseMapper.updateByXpdz(lcdShow);
}
@Override
public LcdShow getByXpdz(String xpdz) {
if (StringUtils.isBlank(xpdz)) {
return null;
}
return this.baseMapper.selectByXpdz(xpdz);
}
@Override
public void clearEmpty() {
this.baseMapper.delete(null);
}
}
在同一个Controller写控制 类上注解@RestController 表明是个controller类 调用Service 其上 注解@Reference
@RestController
@RequestMapping("/lcdBigConfig")
public class LcdBigConfigController extends BaseController {
@Reference
private ILcdBigConfigService lcdBigConfigService;
//里面controller 正常流程写..
}
Aplication 启动类 :@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) 关闭 springboot 自动配置的数据源
package com.cn.upms;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
/**
* @author wh
* @description Application
*
*/
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableAspectJAutoProxy
@EnableAsync
@EnableScheduling
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
@ComponentScan("com.cn")
public class UpmsWebApplication extends SpringBootServletInitializer {
protected final static Logger logger = LoggerFactory.getLogger(UpmsWebApplication.class);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
logger.info("----UpmsWebApplication 启动----");
return application.sources(UpmsWebApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(UpmsWebApplication.class, args);
logger.info("----UpmsWebApplication 启动----");
}
}
主要就是jar包 然后就是那个Mapper 中的@DS 注解 还有就是配置文件里面的 数据源配置
中间有些东西是不必要的 我没删干净...
如果报错:驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
解决办法为:
第一个办法:换个jDK(我一开始用的jre1.8.0_201 他报错,后来换了jdk1.8.0_121 就不报错了)
第二个办法:
jdk8 运行SQL server 数据库 需要打开 C:\Program Files\Java\jdk1.8.0_201\jre\lib\security ----->java.security文件
把 3DES_EDE_CBC 删除(复制 直接ctrl+F定位到 可以参考下面图的样子修改)