官方快速上手文档:

https://javalite.io/activejdbc

https://javalite.io/getting_started

完整介绍:

https://javalite.io/documentation

环境搭建:

1、在数据库中创建该表,注意主键设置为空移除

CREATE TABLE people (
id int(11) NOT NULL auto_increment PRIMARY KEY,
first_name VARCHAR(56) NOT NULL,
last_name VARCHAR(56),
created_at DATETIME,
updated_at DATETIME
);

2、创建一个空的Maven工程,添加必要的包:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.dzz</groupId>
<artifactId>ActiveJDBC</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.javalite</groupId>
<artifactId>activejdbc</artifactId>
<version>2.2</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.javalite</groupId>
<artifactId>activejdbc-instrumentation</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>instrument</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build> </project>

3、编写Model继承类,如果名称不一致,可使用ActiveJDBC提供的table注解标注

package cn.dzz.model;

import org.javalite.activejdbc.Model;
import org.javalite.activejdbc.annotations.Table; @Table("employees")
public class Employee extends Model { }

4、创建连接并执行SQL操作

【注意连接高版本MySQL,com.mysql.cj.jdbc.Driver,连接地址需要加上参数】

package cn.dzz.instance;

import cn.dzz.model.Employee;
import org.javalite.activejdbc.Base; public class ConnectTest { public static void main(String[] args) {
Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3307/devbase", "root", "123456"); Employee e = new Employee();
e.set("first_name", "John");
e.set("last_name", "Doe");
e.saveIt(); // new Employee().set("first_name", "John", "last_name", "Doe").saveIt();
}
}

首次操作一定出现这个问题:

Caused by: activejdbc.InitException: you are trying to work with models, but no models are found. Maybe you have no models in project, or you did not instrument the models. It is expected that you have a file activejdbc_models.properties on classpath

解决参考:

https://www.dazhuanlan.com/2019/12/17/5df8089723b56/#配置参考

通过IDEA找到这个Maven安装的植入插件:

执行一次插件,再次允许即可:

可以看到是插入成功的

API阅读:

单记录查询:

// 子查询? 和对应的条件 ,条件是可变参数,支持多条件
Employee e = Employee.findFirst("first_name = ?", "John");
System.out.println(e); Object first_name = e.get("first_name");
System.out.println(first_name);
Object id = e.get("id");
System.out.println(id);
Object last_name = e.get("last_name");
System.out.println(last_name);

问题在于返回的属性值是一个Object,需要自己转换?

多记录直接调用where方法:

List<Employee> employees = Employee.where("first_name = ?", "John");

更新记录类同JPA,先查再改:

Employee e = Employee.findFirst("first_name = ?", "John");
e.set("last_name", "Steinbeck").saveIt();

删除记录同理:

Employee e = Employee.findFirst("first_name = ?", "John");
e.delete();

也支持类静态方法:

Person.delete("age > ?", "10");

复杂的批处理操作:

PreparedStatement ps = Base.startBatch("insert into people (NAME, LAST_NAME, DOB) values(?, ?, ?)");
Base.addBatch(ps, "Mic", "Jagger", "1962-01-01");
Base.addBatch(ps, "Marilyn", "Monroe", "1932-01-01");
Base.executeBatch(ps);
ps.close();

全删和全找:

Employee.deleteAll();
List<Employee> employees = Employee.findAll();

支持建造者模式方式赋值多个字段:

new Person().set("first_name", "Marilyn").set("last_name", "Monroe").set("dob", "1935-12-06").saveIt();

也可以通过类静态方法:

Person.createIt("first_name", "Marilyn", "last_name", "Monroe", "dob", "1935-12-06");

读取数量不多的数据集:

    List<Map> usersList = Base.findAll("select * from users where company_id = ? ", companyId);
for(Map record: userList){
System.out.println("first_name: " + record.get("first_name"));
System.out.println("last_name: " + record.get("last_name"));
}

百万级数据读取:

Base.find("select first_name, last_name from really_large_table", ....).with(new RowListenerAdapter() {
public void onNext(Map row) {
///write your code here
Object o1 = row.get("first_name");
Object o2 = row.get("last_name");
}
});

时间转换成毫秒值:

Long  lastLoginTime = Convert.toLong(Base.firstCell?("select time from logins  where user_id  ? order by created_at limit 1", 123));

取表的单个列记录:

  List ssns = Base.firstColumn("select ssn from people where first_name = ?", "John");
for(Object ssn: ssns)
System.out.println(ssn);

SETTER & GETTER 包装处理:

public class Person extends Model{
public void setFirstName(String firstName){
set("first_name", firstName);
}
public String getFirstName(){
return getString("first_name");
}
}

所以ActiveJDBC也提供了对应的包装处理,方便开发者直接获取正确的数据类型:

【原始get方法得到的是Object】

String  name = p.getString("name");
Timestamp dob = p.getTimestamp("dob");

文档中提及ActiveJDBC会尽可能的帮你转换类型,根据表设计的字段类型来返回,然而上面的读取并不会这样

如果不行,还可以调用Convert工具类的方法实现转换

