KormSession 初始化
本文提供KormSession利用Druid作为数据连接池的说明
var dbURL = "jdbc:mysql://a.com:3306/test?useUnicode=true&characterEncoding=UTF-8"
var userName = "root"
var password = "root"
fun getDB(): KormSqlSession {
var dds = DruidDataSource()
dds.url = dbURL
dds.username = userName
dds.password = password
return KormSqlSession(dds)
}
@Test
fun deleteEntity() {
val tb = TestBook()
tb.testId = "dd"
getDB().delete(tb)
}
下面的实例中提到的getDB()方法都是从上面的说明中来的。
场景一
我们有3个数据源,分别为日志库、业务库、账务库。
1、创建数据库连接
fun getDB(): KormSqlSession {
val ddsLog = DruidDataSource() //日志库
ddsLog.url = dbURL
ddsLog.username = userName
ddsLog.password = password
val ddsBiz=DruidDataSource() //业务库
val ddsBilling=DruidDataSource() //账务库
val kss = KormSqlSession()
//设置业务库为默认数据源
kss.setDefaultDataSource(ddsBiz)
//设置其他两个数据源
kss.addDataSource("log", ddsLog)
kss.addDataSource("billing", ddsBilling)
return kss
}
可以做如下定义分别使用3个库。
//设置Logs 的数据源
@DataSource("log")
class Logs: EntityBase(){}
//设置账务库 的数据源
@DataSource("billing")
class Billing: EntityBase(){}
//业务库,不使用@DataSource,使用默认数据源
class Biz: EntityBase(){}
场景二、
我们有一个数据源,但是读写分离,一主两从。
1、创建数据库连接
fun getDB(): KormSqlSession {
val dds = DruidDataSource()
dds.url = dbURL
dds.username = userName
dds.password = password
val ddsRead1 = DruidDataSource()
val ddsRead2 = DruidDataSource()
val kss = KormSqlSession()
kss.setDefaultDataSource(dds)//读写
kss.addDataSource("default:read1", ddsRead1)//读
kss.addDataSource("default:read2", ddsRead2)//读
kss.addDataSource("default:master", dds) //写
return kss
}
2、使用
select使用读的连接源,随机选一个。
insert、update、delete使用写的连接源。
如果只设置了DefaultDataSource,那么读写都使用。
说明
@DataSource:指定了当前实体在执行SQL时使用的数据源。
命名规则:
1、不使用@DataSource,使用名为“defaultDataSource“的数据源
2、使用@DataSource,指定不同的数据源
3、区分主从(读写分离):在定义数据库连接时通过名称进行区分
“default:read” : default的从库
"default:slave" :default的从库
“default:master” : default的写库
“default:write” : default的写库
“default”:default的读写库
“log:read” :log数据源的读库
“log:slave” :log数据源的读库
“log:master” :log数据源的写库
“log:write” :log数据源的写库
“log” :log数据源的读写库