- OpenTCS学习记录之三
- 一、目标
- 1.1 背景
- 1.2 环境准备
- 1.3 代码实现
- 二、实现效果
- 三、MyBatis Gradle 实现
目标:编写连接器,实现在 OpenTCS 中的 CRUD 系列操作
1.1 背景1.习惯于 SpringBoot 的 Maven + MyBatis + Mapper 的集成环境,换了个 Gradle 的构建工具,需要从0开始构建数据库连接。最初 Java 项目连接数据库的方式,纯代码实现,只需引入 mysql 的驱动 jar 即可。
2.本篇计划采用两种方式:
①原生代码直接连接数据库,使用时 getConnection 获得连接;
②通过 mybatis 的方式结合 gradle 构建,使用时获取 SqlSessionFactory 。
1.Gradle 引入mysql 驱动
dependencies {
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.26'
}
1.3 代码实现
1.创建连接数据库的工具类
package org.opentcs.kernel.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
private ConnectionFactory() {
throw new UnsupportedOperationException();
}
public static Connection getConnection() {
Connection connection = null;
String driver = "mysql";
String dataBaseAddress = "127.0.0.1:3306";
String dataBaseName = "test";
String user = "root";
String password = "password";
StringBuilder sb = new StringBuilder("jdbc:")
.append(driver).append("://")
.append(dataBaseAddress).append("/")
.append(dataBaseName);
String connectionUrl = sb.toString();
try {
connection = DriverManager.getConnection(connectionUrl, user, password);
System.out.println("connected success");
} catch (SQLException e) {
System.out.println("connected error");
throw new RuntimeException();
}
return connection;
}
}
2.测试连接
package org.opentcs.kernel.database;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestMain {
public static void create() {
try (Connection conn = ConnectionFactory.getConnection()) {
String sql = "select * from sys_vehicle";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet r = stmt.executeQuery();
System.out.println("*********** 读库 ********************");
if (r.next()) {
String inner_id = r.getString("inner_id");
String name = r.getString("name");
System.out.println("inner_id:" + inner_id + ";name:" + name + "");
}
} catch (SQLException e) {
System.out.println("failed");
e.printStackTrace();
}
}
public static void main(String[] args) {
TestMain.create();
}
}
二、实现效果
1.原生方式
2.mybatis 方式
1.引入需要用到的依赖
// https://mvnrepository.com/artifact/org.apache.ibatis/ibatis-core implementation group: 'org.apache.ibatis', name: 'ibatis-core', version: '3.0' // https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core implementation group: 'org.mybatis.generator', name: 'mybatis-generator-core', version: '1.3.7' // https://mvnrepository.com/artifact/mysql/mysql-connector-java implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.11' // https://mvnrepository.com/artifact/tk.mybatis/mapper implementation group: 'tk.mybatis', name: 'mapper', version: '4.0.4'
注意:针对以上依赖需要修改如下
mybatisGenerator 'org.mybatis.generator:mybatis-generator-core:1.3.7' mybatisGenerator 'mysql:mysql-connector-java:5.1.26' mybatisGenerator 'tk.mybatis:mapper:4.0.4' implementation group: 'org.apache.ibatis', name: 'ibatis-core', version: '3.0'
2.配置 RunKernel
Paths.get(System.getProperty("opentcs.base", "."),
"config",
"config.properties")
.toAbsolutePath()
3.创建配置文件
① config.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC #?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=UTC jdbc.username=root jdbc.password=password jdbc.driverClassName = com.mysql.jdbc.Driver #mybatis-generator u53C2u6570 # u751Fu6210u5B9Eu4F53u7C7Bu6240u5728u7684u5305 package.model= org.opentcs.kernel.model # u751Fu6210 mapper u7C7Bu6240u5728u7684u5305 package.mapper=org.opentcs.kernel.mapper # u751Fu6210 mapper xml u6587u4EF6u6240u5728u7684u5305uFF0Cu9ED8u8BA4u5B58u50A8u5728 resources u76EEu5F55u4E0B package.xml=mybatis
② generatorConfig.xml
特别说明,以上只是实现,通过运行generator 后生成代码(根据数据库配置)
如何才能通过读取配置文件,获取数据库连接对象,从而将openTCS 中的数据通过数据库连接器进行入库
1.目录结构
 throws IOException {
String resource = "mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
System.out.println(e.getMessage());
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession Session = sqlSessionFactory.openSession();
List getUserList = Session.selectList("getUserList");
for (Vehicle vehicle : getUserList) {
System.out.println("innerId:"+vehicle.getInner_id()+";name:"+vehicle.getName());
}
}
}



