开发者社区 问答 正文

多主键的增删改查如何处理?

1,save方法经过注释掉一行源码后可以使用(经过修改com.jfinal.plugin.activerecord.Model的save()方法,将getGeneratedKey(pst, tableInfo.getPrimaryKey())注释掉后可使用);

2,update方法怎么写,改为使用Db.update方法?

3,deleteById仅支持单主键,多主键使用Db.update方法?

建表语句(keyInt及keyStr为主键):

CREATE TABLE "multikey" (
"keyInt"  int(11) NOT NULL,
"keyStr"  varchar(255) NOT NULL,
"colStr"  varchar(40) DEFAULT NULL,
PRIMARY KEY ("keyInt" ASC, "keyStr" ASC)
)
;

以下为操作代码:

package com.demo.multikey;
 
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
 
/**
 * MultikeyController
 */
@Before(MultikeyInterceptor.class)
public class MultikeyController extends Controller {
     
    public void index() {
        list();
    }
     
    public void list() {
        setAttr("multikeyList", Multikey.dao.find("select * from multikey order by keyInt asc"));
        render("multikey.html");
    }
     
    public void add() {
        render("add.html");
    }
     
    @Before(MultikeyValidator.class)
    public void save() {
        // 经过修改com.jfinal.plugin.activerecord.Model的save()方法
        // 将getGeneratedKey(pst, tableInfo.getPrimaryKey());注释掉后可使用
        getModel(Multikey.class).save();
        list();
    }
     
    public void edit() {
        // findById仅支持单主键,多主键使用findFirst或find().get(0)
        setAttr("multikey", Multikey.dao.findFirst("select * from multikey where keyInt=? and keyStr=?", getParaToInt(0), getPara(1)));
        render("edit.html");
    }
     
    @Before(MultikeyValidator.class)
    public void update() {
        // 此方法不能使用,改为使用Db.update方法?
        getModel(Multikey.class).update();
        list();
    }
     
    public void delete() {
        // deleteById仅支持单主键,多主键使用Db.update方法
        Db.update("delete from multikey where keyInt=? and keyStr=?", getParaToInt(0), getPara(1));
        list();
    }

展开
收起
小旋风柴进 2016-06-07 15:55:45 2452 分享 版权
1 条回答
写回答
取消 提交回答
  • 出于简单考虑,JFinal ActiveRecord对多主键没有提供完全的支持,但也可以支持多主键操作,如果需要使用多主键操作,那么可以使用 Db.update(...)Db.insert(...)等等这类开发者能自主写sql的方法。

    2019-07-17 19:30:21
    赞同 展开评论
问答标签:
问答地址: