-
Notifications
You must be signed in to change notification settings - Fork 0
goals
steiner edited this page Nov 4, 2025
·
1 revision

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
email VARCHAR(100),
age INT,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);我们首先要解决的问题,是如何去描述一个 表的结构
我们需要描述
- 表的字段
- 表的键,比如主键,外建,联合主键
- 表的限制,比如
check限制
并通过 类型系统 ,为每种字段 规定 可以注入的数据,同时规定 从各种字段中 读取到的数据类型
我们 假想 有这样一个数据表对象 Users ,
class UsersTable extends IntIdTable("users") {
public CharacterVaryingColumn name = characterVarying("username", 50);
public CharacterVaryingColumn password = characterVarying("password", 50);
public CharacterVaryingColumn email = characterVarying("email", 100).nullable();
public IntColumn age = integer("age").nullable();
public TimestampColumn createTime = timestamp("create_time");
}获取其对象 Users 后,我们要对它进行数据插入操作(暂时先不考虑 事务 这个东西)
Users.insert(statement -> {
statement.set(Users.name, "张三");
statement.set(Users.password, "zhangsan123");
statement.set(Users.email, "zhangsan@example.com");
statement.set(Users.age, 25);
});
Users.insert(statement -> {
statement.set(Users.name, "李四");
statement.set(Users.password, "lisi456");
statement.set(Users.email, "lisi@example.com");
statement.set(Users.age, 30);
});
Users.insert(statement -> {
statement.set(Users.name, "王五");
statement.set(Users.password, "wangwu789");
statement.set(Users.email, "wangwu@example.com");
statement.set(Users.age, 28);
});然后我们查看插入后的数据
Users.selectAll()
.stream()
.forEach(resultRow -> {
for (Column<?> column: Users.columns) { // 遍历每一字段,打印
System.out.println(resultRow.get(column));
}
});我们用以下步骤去实现这个项目
- 描述表的结构
- 描述字段
- 描述 键
- 设置 默认值
- 查询数据
- 字段选择
- 查询子句
- 描述数据库的部分操作
- 创建表
- 修改表
- 删除表
- 插入/修改 数据
- 引入 事务
- 插入 语句
- 修改 语句