-
Notifications
You must be signed in to change notification settings - Fork 12
在jSqlBox项目中使用
Yong Zhu edited this page Mar 12, 2018
·
10 revisions
jSqlBox是一个建立在DbUtils内核上的持久层ORM工具,jDialects最早就是为了jSqlBox开发的,jSqlBox内部已包含了jDialects依赖,所以使用了jSqlBox的项目无需在pom.xml中再添加对jDialects的依赖。
jSqlBox与Hibernate和MyBatis之类的ORM工具相比,主要的区别之一在于它是没有session的,无需关心session的关闭,基本上无配置,可以随用随弃,更轻量化、微型化。
以下示例演示了利用jSqlBox来进行持久层开发,相比于纯Jdbc方式,可以看出jSqlBox的使用极大地精简了代码行数:
public class Demo {
@Table(name = "users")
public static class User extends ActiveRecord {
@UUID25
@Id
private String id;
private String firstName;
private String lastName;
private Integer age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
@Test
public void doTest() {
HikariDataSource ds = new HikariDataSource();// DataSource
ds.setDriverClassName("org.h2.Driver");
ds.setJdbcUrl("jdbc:h2:mem:DBName;MODE=MYSQL;DB_CLOSE_DELAY=-1;TRACE_LEVEL_SYSTEM_OUT=0");
ds.setUsername("sa");
ds.setPassword("");
SqlBoxContext ctx = new SqlBoxContext(ds);
SqlBoxContext.setGlobalSqlBoxContext(ctx);
String[] ddlArray = ctx.toDropAndCreateDDL(User.class);
for (String ddl : ddlArray)
ctx.quiteExecute(ddl);
for (int i = 1; i <= 100; i++) {
User u = new User();
u.setFirstName("Foo" + i);
u.setLastName("Bar" + i);
u.setAge(i);
u.insert();
}
Assert.assertEquals(100, ctx.nQueryForLongValue("select count(*) from users"));
List<Map<String, Object>> users = ctx.nQueryForMapList(
ctx.pagin(2, 10, "select concat(firstName, ' ', lastName) as USERNAME, age from users where age>?"),
50);
Assert.assertEquals(10, users.size());
for (Map<String, Object> map : users)
System.out.println("UserName=" + map.get("USERNAME") + ", age=" + map.get("AGE"));
ds.close();
}
}
以上代码利用到了jDialects的DDL生成、分页、函数变换、jSqlBox的ActiveRecord及各种查询方法。
同样地,以上代码只需要更改数据源配置,就可以自动适应多种数据库,不必为每一种数据库写对应的DDL和SQL了。
上例的完整源码请参见示例项目中的demo源码。