1 前言ObjectiveSQL 是一个JAVA ORM 框架,它不仅是Active Record 模式在Java 中的应用,同时还针对复杂SQL 编程提供近乎完美的解决方案,使得Java 代码与SQL 语句有机的结合,改变了传统SQL 的编程模型(以字符串拼接为主的编程模型) 。
ObjectiveSQL 项目分为两部分:一部分是运行期Maven 依赖 objective-sql 或 objsql-springboot,主要实现了基础的ORM 特性和SQL 编程模型,另一部分是IntelliJ IDEA 插件,兼容Java 运算符重载和动态代码提示 。
文章插图
ObjectiveSQL 主要解决:
- 动态代码生成:基于领域模型(Domain Model),自动生成简单SQL 编程代码,使应用系统开发只关注自身的业务特性,提升开发效率
- 可编程SQL:将SQL 中的控制原语、谓词、函数以及过程化逻辑等抽象为Java 中的高级类型,与Java 融为一体,使得SQL 成为真正过程化、逻辑型编程语言,可封装、可复用以及单元测试
- 表达式语法一致性:Java 语法与SQL 语法等价替换,包括:数学计算、函数调用、比较与逻辑计算表达式,Java 表达式可以直接转换为SQL 表达式 。
2.2 Maven 集成独立应用程序,请将下列代码添加至dependencies:
<!-- In standalone --><dependency><groupId>com.github.braisdom</groupId><artifactId>objective-sql</artifactId><version>{objsql.version}</version></dependency>
Spring Boot 集成项目,请将下列代码添加至dependencies:<!-- In Spring Boot, you need add spring-jdbc dependency before --><dependency><groupId>com.github.braisdom</groupId><artifactId>objsql-springboot</artifactId><version>{objsql.version}</version></dependency>
最新版本请访问 ObjectiveSQL,ObjSqlSpringBoot2.3 Maven Compiler 参数配置请将下列代码添加至pom.xml 中的 <build> / <plugins> 结点下:
<plugin><groupId>org.Apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>8</source><target>8</target><encoding>UTF-8</encoding><compilerArgs><arg>-Xplugin:JavaOO</arg></compilerArgs><annotationProcessorPaths><path><groupId>com.github.braisdom</groupId><artifactId>objective-sql</artifactId><version>${objsql.version}</version></path></annotationProcessorPaths></configuration></plugin>
3 数据库连接注入3.1 独立应用系统以MySQL 为例,基于 ConnectionFactory 构造数据连接获取逻辑,并将其注入Databases 。private static class MySQLConnectionFactory implements ConnectionFactory {@Overridepublic Connection getConnection(String dataSourceName) throws SQLException {try {String url = "jdbc:mysql://localhost:4406/objective_sql";String user = "root";String password = "******";return DriverManager.getConnection(url, user, password);} catch (SQLException e) {throw e;} catch (Exception e) {throw new IllegalStateException(e.getMessage(), e);}}}Databases.installConnectionFactory(new MySQLConnectionFactory());
getConnection 方法中的的 dataSourceName 参数仅在多数据源的场景下使用,getConnection 方法可以根据不同的 dataSourceName 返回不同的数据库连接,其它场景下可以忽略该参数 。3.2 集成Spring Boot应用系统基于Spring Boot 框架开发时,无需手动注入数据源,请按下列方法进行配置即可:
spring:profiles:name: objective-sql-exampleactive: developmentdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:4406/objective_sqlusername: rootpassword: ******hikari:idle-timeout: 10000maximum-pool-size: 10minimum-idle: 5pool-name: Master# Configurations for multiple databasesextensions:# The name of data source, which will match with @DomainModel definitionslave:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:4406/objective_sqlusername: rootpassword: ******hikari:idle-timeout: 10000maximum-pool-size: 10minimum-idle: 5pool-name: Slave
其中 extensions 标记仅当多数据源时需要配置,而slave 作为数据源名称,应该与DomainModel 中定义的数据源名称匹配,或者通过DomainModelDescriptro 中动态数据源名称匹配 。4 简单SQL 编程指南ObjectiveSQL 提供的简单SQL 编程主要针对单表的相关SQL 使用,通过动态生成的Java API 为应用系统的开发提供便捷的开发体验 。
推荐阅读
- Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架
- Java高级用法,写个代理侵入你 ?
- 七种能开运、旺财的花草
- Android开发:当前项目以Module形式引用别的项目的步骤
- Linux内核:虚拟地址到物理地址,是什么时候开始映射
- 阿里架构师整理的 Netty 学习笔记之:Java NIO 网络编程
- Javascript的New、Apply、Bind、Call知多少
- 专门针对chrome谷歌浏览器而开发的一款访问插件
- 纯前端生成设置头像 - 基于Vue3、Ts、Vite
- 冬藏是立冬还是冬至?