zoukankan      html  css  js  c++  java
  • scala之使用scalikejdbc操作数据库

    scalikejdbc的简介:

    ScalikeJDBC是一款给Scala开发者使用的简介访问类库,它是基于SQL的,使用者只需要关注SQL逻辑的编写,所有的数据库操作都交给ScalikeJDBC。这个类库内置包含了JDBCAPI,并且给用户提供了简单易用并且非常灵活的API。并且,QueryDSl(通用查询查询框架)使你的代码类型安全,半年过去可重复使用。我们可以在生产环境大胆地使用这款DB访问类库。

    笔者用的是MySQL数据库,所以此处以MySQL为例,以下是通过ScalikeJDBC来操作数据库的具体过程

    【操作大纲】

    1.拿到connection

    2.拿到statement

    3.拿到rs

    4.结果获取出来

    5.关掉rs,stmt和connection释放资源

    【pom文件的配置】

    <!--Scala相关依赖-->
    <dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>${scala.version}</version>
    
    </dependency>
    
    <!--scalikejdbc相关依赖-->
    <dependency>
    <groupId>org.scalikejdbc</groupId>
    <artifactId>scalikejdbc_2.11</artifactId>
    <version>${scalikejdbc.version}</version>
    </dependency>
    
    <dependency>
    <groupId>org.scalikejdbc</groupId>
    <artifactId>scalikejdbc-config_2.11</artifactId>
    <version>${scalikejdbc.version}</version>
    </dependency>
    
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.jdbc.version}</version>
    </dependency>
    
    
    <properties>
    <scala.version>2.11.8</scala.version>
    <scalikejdbc.version>3.3.2</scalikejdbc.version>
    <mysql.jdbc.version>5.1.38</mysql.jdbc.version>
    </properties>

    【配置连接数据库的信息文件】

    1.在src的main目录下配置一个resource文件夹,文件夹下再创建一个application.conf

    【配置使文件能够被读取】

    File=》Project Structure  ####若想使配置文件能够被加载,需将config设置为resource

     【application.conf文件配置信息如下】

    db.default.driver="com.mysql.jdbc.Driver"
    db.default.url="jdbc:mysql://hadoop001/ruoze_d6?characterEncoding=utf-8"
    db.default.user="root"
    db.default.password="123456"
    
    # Connection Pool settings
    db.default.poolInitialSize=10
    db.default.poolMaxSize=20
    db.default.connectionTimeoutMillis=1000

    【在ruoze_d6创建Employer表格】

    create table Employer(
    name varchar(10),
    age varchar(4),
    salary  varchar(10)
    );

    【scala编程实现增删改查操作】

    package com.wsk.bigdata.scala.scalikejdbc
    
    import scalikejdbc._
    import scalikejdbc.config._
    
    case class Employer(name: String, age: Int, salary: Long)
    
    object JdbcTest {
      def main(args: Array[String]): Unit = {
        DBs.setupAll()
    
        val config = DBs.config
    
        val employers = List(Employer("zhangsan", 20, 18000), Employer("zhangliu", 50, 300000), Employer("lisi", 22, 22000))
        //批量插入
        insert(employers)
        println("----------------insert执行完毕---------------")
        //查询出结果
        val results = select()
        for (employer <- results) {
          println(employer.name, employer.age, employer.salary)
        }
        println("----------------select执行完毕---------------")
        //修改
        update(1000, "zhangsan")
        println("----------------update执行完毕---------------")
        //根据姓名删除
        deleteByname("zhangliu")
        println("----------------deleteByname执行完毕---------------")
        //删除所有记录
        deleteAll()
        println("----------------deleteAll执行完毕---------------")
    
        DBs.closeAll()
      }
    
    
      def insert(employers: List[Employer]): Unit = {
        DB.localTx { implicit session =>
          for (employer <- employers) {
            SQL("insert into wsktest(name,age,salary) values(?,?,?)")
              .bind(employer.name, employer.age, employer.salary)
              .update().apply()
          }
    
        }
      }
    
      def select(): List[Employer] = {
        DB.readOnly { implicit session =>
          SQL("select * from wsktest")
            .map(rs => Employer(rs.string("name"), rs.int("age"), rs.long("salary")))
            .list().apply()
        }
      }
    
      def update(age: Int, name: String) {
        DB.autoCommit { implicit session =>
          SQL("update wsktest set age = ? where name = ?").bind(age, name).update().apply()
        }
      }
    
    
      def deleteByname(name: String): Unit = {
        DB.autoCommit { implicit session =>
          SQL("delete from wsktest where name = ?").bind(name).update().apply()
        }
      }
    
      def deleteAll(): Unit ={
        DB.autoCommit { implicit session =>
          SQL("delete from wsktest ").update().apply()
        }
      }
    }
  • 相关阅读:
    Net Core -- 配置Kestrel端口
    NET Core迁移
    NET Core 2.0 微服务跨平台实践
    NET Core 与 Vue.js 服务端渲染
    Varnish 实战
    Hitchhiker 是一款开源的 Restful Api 测试工具
    ABP框架用Dapper实现通过SQL访问数据库
    开源框架总体介绍
    Net Core API网关Ocelot
    Jquery autocomplete插件
  • 原文地址:https://www.cnblogs.com/xuziyu/p/10799202.html
Copyright © 2011-2022 走看看