scala数据库工具类

scala的数据库连接池,基于mysql

import java.util.concurrent.ConcurrentHashMapimport com.jolbox.bonecp.{ BoneCPConfig, BoneCP }import java.util.ResourceBundleimport java.util.LinkedListimport java.sql.DriverManagerimport java.sql.Connection/** * 数据库连接池工具类 * 语言:scala * 时间:2016-07-09 */object DBConnectionPool {  private val reader = ResourceBundle.getBundle("connection")  private val max_connection = reader.getString("jeecg.max_connection") //连接池总数  private val connection_num = reader.getString("jeecg.connection_num") //产生连接数  private var current_num = 0 //当前连接池已产生的连接数  private val pools = new LinkedList[Connection]() //连接池  private val driver = reader.getString("jeecg.driver")  private val url = reader.getString("jeecg.url")  private val username = reader.getString("jeecg.username")  private val password = reader.getString("jeecg.password") /**  * 加载驱动  */  private def before() {    if (current_num > max_connection.toInt && pools.isEmpty {      print("busyness")      Thread.sleep(2000)      before()    } else {      Class.forName    }  }  /**   * 获得连接   */  private def initConn(): Connection = {    val conn = DriverManager.getConnection(url, username, password)    conn  }  /**   * 初始化连接池   */  private def initConnectionPool(): LinkedList[Connection] = {    AnyRef.synchronized({      if (pools.isEmpty {        before()        for (i <- 1 to connection_num.toInt) {          pools.push(initConn          current_num += 1        }      }      pools    })  }  /**   * 获得连接   */  def getConn():Connection={     initConnectionPool()     pools.poll()  }  /**   * 释放连接   */  def releaseCon(con:Connection){    pools.push  }  }

配置文件

#数据库连接池配置文件jeecg.driver=org.gjt.mm.mysql.Driverjeecg.url=jdbc:mysql://0.0.0.0:3306/jeecg?useUnicode=true&characterEncoding=utf-8jeecg.username=rootjeecg.password=****jeecg.max_connection=8jeecg.connection_num=10

dao类

import java.sql.ResultSetimport java.sql.PreparedStatementimport java.sql.Connectionimport java.sql.Statement/** * 数据操作工具类 * 语言:scala * 时间:2016-07-09 */private[org] abstract class BaseDao[T](conn: Connection) {  /**   * 插入数据   * @param sql SQL语句   * @param params 参数列表   * @param convert 主键转换方法   * @return 转换结果   */  protected def insert[T](sql: String, params: Array[Any])(convert: ResultSet => T) = {    val pstmt = conn prepareStatement (sql, Statement.RETURN_GENERATED_KEYS)    setParameters(pstmt, params)    pstmt.executeUpdate    val rs = pstmt.getGeneratedKeys    rs.next    convert  }  /**   * 更新数据   * @param sql SQL语句   * @param params 参数列表   * @return 影响行数   */  protected def update(sql: String, params: Array[Any]) = createStatement(sql, params).executeUpdate  /**   * 查询对象   * @param sql SQL语句   * @param params 参数列表   * @param convert 结果集转换方法   * @return 泛型对象   */  protected def queryForObject[T](sql: String, params: Array[Any])(convert: ResultSet => T) = {    val rs = query(sql, params)    if  {      val result = convert      if  {        val ex = new ResultsTooManyException        throw ex      } else Some    } else None  }  /**   * 查询对象列表   * @param sql SQL语句   * @param params 参数列表   * @param convert 结果集转换方法   * @return 泛型对象列表   */  protected def queryForList[T](sql: String, params: Array[Any])(convert: ResultSet => T) = {    val rs = query(sql, params)    var results = List[T]()    while  { results = results :+ convert }    results  }  /**   * 查询对象映射   * @param sql SQL语句   * @param params 参数列表   * @param convert 结果集转换方法   * @return 泛型对象映射   */  protected def queryForMap[K, V](sql: String, params: Array[Any])(convert: ResultSet =>  = {    val rs = query(sql, params)    var results = Map[K, V]()    while  { results += convert }    results  }  /**   * 查询   * @param sql SQL语句   * @param params 参数列表   */  private def query(sql: String, params: Array[Any]) = createStatement(sql, params).executeQuery  /**   * 创建声明   * @param sql SQL语句   * @param params 参数列表   */  private def createStatement(sql: String, params: Array[Any]) = {    val pstmt = conn prepareStatement sql    setParameters(pstmt, params)    pstmt  }  /**   * 插入参数   * @param pstmt 预编译声明   * @param params 参数列表   */  private def setParameters(pstmt: PreparedStatement, params: Array[Any]) {    for (i <- 1 to params.length) { pstmt setObject (i, params(i - 1)) }  }}/** * 结果值读取器 */object ResultValueGetter {  /**   * 查询结果值   * @param rs 结果集   * @param getResult 获得单个值结果的方法   * @return 值   */  def getResultValue[T](rs: ResultSet)(getResult: ResultSet => T) = {    val result = getResult    if (rs.wasNull) None else Some  }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colNum 列号   */  def getStringValue(rs: ResultSet, colNum: Int) = getResultValue { _ getString colNum }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colNum 列号   */  def getIntValue(rs: ResultSet, colNum: Int) = getResultValue { _ getInt colNum }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colNum 列号   */  def getLongValue(rs: ResultSet, colNum: Int) = getResultValue { _ getLong colNum }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colNum 列号   */  def getDoubleValue(rs: ResultSet, colNum: Int) = getResultValue { _ getDouble colNum }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colNum 列号   */  def getBooleanValue(rs: ResultSet, colNum: Int) = getResultValue { _ getBoolean colNum }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colNum 列号   */  def getTimestampValue(rs: ResultSet, colNum: Int) = getResultValue { _ getTimestamp colNum }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colName 列名   */  def getStringValue(rs: ResultSet, colName: String) = getResultValue { _ getString colName }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colName 列名   */  def getIntValue(rs: ResultSet, colName: String) = getResultValue { _ getInt colName }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colName 列名   */  def getLongValue(rs: ResultSet, colName: String) = getResultValue { _ getLong colName }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colName 列名   */  def getDoubleValue(rs: ResultSet, colName: String) = getResultValue { _ getDouble colName }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colName 列名   */  def getBooleanValue(rs: ResultSet, colName: String) = getResultValue { _ getBoolean colName }  /**   * 获得字符串结果的值   * @param rs 结果集   * @param colName 列名   */  def getTimestampValue(rs: ResultSet, colName: String) = getResultValue { _ getTimestamp colName }}/** * 结果太多异常 */class ResultsTooManyException extends Exception("Returned too many results.") {}

本文由华夏彩票发布于编程应用,转载请注明出处:scala数据库工具类

您可能还会对下面的文章感兴趣: