sqlaction — Инструмент для работы с базой данных на основе автоматически сгенерированного кода JDBC.
Основные преимущества sqlaction:
Пример для MySQL
ddl.sql
CREATE TABLE `sqlaction_demo` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор',
`name` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT 'Название',
`address` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'Адрес',
PRIMARY KEY (`id`),
KEY `sqlaction_demo` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
Добавьте JAR "mysql-connector-java-X.Y.Z.jar".
Создайте dbserver.conf.json
в папке Java проекта.
{
"driver": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://127.0.0.1:3306/calvindb?serverTimezone=GMT",
"user": "calvin",
"pwd": "calvin"
}
Создайте sqlaction.conf.json
в папке Java проекта.
{
"database": "calvindb",
"tables": [
{
"table": "sqlaction_demo",
"sqlactions": [
"SELECT * FROM sqlaction_demo",
"SELECT * FROM sqlaction_demo WHERE name = ?",
"INSERT INTO sqlaction_demo",
"UPDATE sqlaction_demo SET address = ? WHERE name = ?",
"DELETE FROM sqlaction_demo WHERE name = ?"
]
}
],
"javaPackage": "xyz.calvinwilliams.sqlaction"
}
```## 2.3. Выполнение sqlaction
pp.bat```
java -Dfile.encoding=UTF-8 -classpath "D:\Work\mysql-connector-java-8.0.15\mysql-connector-java-8.0.15.jar;%USERPROFILE%\.m2\repository\xyz\calvinwilliams\okjson\0.0.9.0\okjson-0.0.9.0.jar;%USERPROFILE%\.m2\repository\xyz\calvinwilliams\sqlaction\0.2.7.0\sqlaction-0.2.7.0.jar" xyz.calvinwilliams.sqlaction.SqlActionGencode
пауза
```Выполнение pp.bat
```markdown
//////////////////////////////////////////////////////////////////////////////
/// sqlaction v0.2.9.0
/// Copyright © calvin <calvinwilliams@163.com, calvinwilliams@gmail.com>
//////////////////////////////////////////////////////////////////////////////
--- dbserverConf ---
dbms[mysql]
driver[com.mysql.jdbc.Driver]
url[jdbc:mysql://127.0.0.1:3306/calvindb?serverTimezone=GMT]
user[calvin]
pwd[calvin]
--- sqlactionConf ---
database[calvindb]
table[sqlaction_demo]
sqlaction[SELECT * FROM sqlaction_demo]
sqlaction[SELECT * FROM sqlaction_demo WHERE name=?]
sqlaction[INSERT INTO sqlaction_demo]
sqlaction[UPDATE sqlaction_demo SET address=? WHERE name=? @@METHOD(updateAddressByName)]
sqlaction[DELETE FROM sqlaction_demo WHERE name=?]
SqlActionTable.getTableInDatabase[sqlaction_demo] ...
...
*** Уведомление: Создание файла SqlactionDemoSAO.java завершено!!!
Автоматическое создание кода в
SqlactionDemoSAO.java
// Этот файл сгенерирован sqlaction v0.2.9.0
// ВНИМАНИЕ: НЕ МЕНЯЙТЕ ЭТОТ ФАЙЛ
package xyz.calvinwilliams.sqlaction;
import java.math.*;
import java.util.*;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class SqlactionDemoSAO {
int id; // ID // Первичный ключ
String name; // Имя
String address; // Адрес
int _count_; // Определение для 'SELECT COUNT(*)'
``````java
// SELECT * FROM sqlaction_demo
public static int SELECT_ALL_FROM_sqlaction_demo(Connection conn, List<SqlactionDemoSAU> sqlactionDemoListForSelectOutput) throws Exception {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM sqlaction_demo");
while(rs.next()) {
SqlactionDemoSAU sqlactionDemo = new SqlactionDemoSAU();
sqlactionDemo.id = rs.getInt(1);
sqlactionDemo.name = rs.getString(2);
sqlactionDemo.address = rs.getString(3);
sqlactionDemoListForSelectOutput.add(sqlactionDemo);
}
rs.close();
stmt.close();
return sqlactionDemoListForSelectOutput.size();
}
// SELECT * FROM sqlaction_demo WHERE name=?
public static int SELECT_ALL_FROM_sqlaction_demo_WHERE_name_E_(Connection conn, List<SqlactionDemoSAU> sqlactionDemoListForSelectOutput, String _1_SqlactionDemoSAU_name) throws Exception {
PreparedStatement prestmt = conn.prepareStatement("SELECT * FROM sqlaction_demo WHERE name=?");
prestmt.setString(1, _1_SqlactionDemoSAU_name);
ResultSet rs = prestmt.executeQuery();
while(rs.next()) {
SqlactionDemoSAU sqlactionDemo = new SqlactionDemoSAU();
sqlactionDemo.id = rs.getInt(1);
sqlactionDemo.name = rs.getString(2);
sqlactionDemo.address = rs.getString(3);
sqlactionDemoListForSelectOutput.add(sqlactionDemo);
}
rs.close();
prestmt.close();
return sqlactionDemoListForSelectOutput.size();
}
``````markdown
## Описание метода
Метод `SELECT_ALL_FROM_sqlaction_demo_WHERE_name_E_` выполняет запрос к базе данных, выбирающий все записи из таблицы `sqlaction_demo`, где значение поля `name` равно переданному значению.
### Параметры
- **conn**: Подключение к базе данных.
- **sqlactionDemoListForSelectOutput**: Список объектов типа `SqlactionDemoSAU`, который будет заполнен полученными данными.
- **_1_SqlactionDemoSAU_name**: Значение поля `name`, которое используется в условии выборки.
### Возвращаемое значение
Количество записей, найденных в результате выполнения запроса.
### Пример использования
```java
try {
int count = SELECT_ALL_FROM_sqlaction_demo_WHERE_name_E_(connection, list, "exampleName");
System.out.println(count + " records found.");
} catch (Exception e) {
e.printStackTrace();
}
// Вставка в sqlaction_demo
public static int ВСТАВКА_В_sqlaction_demo(Connection conn, SqlactionDemoSAU sqlactionDemo) throws Exception {
PreparedStatement prestmt;
Statement stmt;
ResultSet rs;
prestmt = conn.prepareStatement("INSERT INTO sqlaction_demo (name, address) VALUES (?, ?)");
prestmt.setString(1, sqlactionDemo.name);
prestmt.setString(2, sqlactionDemo.address);
int count = prestmt.executeUpdate();
prestmt.close();
return count;
}
// Обновление sqlaction_demo SET address=? WHERE name=?
public static int ОБНОВЛЕНИЕ_sqlaction_demo_SET_address_E_WHERE_name_E_(Connection conn, String _1_address_ForSetInput, String _1_name_ForWhereInput) throws Exception {
PreparedStatement prestmt = conn.prepareStatement("UPDATE sqlaction_demo SET address=? WHERE name=?");
prestmt.setString(1, _1_address_ForSetInput);
prestmt.setString(2, _1_name_ForWhereInput);
int count = prestmt.executeUpdate();
prestmt.close();
return count;
}
// Подключение к базе данных
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/calvindb?serverTimezone=GMT", "calvin", "calvin");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.setAutoCommit(false);
// Удаление записей с указанным именем
nret = SqlactionDemoSAU.УДАЛЕНИЕ_ИЗ_sqlaction_demo_WHERE_name_E_("Calvin");
if (nret < 0) {
System.out.println("SqlactionDemoSAU.УДАЛЕНИЕ_ИЗ_sqlaction_demo_WHERE_name_E_ failed [" + nret + "]");
conn.rollback();
return;
} else {
System.out.println("SqlactionDemoSAU.УДАЛЕНИЕ_ИЗ_sqlaction_demo_WHERE_name_E_ ok, строки [" + nret + "] затронуты");
}
}
``` // Вставка записи
sqlactionDemo = new SqlactionDemoSAU();
sqlactionDemo.name = "Calvin";
sqlactionDemo.address = "My address";
nret = SqlactionDemoSAU.INSERT_INTO_sqlaction_demo(conn, sqlactionDemo);
if (nret < 0) {
System.out.println("SqlactionDemoSAU.INSERT_INTO_sqlaction_demo failed [" + nret + "]");
conn.rollback();
return;
} else {
System.out.println("SqlactionDemoSAU.INSERT_INTO_sqlaction_demo ok");
}```markdown
## 2.5. Выполнение вашего приложения
```
SqlactionDemoSAU.DELETE_FROM_sqlaction_demo_WHERE_name_E_ ok, строки[1] затронуты
SqlactionDemoSAU.INSERT_INTO_sqlaction_demo ok
SqlactionDemoSAU.UPDATE_sqlaction_demo_SET_address_E_WHERE_name_E_ ok, строки[1] затронуты
SqlactionDemoSAO.SELECT_ALL_FROM_sqlaction_demo ok
id[20] имя[Калвин] адрес[Мой адрес 2]
```
# 3. Справочник
## 3.1. Процесс выполнения
```
sqlaction
dbserver.conf.json/sqlaction.conf.json ---------> XxxSao.java/XxxSau.java --\
---> App.jar
App.java --/
```
# 4. Различия нагрузки между MyBatis и sqlaction
```| | |
|---|---|
| **MyBatis** | **sqlaction** |
| Конфигурация проекта один раз | Конфигурация проекта один раз |
| Настройка соединения с базой данных <img src="mybatis-config.xml.png" /> | Настройка соединения с базой данных <img src="dbserver.conf.json.png" /> |
| Настройка каждого столбца | Настройка каждого столбца |
| Настройка маппера таблицы <img src="mybatis-mapper.xml.png" /> | Настройка действия таблицы <img src="sqlaction.conf.json.png" /> |
| Класс сущности таблицы <img src="SqlactionBenchmarkSAO.java.png" /> | Автоматическое создание sqlaction |
| Интерфейс класса таблицы <img src="SqlactionBenchmarkSAOMapper.java.png" /> | Нет необходимости |
| Нет необходимости | Выполнение команды sqlaction? <br /> java -Dfile.encoding=UTF-8 -classpath "D:\Work\sqlaction\sqlaction.jar;D:\Work\mysql-connector-java-8.0.15\mysql-connector-java-8.0.15.jar" xyz.calvinwilliams.sqlaction.gencode.SqlActionGencode |# 5. Различия в тестировании производительности между MyBatis и sqlaction
Процессор: Intel Core i5-7500 3.4GHz
Память: 16 ГБ
Операционная система: Windows 10
IDE Java: Eclipse 2018-12
База данных: MySQL 8.0.15 Community Server
Адрес подключения к базе данных: 127.0.0.1:3306
DDL
```
CREATE TABLE `sqlaction_benchmark` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер',
`name` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT 'Английское имя',
`name_cn` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT 'Китайское имя',
`salary` decimal(12,2) NOT NULL COMMENT 'Зарплата',
`birthday` date NOT NULL COMMENT 'Дата рождения',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=42332 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
```
## 5.1. Подготовка sqlaction
Создайте `dbserver.conf.json`
```json
{
"driver": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://127.0.0.1:3306/calvindb?serverTimezone=GMT",
"user": "calvin",
"pwd": "calvin"
}
```
Создайте `sqlaction.conf.json`
```json
{
"database": "calvindb",
"tables": [
{
"table": "sqlaction_benchmark",
"sqlactions": [
"INSERT INTO sqlaction_benchmark",
"UPDATE sqlaction_benchmark SET salary=? WHERE name=?" ,
"SELECT * FROM sqlaction_benchmark WHERE name=?" ,
"SELECT * FROM sqlaction_benchmark",
"DELETE FROM sqlaction_benchmark WHERE name=?" ,
"DELETE FROM sqlaction_benchmark"
]
}
],
"javaPackage": "xyz.calvinwilliams.sqlaction.benchmark"
}
``````java
/*
* sqlaction - SQL action object auto-generate code tool based on JDBC for Java
* author : calvin
* email : calvinwilliams@163.com
*
* See the file LICENSE in base directory.
*/
package xyz.calvinwilliams.sqlaction.benchmark;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class SqlActionBenchmarkCrud {
```
```java
public static void main(String[] args) {
Connection conn = null ;
SqlactionBenchmarkSAO sqlactionBenchmark ;
List<SqlactionBenchmarkSAO> sqlactionBenchmarkList ;
long beginMillisSecondStamp ;
long endMillisSecondStamp ;
double elapsedSecond ;
long i, j, k ;
long count, count2, count3 ;
int rows = 0 ;
// Подключение к базе данных
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/calvindb?serverTimezone=GMT", "calvin", "calvin") ;
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
``` try {
conn.setAutoCommit(false);
sqlactionBenchmark = new SqlactionBenchmarkSAO();
sqlactionBenchmark.name = "Calvin";
sqlactionBenchmark.nameCn = "Калвин";
sqlactionBenchmark.salary = new BigDecimal(0);
long time = System.currentTimeMillis();
sqlactionBenchmark.birthday = new java.sql.Date(time);
count = 500;
count2 = 5;
count3 = 1000;
rows = SqlactionBenchmarkSAO.DELETE_FROM_sqlaction_benchmark(conn);
conn.commit();
// Бенчмарк для вставки
beginMillisSecondstamp = System.currentTimeMillis();
for (i = 0; i < count; i++) {
sqlactionBenchmark.name = "Calvin" + i;
sqlactionBenchmark.nameCn = "Калвин" + i;
rows = SqlactionBenchmarkSAO.INSERT_INTO_sqlaction_benchmark(conn, sqlactionBenchmark);
if (rows != 1) {
System.out.println("SqlactionBenchmarkSAO.INSERT_INTO_sqlaction_benchmark failed[" + rows + "]");
return;
}
if (i % 10 == 0) {
conn.commit();
}
}
conn.commit();
endMillisSecondstamp = System.currentTimeMillis();
elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println("Все операции SQL вставки завершены, количество записей [" + count + "] затраченное время [" + elapsedSecond + "] секунд");
} catch (Exception e) {
e.printStackTrace();
}```markdown
// Бенчмарк для обновления
beginMillisSecondstamp = System.currentTimeMillis();
for (i = 0; i < count; i++) {
rows = SqlactionBenchmarkSAO.UPDATE_sqlaction_benchmark_SET_salary_E_WHERE_name_E_(conn, new BigDecimal(i), "Calvin" + i);
if (rows != 1) {
System.out.println("SqlactionBenchmarkSAO.UPDATE_sqlaction_benchmark_SET_salary_E_WHERE_name_E_ failed[" + rows + "]");
return;
}
if (i % 10 == 0) {
conn.commit();
}
}
```
Продолжение кода:
```java
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
``````markdown
}
}
conn.commit();
endMillisSecondstamp = System.currentTimeMillis();
elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println("Все операции SQL обновления завершены, количество записей [" + count + "] затраченное время [" + elapsedSecond + "] секунд");
}
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
```markdown
}
conn.commit();
long endMillisSecondstamp = System.currentTimeMillis();
double elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println("Обновление всех записей завершено, количество обновлённых записей [" + count + "] затраченное время [" + elapsedSecond + "] секунд");
//benchmark для SELECT ... WHERE ...
beginMillisSecondstamp = System.currentTimeMillis();
for (int j = 0; j < count2; j++) {
for (int i = 0; i < count; i++) {
sqlactionBenchmarkList = new LinkedList<SqlactionBenchmarkSAO>();
int rows = SqlactionBenchmarkSAO.SELECT_ALL_FROM_sqlaction_benchmark_WHERE_name_E(conn, sqlactionBenchmarkList, "Calvin" + i);
if (rows != 1) {
System.out.println("SqlactionBenchmarkSAO.SELECT_ALL_FROM_sqlaction_benchmark_WHERE_name_E failed[" + rows + "]");
return;
}
}
}
endMillisSecondstamp = System.currentTimeMillis();
elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println("Запрос SELECT WHERE выполнен, количество запросов [" + count2 + "] количество записей [" + count + "] затраченное время [" + elapsedSecond + "] секунд");
//benchmark для SELECT
beginMillisSecondstamp = System.currentTimeMillis();
for (int k = 0; k < count3; k++) {
sqlactionBenchmarkList = new LinkedList<SqlactionBenchmarkSAO>();
int rows = SqlactionBenchmarkSAO.SELECT_ALL_FROM_sqlaction_benchmark(conn, sqlactionBenchmarkList);
if (rows != count) {
System.out.println("SqlactionBenchmarkSAO.");
``````markdown
SELECT_ALL_FROM_sqlaction_benchmark failed[" + rows + "]";
return;
}
}
endMillisSecondstamp = System.currentTimeMillis();
elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println("Запрос SELECT в список выполнен, количество запросов [" + count3 + "] затраченное время [" + elapsedSecond + "] секунд");
//benchmark для DELETE
beginMillisSecondstamp = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
int rows = SqlactionBenchmarkSAO.DELETE_FROM_sqlaction_benchmark_WHERE_name_E(conn, "Calvin" + i);
if (rows != 1) {
System.out.println("SqlactionBenchmarkSAO.DELETE_FROM_sqlaction_benchmark_WHERE_name_E failed[" + rows + "]");
return;
}
if (i % 10 == 0) {
conn.commit();
}
}
conn.commit();
endMillisSecondstamp = System.currentTimeMillis();
elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println(
```
```markdown
"Удаление всех записей выполнено, количество удалённых записей [" + count + "] затраченное время [" + elpaseSecond + "] секунд");
```
```markdown
println("Все операции SQL с действием DELETE завершены, количество [" + count + "] затрат времени [" + elpaseSecond + "] секунд");
} catch (Exception e) {
e.printStackTrace();
try {
conn.rollback();
} catch (Exception e2) {
e.printStackTrace();
return;
}
}
finally {
try {
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
return;
}
}
return;
}
```
### 5.2. Подготовка MyBatis
Создайте `mybatis-config.xml`
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="false" />
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/calvindb?serverTimezone=GMT" />
<property name="username" value="calvin" />
<property name="password" value="calvin" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis-mapper.xml" />
</mappers>
</configuration>
```
Создайте `mybatis-mapper.xml`
``````xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="xyz.calvinwilliams.mybatis.benchmark.SqlactionBenchmarkSAOMapper">
<insert id="insertOne" parameterType="xyz.calvinwilliams.mybatis.benchmark.SqlactionBenchmarkSAO">
INSERT INTO sqlaction_benchmark (name, name_cn, salary, birthday) VALUES(#{name}, #{name_cn}, #{salary}, #{birthday})
</insert>
<update id="updateOneByName" parameterType="xyz.calvinwilliams.mybatis.benchmark.SqlactionBenchmarkSAO">
UPDATE sqlaction_benchmark SET salary = #{salary} WHERE name = #{name}
</update>
<select id="selectOneByName" parameterType="java.lang.String" resultType="xyz.calvinwilliams.mybatis.benchmark.SqlactionBenchmarkSAO" flushCache="true" useCache="false">
SELECT * FROM sqlaction_benchmark WHERE name = #{name}
</select>
<select id="selectAll" resultType="xyz.calvinwilliams.mybatis.benchmark.SqlactionBenchmarkSAO" flushCache="true" useCache="false">
SELECT * FROM sqlaction_benchmark
</select>
<delete id="deleteOneByName" parameterType="java.lang.String">
DELETE FROM sqlaction_benchmark WHERE name = #{name}
</delete>
<delete id="deleteAll">
DELETE FROM sqlaction_benchmark
</delete>
</mapper>
``````markdown
## Класс `SqlactionBenchmarkSAO`
```java
public class SqlactionBenchmarkSAO {
int id;
String name;
String name_cn;
BigDecimal salary;
java.sql.Date birthday;
int _count_; // Определено для 'SELECT COUNT(*)'
}
```
### Создайте `SqlactionBenchmarkSAOMapper.java`
```java
package xyz.calvinwilliams.mybatis.benchmark;
import java.util.*;
public interface SqlactionBenchmarkSAOMapper {
public void insertOne(SqlactionBenchmarkSAO sqlactionBenchmark);
public void updateOneByName(SqlactionBenchmarkSAO sqlactionBenchmark);
public SqlactionBenchmarkSAO selectOneByName(String name);
public List<SqlactionBenchmarkSAO> selectAll();
public void deleteOneByName(String name);
public void deleteAll();
}
```
### Создайте `MyBatisBenchmarkCrud.java`
```java
/*
* sqlaction - Автоматически сгенерированный объект SQL действия на основе JDBC для Java
* автор : calvin
* email : calvinwilliams@163.com
*
* Увидеть файл LICENSE в базовой директории.
*/
package xyz.calvinwilliams.mybatis.benchmark;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import xyz.calvinwilliams.mybatis.benchmark.SqlactionBenchmarkSAO;
import xyz.calvinwilliams.mybatis.benchmark.SqlactionBenchmarkSAOMapper;
public class MyBatisBenchmarkCrud {
```
```java
public static void main(String[] args) {
SqlSession session = null;
SqlactionBenchmarkSAOMapper mapper;
List<SqlactionBenchmarkSAO> sqlactionBenchmarkList;
long beginMillisSecondstamp;
long endMillisSecondstamp;
double elapsedSecond;
long i, j, k;
long count, count2, count3;
try {
FileInputStream in = new FileInputStream("src/main/java/mybatis-config.xml");
session = new SqlSessionFactoryBuilder().build(in).openSession();
``` SqlactionBenchmarkSAO sqlactionBenchmark = new SqlactionBenchmarkSAO();
sqlactionBenchmark.id = 1;
sqlactionBenchmark.name = "Calvin";
sqlactionBenchmark.name_cn = "Калвин";
sqlactionBenchmark.salary = new BigDecimal(0);
long time = System.currentTimeMillis();
sqlactionBenchmark.birthday = new java.sql.Date(time);
count = 500;
count2 = 5;
count3 = 1000;
mapper = session.getMapper(SqlactionBenchmarkSAOMapper.class);
mapper.deleteAll();
session.commit();
// тестирование вставки
beginMillisSecondstamp = System.currentTimeMillis();
for (i = 0; i < count; i++) {
sqlactionBenchmark.name = "Calvin" + i;
sqlactionBenchmark.name_cn = "Калвин" + i;
mapper.insertOne(sqlactionBenchmark);
if (i % 10 == 0) {
session.commit();
}
}
session.commit();
endMillisSecondstamp = System.currentTimeMillis();
elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println("Все операции MyBatis INSERT завершены, количество [" + count + "] затраченное время [" + elapsedSecond + "] сек");
// тестирование обновления
beginMillisSecondstamp = System.currentTimeMillis();
for (i = 0; i < count; i++) {
sqlactionBenchmark.name = "Calvin" + i;
sqlactionBenchmark.salary = new BigDecimal(i);
mapper.updateOneByName(sqlactionBenchmark);
if (i % 10 == 0) {
session.commit();
}
}
session.commit();
endMillisSecondstamp = System.currentTimeMillis();
elapsedSecond = (endMillisSecondstamp - beginMillisSecondstamp) / 1000.0;
System.out.println("Все операции MyBatis UPDATE завершены, количество [" + count + "] затраченное время [" + elapsedSecond + "] сек"); // тестирование выборки
beginMillisSecondstamp = System.currentTimeMillis();
for (j = 0; j < count2; j++) {
for (i = 0; i < count; i++) {
sqlactionBenchmark = mapper.;
sqlActionBenchmark = selectOneByName(sqlactionBenchmark.name);
if (sqlActionBenchmark == null) {
System.out.println("mapper.selectOneByName failed");
return;
}
}
}```md
## 5.3. Пример
ЗАПИСЬ таблицы для 500 записей
ОБНОВЛЕНИЕ таблицы для 500 записей
SELECT таблицы для 500*5 записей
SELECT таблицы в список для 1000 записей
УДАЛЕНИЕ таблицы для 500 записей
## 5.4. Результат
Все действия SQL записи завершены, количество [500], затраченное время [4.742] с Все действия SQL обновление WHERE завершены, количество [500], затраченное время [5.912] с Все действия SQL выборка WHERE завершены, количество [5], количество [500], затраченное время [0.985] с Все действия SQL выборка в список завершены, количество [1000], затраченное время [1.172] с Все действия SQL удаление WHERE завершены, количество [500], затраченное время [5.001] с
Все действия MyBatis Обновление Where завершены, количество [500], затраченное время [6.921]с
Все действия MyBatis Select Where завершены, количество2 [5], количество [500], затраченное время [1.239]с
Все действия MyBatis Select в список завершены, количество3 [1000], затраченное время [1.792]с
Все действия MyBatis Удаление Where завершены, количество [500], затраченное время [5.382]с
Все действия SQL Запись завершены, количество [500], затраченное время [5.392]с
Все действия SQL Обновление Where завершены, количество [500], затраченное время [5.821]с
Все действия SQL Select Where завершены, количество2 [5], количество [500], затраченное время [0.952]с
Все действия SQL Select в список завершены, количество3 [1000], затраченное время [1.15]с
Все действия SQL Удаление Where завершены, количество [500], затраченное время [5.509]с
Все действия MyBatis Запись завершены, количество [500], затраченное время [6.066]с
Все действия MyBatis Обновление Where завершены, количество [500], затраченное время [6.946]с
Все действия MyBatis Select Where завершены, количество2 [5], количество [500], затраченное время [1.183]с
Все действия MyBatis Select в список завершены, количество3 [1000], затраченное время [1.804]с
Все действия MyBatis Удаление Where завершены, количество [500], затраченное время [5.958]сВсе действия SQL записи завершены, количество [500], затраченное время [5.236] с
Все действия SQL обновление WHERE завершены, количество [500], затраченное время [5.84] с
Все действия SQL выборка WHERE завершены, количество2 [5], количество [500], затраченное время [0.985] с
Все действия SQL выборка в список завершены, количество3 [1000], затраченное время [1.222] с
Все действия SQL удаление WHERE завершены, количество [500], затраченное время [4.91] сВсе действия MyBatis записи завершены, количество [500], затраченное время [5.448] с
Все действия MyBatis обновления WHERE завершены, количество [500], затраченное время [7.287] с
Все действия MyBatis выборки WHERE завершены, количество [5], количество [500], затраченное время [1.149] с
Все действия MyBatis выборки в список завершены, количество [1000], затраченное время [1.873] с
Все действия MyBatis удаления WHERE завершены, количество [500], затраченное время [6.035] с
`sqlaction` работает быстрее на 20% чем `MyBatis`
# 6. TODO
1. Eclipse плагин для выполнения sqlaction
1. Поддержка кэша
1. Оптимизация под Oracle
# 7. Об проекте
Исходный код доступен по адресам: [gitee](https://gitee.com/calvinwilliams/sqlaction), [github](https://github.com/calvinwilliams/sqlaction)
Apache Maven
```xml
<dependency>
<groupId>xyz.calvinwilliams</groupId>
<artifactId>sqlaction</artifactId>
<version>0.2.9.0</version>
</dependency>
Контактная информация: netease или Gmail
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )