在这篇之前已经介绍了如何搭建环境以及编译器自动生成的文件的作用,接下来则介绍对数据库的基本怎删改查操作。
首先声明一个DSLContext:
private DSLContext dslContext;
建立一个数据库连接,并且在构造函数里赋值给DSLContext,进行初始化:
private DSLContext getDSLContext() {
try {
//url, user, password替换
Connection connection =
DriverManager.getConnection(url, user,password);
return DSL.using(connection, SQLDialect.POSTGRES);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//构造函数
public Controller(){
this.dslContext = getDSLContext();
}
对数据表重命名使用如下代码,即将Users表重命名为u:
com.generator.tables.Users u = com.generator.tables.Users.USERS.as("u");
新增一条数据:
dslContext.insertInto(u).columns(u.FIRSTNAME,u.GENDER,u.AGE,u.CITY,u.PHONENUMBER,u.PROVINCE,u.SECONDNAME)
.values(users.getFirstname(),users.getGender(),users.getAge(),users.getCity(),users.getPhonenumber(),users.getProvince(),users.getSecondname())
.execute();
整体语法 insertInto(表名).columns(列名).values(对应列的值).execute();
根据id查询一条可以直接使用Daos目录下的类中生成的相关方法:
new UsersDao(dslContext.configuration()).fetchOneById(id);
查询多条语句:
dslContext.select().from(u).orderBy(u.ID).limit(pageSize).offset(pageNum).fetch().map(record -> {
Users users = record.into(Users.class);
return users;
});
select().from(u).orderBy(u.ID).limit(pageSize).offset(pageNum) 相信接触过一点SQL语言的人都能看懂,这部分代码从数据表u中查询所有的数据,并进行了排序以及分页。.fetch()之后将这些数据以Result的形式取出来。Record是JOOQ的一个类,提供了.into()方法转化为指定的pojo类。因此配合lambda表达式,可以将其转化为List返回。
后来在官方文档中发现了fetchInto()方法,可以直接按照需要的pojo类取出,上面的这段代码因此可以修改为:
dslContext.select().from(u).orderBy(u.ID).limit(pageSize).offset(pageNum).fetchInto(Users.class);
执行更新操作:
dslContext.update(u).set(u.AGE,users.getAge())
.set(u.CITY,users.getCity())
.set(u.FIRSTNAME,users.getFirstname())
.set(u.GENDER, users.getGender())
.set(u.PHONENUMBER,users.getPhonenumber())
.set(u.PROVINCE,users.getProvince())
.set(u.SECONDNAME,users.getSecondname())
.where(u.ID.eq(users.getId()))
.execute();
同样,语法格式update(表名).set(列名).where(条件).execute()
执行删除操作:
dslContext.delete(u).where(u.ID.eq(id)).execute();
语法格式delete(表名).where(条件).execute()
where语句:
dslContext.select().from(u).where(u.ID.eq(id).and(u.SECONDNAME.eq(secondName)));
显而易见,JOOQ的DSL语法风格与SQL的语法风格相似,可以很轻易地将两种语句映射,并且,JOOQ搭配IDEA的智能提示功能可以极大地确保我们写出来的语句的语法正确性。