4 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果需要使用表來(lái)維護(hù)的數(shù)據(jù),都是很少有變動(dòng),并且很重要的數(shù)據(jù)。因?yàn)椴楸淼乃俣瓤隙ú蝗缰苯訄?zhí)行代碼來(lái)得快。如果用代碼解決,你可以使用:
1.if...else
2.switch...
3.enum..枚舉值來(lái)匹配
4.?: 三目運(yùn)算符來(lái)解決
或者用表驅(qū)動(dòng)法
#建表語(yǔ)句
CREATE TABLE `resource` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`gmt_create` datetime NOT NULL COMMENT '數(shù)據(jù)新增時(shí)間',
`creator` varchar(128) NOT NULL DEFAULT '0' COMMENT '創(chuàng)建者',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '數(shù)據(jù)修改時(shí)間',
`modifier` varchar(128) NOT NULL DEFAULT '0' COMMENT '修改者',
`is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '是否邏輯刪除,默認(rèn)為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='系統(tǒng)資源表';
#運(yùn)行SQL:
SELECT
r.VALUE
FROM
resource r
WHERE
NAME = #{傳入?yún)?shù)}

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
提供一種使用表實(shí)現(xiàn)的思路,表定義如下:
key | method |
---|---|
所屬國(guó)家 | setCountry |
葡萄酒類型 | setType |
... | ... |
代碼如下:
String name=findMethodByKey(key); //查詢Key對(duì)應(yīng)的方法名
Method m= tblwine.getClass().getMethod(name,Object.class);
m.invoke(tblwine,value);
當(dāng)然如果key是比較固定的, 建議 findMethodByKey 方法用HashMap實(shí)現(xiàn), 沒(méi)有必要用數(shù)據(jù)庫(kù)。
也許題主是希望能動(dòng)態(tài)改變對(duì)應(yīng)關(guān)系,那么使用數(shù)據(jù)庫(kù)存儲(chǔ)也未嘗不可。 不過(guò)為了提高執(zhí)行的效率,最好可以將數(shù)據(jù)庫(kù)表的信息緩存到HashMap中, 當(dāng)數(shù)據(jù)庫(kù)發(fā)生變更時(shí),再更新HashMap。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
也可以用Java8的函數(shù)式接口
private Map<String, BiConsumer<Tblwine, String>> map = new HashMap<>();
{
map.put("所屬國(guó)家 :", (tblwine, value) -> tblwine.setCountry(value));
// other...
}
調(diào)用
map.get(key).accept(tblwine, value);
添加回答
舉報(bào)