http://javalite.github.io/activejdbc/snapshot/org/javalite/common/Convert.html

单复数命名映射约定:

ActiveJDBC的创造者约定:表名称统一使用复数形式,而映射的Java模型类则用单数形式命名

对于工地英语的我来说简直费解,所以创造者又提供了@Table注解,指定表名称即可

@Table("Operator")
public class Operator extends Model{}

【ActiveJdbc】01 入门的更多相关文章

  1. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  2. [译]Vulkan教程(01)入门

    [译]Vulkan教程(01)入门 接下来我将翻译(https://vulkan-tutorial.com)上的Vulkan教程.这可能是我学习Vulkan的最好方式,但不是最理想的方式. 我会用“d ...

  3. Express 教程 01 - 入门教程之经典的Hello World

    目录: 前言 一.Express?纳尼?! 二.开始前的准备工作 三.测试安装之经典的Hello World 四.使用express(1)来生成一个应用程序 五.说明 前言: 本篇文章是建立在Node ...

  4. Laravel5.0学习--01 入门

    本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境 ...

  5. elasticsearch6.7 01.入门指南(2)

    2.安装(略) 默认情况下,elasticsearch 使用端口 9200 来访问它的 REST API.如果有必要,该端口也可以配置 3.探索集群 3.1 The REST API 既然我们已经启动 ...

  6. Java日志 #01# 入门

    很多人在学习完一个东西之后就会忘掉自己作为初学者时的体验.. 例如刚接触git的时候自己也是一头雾水,然后别人问起来,老是会说:xxxx#!@#,就是这么回事儿,有什么不好懂的. 其实从不懂到懂,再到 ...

  7. [freemarker篇]01.入门Freemarker示例

    这今天“弄”军哥的管理系统,里面由涉及到一部分的FreeMarker的知识,并且我那些学生在亚信实习也涉及到这部分的知识,所以想开始总结一些FreeMarker,正好我可开始使用一下Maven,简单的 ...

  8. Redis -- 01 入门

    1. Redis是什么 与memcached 和 couchbase类似,redis是非常快速的基于内存的键值数据库,使用标准c编写,是使用最广泛的缓存中间件.利用Redis提供的五种基本数据类型(S ...

  9. echarts -01 入门

    1.效果图 2. code <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  10. 现代OpenGL教程 01 - 入门指南

    原文链接传送门 译序 早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API.后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起 ...

随机推荐

  1. 一文搞懂 ARM 64 系列: 寄存器

    ARM 64中包含多种寄存器,下面介绍一些常见的寄存器. 1 通用寄存器 ARM 64包含31个64bit寄存器,记为X0~X30. 每一个通用寄存器,它的低32bit都可以被访问,记为W0~W30. ...

  2. .NET5 IIS ASP.NET CORE 部署时 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

    .NET5 IIS ASP.NET CORE 部署时 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure 部署机器只安装了dotnet-hos ...

  3. 微信支付普通商户与AppID账号关联管理-授权

    微信支付普通商户与AppID账号关联管理 二.名词解释 名词 释义 微信支付普通商户 公司企业.政府机关.事业单位.社会组织.个体工商户.个人卖家.小微商户.(微信支付商户接入指引) AppID 已通 ...

  4. 关于 "= default" 和 "= delete" 函数

    在 C++ 11 中,"= default" 和 "= delete" 函数使我们能够显示指定成员函数是否自动生成. 其中,"= delete&quo ...

  5. git客户端安装和使用

    需要安装三个软件 1.git客户端 点击下载 下载完成后一只next就行了. 2.git右键属性的扩展程序 点击下载 下载完成后一只next就行了 3.git中文包 点击下载 下载完成后一只next就 ...

  6. Ansible的常用模块

    目录 ansible常用模块 1. file模块 1.1 file模块的选项 1.2 file模块的使用 1.2.1 使用file模块在远程主机创建文件 1.2.2 创建目录 1.2.3 删除文件/目 ...

  7. Oracle 数据库 命令行安装

    Oracle 数据库 命令行安装 1. 准备工作 关闭 防火墙,关闭 SElinux 2. 安装相关依赖包 yum -y install binutils compat-libcap1 compat- ...

  8. CSS和CSS3(背景,图片,浮动等)

    CSS和CSS3背景图片 CSS的背景,无法伸缩图片. <!DOCTYPE html> <html lang="en"> <head> < ...

  9. .NET 个人博客-首页排版优化

    个人博客-首页排版优化 优化计划 置顶3个且可滚动或切换 推荐改为4个,然后新增历史文章,将推荐的加载更多放入历史文章,按文章发布时间降序排列. 标签功能,可以为文章贴上标签 推荐点赞功能 本篇文章优 ...

  10. Kubernetes 存储资源 PV、PVC 和StorageClass详解

    一.存储机制介绍 在 Kubernetes 中,存储资源和计算资源(CPU.Memory)同样重要,Kubernetes 为了能让管理员方便管理集群中的存储资源,同时也为了让使用者使用存储更加方便,所 ...