ScalikeJDBC的基本使用

ScalikeJdbc的增删改查操作

运用该技术,在scala小项目里面可以很简单的往mysql内插入数据。

1、导入依赖

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.47</version>
</dependency>
<dependency>
	<groupId>org.scalikejdbc</groupId>
	<artifactId>scalikejdbc_2.11</artifactId>
	<version>3.1.0</version>
</dependency>
<dependency>
	<groupId>org.scalikejdbc</groupId>
	<artifactId>scalikejdbc-config_2.11</artifactId>
	<version>3.1.0</version>
</dependency>

2、添加配置文件

配置文件的名称需要为application.conf,这样才能被识别。配置文件内容如下:

db.default.driver="com.mysql.jdbc.Driver"
db.default.url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE&useSSL=false"
db.default.username="root"
db.default.password="123456"

3、增删改操作

增删改操作都是使用DB.autoCommit方法进行编写,这里做统一的撰写。

//加载application.conf配置文件
DBs.setup()


//往表中插入数据
//implicit是导入隐式转换
DB.autoCommit{
    
     implicit session =>
    //编写sql语句
    SQL("insert into student values(?,?,?)")
    //绑定参数
    .bind(1,"zhangsan",18)
    //执行代码,只要表数据发生了改变都需要用update,也就是增删改都需要添加update
    .update()
    //提交任务
    .apply()
}


//从表中删除数据
DB.autoCommit{
    
    implicit session =>
    SQL("delete from student where id = ?")
    .bind(1)
    .update()
    .apply()
}


修改表中的数据
DB.autoCommit{
    
    implicit session =>
    SQL("update student set name = "lisi" where id = ?)
    .bind(1)
    .update()
    .apply()
}

4、查操作

scalikejdbc的查询操作使用的是readOnly方法

//加载application.conf配置文件
DBs.setup()


//从表中查找数据
//implicit是导入隐式转换
val list:List[(Int,String,Int)] = DB.readOnly{
    
    implicit session =>
    SQL("select id,name,age from student")
    .map(
    	wrs =>(
        	wrs.int("id"),
            wrs.string("name"),
            wrs.int("age")
     ))
    //此处不需要执行update方法
    
    //将采集的数据转换成元组,放入list中
    .list()
    //提交任务
    .apply()
}
//打印输出
list.foreach(println)

5、scalikejdbc插入数据的事务性

场景:如果我们往数据库插入了几百万条数据甚至更多,如果中间有一条出现了错误导致异常退出,我们也很难找到哪些数据插入了,那些没有插入,因此对整个操作进行操作很有必要。

不加入事务,插入大量数据的过程中产生异常:

//加载application.conf配置文件
DBs.setup()

for(i <- 1 to 1000){
    
    
    if (i == 456){
    
    
        //手写除0异常
        i/0
    }
    //插入数据
    DB.autoCommit{
    
    implicit session =>
        SQL("insert into student values(?,?,?)")
        .bind(i,"zhangsan","18")
        .update()
        .apply()
    }
}

该代码片段产生的结果就是,只插入了id为1到455的这455条数据,剩下的全部未插入。

加入事务,插入大量数据的过程中产生异常:

//加载application.conf配置文件
DBs.setup()

//插入数据,使用localTx方法添加事务
DB.localTx{
    
    implicit session =>
    for(i <- 1 to 1000){
    
    
    	if (i == 456){
    
    
        	//手写除0异常
        	i/0
    	}
        SQL("insert into student values(?,?,?)")
    		.bind(i,"zhangsan","18")
    		.update()
    		.apply()
	}
}

该代码片段如果产生了异常,则一条数据都不会插入数据库。

猜你喜欢

转载自blog.csdn.net/cczxcce/article/details/112134659