1、基本方法封装,可以自行扩展
package utils
import java.sql.ResultSet
import dataSource._
/**
* @author yule.zhang
* @deprecated 抽取公共查询方法
*/
object BaseDaoFactory {
/**
* 根据数据源类的名称获取连接
* @param connStr
* @return
*/
def getConn(connStr:String) = {
val conn = connStr match {
case "FirstDBDataSource" => FirstDBDataSource.connectionPool.getConnection
case "SecondDBDataSource" => SecondDBDataSource.connectionPool.getConnection
case _ => OtherDBDataSource.connectionPool.getConnection
}
conn
}
/**
* 执行SQL获取结果 list
* @param connStr
* @param sql
* @param fieldList
* @return
*/
def getFinalBaseListResult(connStr:String,sql:String,fieldList: List[String]) = {
var publicList = List[Map[String,String]]()
if(sql != "-1"){
val conn = getConn(connStr)
val stmt = conn.prepareStatement(sql)
val resultSet = stmt.executeQuery()
publicList = getBaseListResult(fieldList,resultSet)
stmt.close()
conn.close()
}
publicList
}
/**
* 获取map{"写死key":"xxx"}
* 或者 "xxx"
* @param connStr
* @param sql
* @param key
* @param filed
* @return
*/
def getFinalSingleResult(connStr:String,sql:String,key:String,filed:String) = {
val res = key match {
case null => getSingleFieldResult(connStr,sql,filed)
case _ => getSingleMapResult(connStr,sql,key,filed)
}
res
}
/**
* 获取 map{"写死key":"xxx"}
* @param connStr
* @param sql
* @param key
* @param filed
* @return
*/
def getSingleMapResult(connStr:String,sql:String,key:String,filed:String) = {
var publicMap = Map[String,String]()
if(sql != "-1"){
val conn = getConn(connStr)
val stmt = conn.prepareStatement(sql)
val resultSet = stmt.executeQuery()
publicMap = getSingleMap(key,filed,resultSet)
stmt.close()
conn.close()
}
publicMap
}
/**
* 获取 "xxx"
* @param connStr
* @param sql
* @param filed
*/
def getSingleFieldResult(connStr:String,sql:String,filed:String) ={
var public = ""
if(sql != "-1"){
val conn = getConn(connStr)
val stmt = conn.prepareStatement(sql)
val resultSet = stmt.executeQuery()
public = getSingleField(filed,resultSet)
stmt.close()
conn.close()
}
public
}
def getFinalBaseListReplaceResult(connStr:String,sql:String,fieldList: List[String],replaceMap:Map[String,Map[String,String]]) = {
var publicList = List[Map[String,String]]()
if(sql != "-1"){
val conn = getConn(connStr)
val stmt = conn.prepareStatement(sql)
val resultSet = stmt.executeQuery()
publicList = getBaseListReplaceResult(fieldList,resultSet,replaceMap)
stmt.close()
conn.close()
}
publicList
}
/**
* 获取集合数据
* @param connStr
* @param sql
* @param field
* @return
*/
def getFinalBaseSetResult(connStr:String,sql:String,field: String) = {
var publicSet = Set[String]()
if(sql != "-1"){
val conn = getConn(connStr)
val stmt = conn.prepareStatement(sql)
val resultSet = stmt.executeQuery()
publicSet = getBaseSetResult(field,resultSet)
stmt.close()
conn.close()
}
publicSet
}
/**
* 执行SQL 获取结果 map
* @param connStr
* @param sql
* @param fieldList
* @return
*/
def getFinalBaseMapResult(connStr:String,sql:String,fieldList: List[String]) = {
var publicMap = Map[String,String]()
if(sql != "-1"){
val conn = getConn(connStr)
val stmt = conn.prepareStatement(sql)
val resultSet = stmt.executeQuery()
publicMap = getBaseMapResult(fieldList,resultSet)
stmt.close()
conn.close()
}
publicMap
}
/**
* 获取基本List[{String -> String,String -> String},{String -> String,String -> String}]
* @param fieldList
* @param resultSet
* @return
*/
def getBaseListResult(fieldList: List[String],resultSet:ResultSet) = {
var tempList = List[Map[String,String]]()
while(resultSet.next()){
var tempMap = Map[String,String]()
val it = fieldList.toIterator
while(it.hasNext){
val k = it.next().toString
val v = resultSet.getString(k)
tempMap = tempMap ++ Map(k -> v)
}
tempList = tempList :+ tempMap
}
tempList
}
/**
* 前提是数据只有一条
* 获取map {"写死key":"xxx"}
* @param k
* @param filed
* @param resultSet
* @return
*/
def getSingleMap(k:String,filed:String,resultSet:ResultSet) = {
var tempMap = Map[String,String]()
while(resultSet.next()){
val v = resultSet.getString(filed)
tempMap = tempMap ++ Map(k -> v)
}
tempMap
}
/**
* 前提是数据只有一条
* 获取 "xxx"
* @param filed
* @param resultSet
* @return
*/
def getSingleField(filed:String,resultSet:ResultSet) = {
var temp = ""
while(resultSet.next()){
temp = resultSet.getString(filed)
}
temp
}
/**
* 获取替换值的结果
* @param fieldList
* @param resultSet
* @param replaceMap
* @return
*/
def getBaseListReplaceResult(fieldList: List[String],resultSet:ResultSet,replaceMap:Map[String,Map[String,String]]) = {
var tempList = List[Map[String,String]]()
while(resultSet.next()){
var tempMap = Map[String,String]()
val it = fieldList.toIterator
while(it.hasNext){
val k = it.next().toString
var v = ""
if(replaceMap.contains(k)){
val tempV = resultSet.getString(k)
v = replaceMap.getOrElse(k,Map[String,String]()).getOrElse(tempV,"")
}else{
v = resultSet.getString(k)
}
tempMap = tempMap ++ Map(k -> v)
}
tempList = tempList :+ tempMap
}
tempList
}
/**
* 获取基本Map[String,String]格式数据
* @param fieldList
* @param resultSet
* @return
*/
def getBaseMapResult(fieldList: List[String],resultSet:ResultSet) = {
var tempMap = Map[String,String]()
while(resultSet.next()){
val it = fieldList.toIterator
while(it.hasNext){
val kField = it.next().toString
val k = resultSet.getString(kField)
val vField = it.next().toString
val v = resultSet.getString(vField)
tempMap = tempMap ++ Map(k -> v)
}
}
tempMap
}
/**
* 获取不重复的集合
* @param field
* @param resultSet
* @return
*/
def getBaseSetResult(field: String,resultSet:ResultSet) = {
var tempList = Set[String]()
while(resultSet.next()){
val k = field.toString
val v = resultSet.getString(k)
tempList = tempList + v
}
tempList
}
}
2、数据源(只展示一个作为示例,第二个或者有更多实例都是一样的写法,只是数据库连接地址不一样)
package dataSource
import com.alibaba.druid.pool.DruidDataSource
import org.apache.commons.dbcp2.BasicDataSource
object FirstDataSource {
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://127.0.0.1:3306/first"//填写自己的数据库连接
val username = "root"
val password = "root"
//use druid
val connectionPool = new DruidDataSource()
connectionPool.setUsername(username)
connectionPool.setPassword(password)
connectionPool.setDriverClassName(driver)
connectionPool.setUrl(url)
connectionPool.setValidationQuery("select 1")
connectionPool.setInitialSize(15)
connectionPool.setMinIdle(10)
connectionPool.setMaxActive(100)
connectionPool.setRemoveAbandoned(true)
connectionPool.setRemoveAbandonedTimeoutMillis(180000000)
connectionPool.setMaxWait(5000)
connectionPool.setTestOnBorrow(false)
connectionPool.setTestOnReturn(false)
}
3、调用,获得数据
//1、获得集合list = [{"id":"0","name":"张乐","age":"18"},{"id":"1","name":"罗奎","age":"18"}]
val sql = """ select id,name,age from user; """
val fieldList = List("id","name","age ")
val resList = BaseDaoFactory.getFinalBaseListResult("FirstDataSource",sql,fieldList)
//2、获得map = {"0":"张乐","1":"罗奎","2":"xx",...} 以id为key,姓名为value的map
val mapFieldList = List("id","name")
val resMap = BaseDaoFactory.getFinalBaseMapResult("FirstDataSource",sql,mapFieldList)
//如果不想执行两遍查询,耗费性能,可以直接在list中获取map
val equalMap = resList.map(ele => Map(ele.getOrElse("id","0") -> ele.getOrElse("name","-")))
推荐一个公众号
号主为一线大厂架构师,CSDN博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!