# 数据库

基本增删改查, JFinal提供了两种方式对数据库进行操作,他们分别是:

  1. Db+Record 模式
  2. SQL 模板模式
  3. Model 映射模式
  4. Columns 查询模式

# Db+Record 模式

请参考jfinal的Db+Record模式 (opens new window)

# SQL 模板模式

通过创建*.stl来创建SQL模板文件,jweb会自动查找加载*.stl文件,无需配置 创建User.stl模板文件:

#namespace("cc.jweb.demo.web.user")
    #sql("queryPageList")
    	select
        t.user_id,
        t.org_id,
        t.user_name,
    	from user t
    	where 1=1
    	#if(notBlank(user_id))
            and t.user_id = #para(user_id)
        #end
    	#if(notBlank(org_id))
            and t.org_id = #para(org_id)
        #end
    	#if(notBlank(user_name))
            and t.user_name = #para(user_name)
        #end
		order by t.create_datetime desc 
        limit #para(start),#para(limit)
    #end

    #sql("count")
    	select
    	    count(1)
    	from sys_user t where 1=1
    	#if(notBlank(user_id))
            and t.user_id = #para(user_id)
        #end
    	#if(notBlank(org_id))
            and t.org_id = #para(org_id)
        #end
    	#if(notBlank(user_name))
            and t.user_name = #para(user_name)
        #end
    #end
#end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

可通过如下代码,完成sql的执行

import cc.jweb.boot.db.Db;
import cc.jweb.boot.common.lang.Result;

...

List<Record> list = Db.find(Db.getSqlPara("cc.jweb.demo.web.user.queryPageList", params));
Result result = Db.paginate("cc.jweb.demo.web.user.queryPageList", "cc.jweb.demo.web.user.count", params)
1
2
3
4
5
6
7

详细使用方法,请前往

  1. jfinal的Enjoy SQL 模板 (opens new window)
  2. jfinal的Db + Record模式 (opens new window)

# Model 映射模式

Model是 MVC 模式中的 M 部分。以下是 Model 定义示例代码:

@Table(tableName = "user", primaryKey = "user_id")
public class User  extends JbootModel<User> implements IBean {
    User dao = new User().dao();
}
1
2
3
4

然后就可以操作user表了:

以下为Model的一些常见用法:

// 创建title属性为James,age属性为25的User对象并添加到数据库
new User().set("title", "James").set("age", 25).save();
 
// 删除id值为25的User
User.dao.deleteById(25);
 
// 查询id值为25的User将其title属性改为James并更新到数据库
User.dao.findById(25).set("title", "James").update();
 
// 查询id值为25的user, 且仅仅取title与age两个字段的值
User user = User.dao.findByIdLoadColumns(25, "title, age");
 
// 获取user的title属性
String userName = user.getStr("title");
 
// 获取user的age属性
Integer userAge = user.getInt("age");
 
// 查询所有年龄大于18岁的user
List<User> users = User.dao.find("select * from user where age>18");
 
// 分页查询年龄大于18的user,当前页号为1,每页10个user
Page<User> userPage = User.dao.paginate(1, 10, "select *", "from user where age > ?", 18);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

详细使用方法,请前往

  1. jfinal的Model (opens new window)
  2. jboot的数据库 (opens new window)

# Columns 查询模式

参考 jboot的Column查询 (opens new window)

# 多数据源

参考Jboot的数据库多数据源配置 (opens new window)

# 读写分离

参考Jboot的读写分离配置 (opens new window)

# 分库分表

参考Jboot的分库分表配置 (opens new window)

# 分布式事务

参考Jboot的分布式事务配置 (opens new window)

引用

本节引用Jboot的数据库文档,详细可以前往 http://jboot.io/docs/db.html (opens new window)