为了账号安全,请及时绑定邮箱和手机立即绑定

表驱动,如何在表中存储一个方法

表驱动,如何在表中存储一个方法

狐的传说 2019-03-12 17:19:40
想将下面的代码用表驱动的方法实现,应该怎么创建这个“表”呢    if(key.equals("所属国家 :")) {        tblwine.setCountry(value);    }    else if(key.equals("葡萄酒类型 :")) {        tblwine.setType(value);    }    else if(key.equals("规格 :")) {        tblwine.setSize(value);    }    else if(key.equals("酒精度 :")) {        tblwine.setPercent(value);    }    else if(key.equals("葡萄品种 :")) {        tblwine.setPtype(value);    }    else if(key.equals("生产年份 :")) {        tblwine.setYear(value);    }
查看完整描述

4 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

如果需要使用表来维护的数据,都是很少有变动,并且很重要的数据。因为查表的速度肯定不如直接执行代码来得快。如果用代码解决,你可以使用:

1.if...else

2.switch...

3.enum..枚举值来匹配

4.?: 三目运算符来解决


或者用表驱动法


#建表语句

CREATE TABLE `resource` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',

  `gmt_create` datetime NOT NULL COMMENT '数据新增时间',

  `creator` varchar(128) NOT NULL DEFAULT '0' COMMENT '创建者',

  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据修改时间',

  `modifier` varchar(128) NOT NULL DEFAULT '0' COMMENT '修改者',

  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '是否逻辑删除,默认为n',

  `type` varchar(32) DEFAULT NULL COMMENT '资源类型',

  `name` varchar(64) DEFAULT NULL COMMENT '资源名称',

  `value` varchar(2048) DEFAULT NULL COMMENT '值',

  `ordering` bigint(20) DEFAULT NULL COMMENT '排序',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3026 DEFAULT CHARSET=utf8 COMMENT='系统资源表';

#运行SQL:


SELECT

    r.VALUE

FROM

    resource r

WHERE

NAME = #{传入参数}


查看完整回答
反对 回复 2019-04-22
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

提供一种使用表实现的思路,表定义如下:

keymethod
所属国家setCountry
葡萄酒类型setType
......

代码如下:

    String  name=findMethodByKey(key); //查询Key对应的方法名

    Method  m= tblwine.getClass().getMethod(name,Object.class);

    m.invoke(tblwine,value);

当然如果key是比较固定的, 建议 findMethodByKey 方法用HashMap实现, 没有必要用数据库。

也许题主是希望能动态改变对应关系,那么使用数据库存储也未尝不可。 不过为了提高执行的效率,最好可以将数据库表的信息缓存到HashMap中, 当数据库发生变更时,再更新HashMap。


查看完整回答
反对 回复 2019-04-22
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

也可以用Java8的函数式接口


    private Map<String, BiConsumer<Tblwine, String>> map = new HashMap<>();


    {

        map.put("所属国家 :", (tblwine, value) -> tblwine.setCountry(value));

        

        // other...

    }

调用


map.get(key).accept(tblwine, value);


查看完整回答
反对 回复 2019-04-22
  • 4 回答
  • 0 关注
  • 596 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号