使用SpringBoot+mybatis-plus
数据库使用:mysql sqlServer
首先在Pom.xml 添加 mybatis-plus 的jar 包:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
再加入对sqServer数据库支持的jar包:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.2.0.jre8</version>
<scope>runtime</scope>
</dependency>
再加入对mySql数据库支持的jar包:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
多数据源 application-dev.properties的配置
我的主数据库是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<LcdShow> 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<LcdShow> {
/**
* @Description: 根据IP查询最新叫号数据
* @param
* @Author: wh
* @return
*/
LcdShow selectByXpdz(@Param("xpdz") String xpdz);
/**
* @Description: 查询当天叫号数据
* @param
* @Author: wh
* @Date: 2019/3/28
* @return
*/
List<LcdShow> selectLcdShowByMysql();
/**
* @Description: 获取外部叫号数据
* @param 注意这个DS
* @Author: wh
* @Date: 2019/3/28
* @return
*/
@DS("sqlserver")
List<LcdShow> selectLcdShowBySqlServer();
/**
* 根据xpdz更新数据
* @param lcdShow
*/
void updateByXpdz(LcdShow lcdShow);
}
mapper.xml :查询 resultMap 、 更新parameterType (resultMap 与parameterType 区别:https://blog.youkuaiyun.com/a791123503/article/details/79936433)
mysql语句 中没有top 1 只能用limit 1
<?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.cn.mapper.LcdShowMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.cn.entity.LcdShow" >
<result column="xpdz" property="xpdz" />
<result column="ysxm" property="ysxm" />
<result column="ysgh" property="ysgh" />
<result column="fjmc" property="fjmc" />
<result column="ysgy" property="ysgy" />
<result column="pdhm" property="pdhm" />
<result column="brxm" property="brxm" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="status" property="status" />
</resultMap>
<!--通过小屏地址查询mysql数据库-->
<select id="selectByXpdz" resultMap="BaseResultMap">
select xpdz,ysxm,ysgh,fjmc,ysgy,pdhm,brxm,create_time,update_time,status
from lcd_show where xpdz=#{xpdz} LIMIT 1
</select>
<!--查询mysql数据库-->
<select id="selectLcdShowByMysql" resultMap="BaseResultMap">
SELECT xpdz,ysxm,ysgh,fjmc,ysgy,pdhm,brxm,create_time,update_time,status
FROM lcd_show
</select>
<!--查询 sqlserver 数据库-->
<select id="selectLcdShowBySqlServer" resultMap="BaseResultMap">
SELECT xpdz,ysxm,ysgh,fjmc,ysgy, pdhm,brxm
FROM lcd_show
</select>
<!--根据xpdz更新数据-->
<select id="updateByXpdz" parameterType="com.cn.entity.LcdShow">
UPDATE lcd_show SET
xpdz = #{xpdz} ,ysxm = #{ysxm} , ysgh = #{ysgh} , fjmc = #{fjmc} ,
ysgy = #{ysgy} ,pdhm = #{pdhm} , brxm = #{brxm},
create_time = #{createTime},update_time = #{updateTime},status = #{status}
WHERE
xpdz = #{xpdz}
</select>
</mapper>
在同一个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<LcdShow> {
/**
* 查询主表
*/
List<LcdShow> getLcdShowListByMysql();
/**
* 查询从表
*/
List<LcdShow> 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<LcdShowMapper, LcdShow> implements ILcdShowService {
@Override
public List<LcdShow> getLcdShowListByMysql() {
return this.baseMapper.selectLcdShowByMysql();
}
@Override
public List<LcdShow> 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定位到 可以参考下面图的样子修改)