Skip to content

在jSqlBox项目中使用

Yong Zhu edited this page Mar 12, 2018 · 10 revisions

jDialects在jSqlBox中的应用

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源码