原文鏈接:Mybatis常用工具類(二)-- ScriptRunner 和 SqlRunner
使用 ScriptRunner 執行腳本
ScriptRunner
全路徑:org.apache.ibatis.jdbc.ScriptRunner
try (Connection connection = DriverManager.getConnection(
"jdbc:hsqldb:mem:mybatis-test",
"sa", "");) {
ScriptRunner scriptRunner = new ScriptRunner(connection);
scriptRunner.runScript(Resources.getResourceAsReader("init-table.sql"));
} catch (SQLException | IOException e) {
e.printStackTrace();
}
使用 SqlRunner 操作數據庫
SqlRunner
全路徑:org.apache.ibatis.jdbc. SqlRunner
主要操作數據庫的方法如下:
方法 | 說明 |
---|---|
selectOne(String sql, Object... args) | 執行 SELECT 語句,可包含占位符,返回一個Map<String, Object>。若查詢行數不為1時,則會拋 SQLException 異常。 |
selectAll(String sql, Ojbect... args) | 執行 SELECT 語句,可包含占位符,返回多條記錄(List<Map<String, Object>>)。 |
insert(String sql, Object... args) | 執行一條 INSERT 語句,可包占位符。 |
update(String sql, Object... args) | 執行一條 UPDATE 語句,可包占位符。 |
delete(String sql, Object... args) | 執行一條 DELETE 語句,可包占位符。 |
run(String sql) | 執行 SQL 語句,沒有占位符。 |
closeConnection() | 關閉Connection對象。 |
相關demo
selectOne
SqlRunner sqlRunner = new SqlRunner(connection);
String sql = new SQL()
.SELECT("*")
.FROM("person")
.WHERE("person_id = ?")
.toString();
Map<String, Object> resultMap = sqlRunner.selectOne(sql, 1);
System.out.println(resultMap);
打印結果>>>
{PERSON_NAME=張三, PERSON_ID=1, TITLE=后端, NICK_NAME=小三, COMPANY_ID=1, AGE=28}
selectAll
SqlRunner sqlRunner = new SqlRunner(connection);
String sql = new SQL()
.SELECT("*")
.FROM("person")
.WHERE("company_id = ?")
.toString();
List<Map<String, Object>> results = sqlRunner.selectAll(sql, 1);
System.out.println(results);
打印結果>>>
[{PERSON_NAME=張三, PERSON_ID=1, TITLE=后端, NICK_NAME=小三, COMPANY_ID=1, AGE=28}, {PERSON_NAME=李四, PERSON_ID=2, TITLE=前端, NICK_NAME=小四, COMPANY_ID=1, AGE=25}, {PERSON_NAME=王五, PERSON_ID=3, TITLE=CTO, NICK_NAME=小五, COMPANY_ID=1, AGE=31}]
delete
SqlRunner sqlRunner = new SqlRunner(connection);
String deleteUserSql = new SQL()
.DELETE_FROM("person")
.WHERE("person_id = ?")
.toString();
sqlRunner.delete(deleteUserSql, 1);
System.out.println("查詢\"person_id=1\": " + getPersonById(1));
打印結果>>>
查詢"person_id=1": null
update
SqlRunner sqlRunner = new SqlRunner(connection);
String updateUserSql = new SQL()
.UPDATE("person")
.SET("nick_name = ?")
.WHERE("person_id = ?")
.toString();
sqlRunner.update(updateUserSql, "三哥", 1);
System.out.println("查詢\"person_id=1\": " + getPersonById(1));
打印結果>>>
查詢"person_id=1": {PERSON_NAME=張三, PERSON_ID=1, TITLE=后端, NICK_NAME=三哥, COMPANY_ID=1, AGE=28}
insert
SqlRunner sqlRunner = new SqlRunner(connection);
String insertUserSql = new SQL()
.INSERT_INTO("person")
.INTO_COLUMNS("person_name, nick_name, title, age, company_id")
.INTO_VALUES("?,?,?,?,?")
.toString();
sqlRunner.setUseGeneratedKeySupport(true);
int result = sqlRunner.insert(insertUserSql, "久九", "小九", "產品助理", 20, 1);
System.out.println("插入對象: " + getPersonById(result));
打印結果>>>
{PERSON_NAME=久九, PERSON_ID=7, TITLE=產品助理, NICK_NAME=小九, COMPANY_ID=1, AGE=20}
測試腳本
init-table.sql
drop table person if exists;
create table person (
person_id int generated by default as identity(start with 1, increment by 1),
person_name varchar(32),
nick_name varchar(32),
title varchar(16),
age int,
company_id int,
primary key(person_id)
);
drop table company if exists;
create table company (
company_id int generated by default as identity,
company_name varchar(32),
city varchar(16),
primary key(company_id)
);
init-data.sql
insert into company(company_id, company_name, city) values (1, 'IBIT科技', '深圳');
insert into company(company_id, company_name, city) values (2, 'IBIT程序猿聯盟', '廣州');
insert into company(company_id, company_name, city) values (3, 'IBIT', '成都');
insert into person(person_name, nick_name, title, age, company_id) values ('張三', '小三', '后端', 28, 1);
insert into person(person_name, nick_name, title, age, company_id) values ('李四', '小四', '前端', 25, 1);
insert into person(person_name, nick_name, title, age, company_id) values ('王五', '小五', 'CTO', 31, 1);
insert into person(person_name, nick_name, title, age, company_id) values ('陸六', '小陸', '產品', 23, 2);
insert into person(person_name, nick_name, title, age, company_id) values ('柒七', '小柒', '測試', 20, 2);
insert into person(person_name, nick_name, title, age, company_id) values ('巴八', '小巴', '運維', 26, 3);
公眾號
喜歡我的文章,請關注公眾號