您的位置:首页 > 编程语言 > Java开发

springboot配置访问sqlserver,mysql数据库以及ssm的公共业务逻辑层抽取

2017-11-11 18:22 543 查看
springboot的搭建:http://blog.csdn.net/goligory/article/details/78404480

最近喜欢用springboot,有时间就研究了一下,因为经常用sqlserver,在网上查了半天没有什么很好的配置,在抽取业务层的时候也出点问题,还好解决了

这是一个比较简单的结构



先引入sqlserver和mysql的依赖,注意不要重复,这么低级的错误我都不知道自己怎么犯的

<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/sqljdbc4 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>


这是sqlserver的连接配置

spring:
datasource:
url: jdbc:sqlserver://localhost:1433;DatabaseName=xxxxx
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: sa
password: 123456
initial-size: 1
min-idle: 1
max-active: 20
test-on-borrow: true
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-While-Idle: true
test-on-return: false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall,log4j,config


相关含义可以看看这篇文章:https://segmentfault.com/a/1190000004316491

initial-size:指定启动连接池时,初始建立的连接数量
min-idle:指定必须保持连接的最小值
max-active:指定连接池中最大的活跃连接数.

test-on-borrow:当从连接池借用连接时,是否测试该连接.

max-wait:指定连接池等待连接返回的最大等待时间,毫秒单位

time-between-eviction-runs-millis:指定空闲连接检查、废弃连接清理、空闲连接池大小调整之间的操作时间间隔

min-evictable-idle-time-millis:指定一个空闲连接最少空闲多久后可被清除.

validation-query:指定获取连接时连接校验的sql查询语句.

test-While-Idle当连接空闲时,是否执行连接测试.

test-on-return:在连接归还到连接池时是否测试该连接.

pool-prepared-statements:指定是否池化statements

其他的看demo

mysql连接配置,url是一行的我分开显示的

url: jdbc:mysql://localhost:3306/bdshop?createDatabaseIfNotExist=true&useUnicode=true&useUnicode=true
&characterEncoding=utf8&autoReconnect=true&verifyServerCertificate=false&useSSL=false
&sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false
driver-class: com.mysql.jdbc.Driver

在访问数据库时指定编码方式是否使用userssl等等

抽取公共业务层:

这样重用率会好很多,业务层在一块,所有工具类在一块分类显示,这样整体结构不冗杂





下面细说一下抽取业务层:

BaseMapper<T>

public interface BaseMapper<T> {
int insert(int id);
}

BaseService<T>:继承BaseMapper<T>

public interface BaseService<T> extends BaseMapper<T> {

}

BaseServiceImp<T>实现BaseService<T>,定义一个返回mapper接口的抽象方法等会有用

public abstract class BaseServiceImp<T> implements BaseService<T> {
protected abstract BaseMapper<T> getMapper();
public int insert(int id){
return getMapper().insert(id);
}
}

下面看一下模块层mapper继承公共BaseMapper,传入请求参数

public interface AMapper extends BaseMapper<User> {
public User login(User user);
}


service继承公共BaseService,传入请求参数,相当于继承了BaseMapper

public interface AService extends BaseService<User> {
public User login(User user);
}


imp继承BaseServiceImp,实现模块Service,向公共层传入参数,注意加上@Service,公共可以不加

BaseServiceImp没有实现getMapper() 方法,在这里实现,return指定模块的aMapper,这样就相当于是aMapper调用insert了

这个地方我一开始没注意,调用insert时在BaseServiceImp能传入参数,但是请求不了BaseMapper去查询数据库,一直报null

@Transactional
@Service
public class AServiceImp extends BaseServiceImp<User> implements AService {
@Resource
private AMapper aMapper;
@Override
protected BaseMapper<User> getMapper(){
return this.aMapper;
}

@Override
public User login(User user) {
System.out.println("imp--"+user);
user= aMapper.login(user);
return user;
}
}


AMapper.xml指定AMapper.java

这样controller不论调用login还是insert都可以进行查询了,清晰的结构还是蛮重要的

对于记录也是心得没多久,有不对地方多多指导,不好的地方多多包涵

码云地址:https://gitee.com/tickingbomb/tickingbomb/tree/mtgg/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springboot sqlserver mysql