在程序開發(fā)過程中,我們經(jīng)常需要使用到字典表,而MySQL的字典表是一種非常方便的工具來存儲一些常量數(shù)據(jù),比如:狀態(tài)碼,用戶類型等等。在代碼中應(yīng)用MySQL的字典表可以使程序的可維護性和可擴展性更高。
CREATE TABLE `dictionary` ( `id` int(11) NOT NULL AUTO_INCREMENT, `key` varchar(50) NOT NULL COMMENT '字典表key', `value` varchar(500) NOT NULL COMMENT '字典表value', `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', `type` varchar(50) NOT NULL COMMENT '字典表類型', `desc` varchar(500) NOT NULL COMMENT '字典表描述', `create_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='字典表';
上述是創(chuàng)建MySQL字典表的SQL語句,其中包含了關(guān)鍵的字段,比如:key,value,type等等,我們可以通過查詢指定的key值,獲取字典表中對應(yīng)的value。例如獲取用戶類型:
SELECT * FROM dictionary WHERE key='user_type';
在代碼中應(yīng)用MySQL字典表,可以使用常量來代替一些固定的值,避免了硬編碼。
public class UserType { public static final String NORMAL = "normal"; public static final String VIP = "vip"; public static final String ADMIN = "admin"; }
常量類中的常量值即為字典表中對應(yīng)的key值。比如在一個用戶dao層中,插入用戶信息:
public void insert(User user) { String sql = "INSERT INTO user (name, type) VALUES (?, ?)"; try (Connection conn = getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, user.getName()); pstmt.setString(2, UserType.NORMAL); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } }
在插入用戶信息時,我們將用戶類型的值設(shè)置為了UserType.NORMAL,避免了硬編碼,提高了代碼的可維護性,如果字典表中用戶類型的值發(fā)生了變化,我們只需要修改字典表中的value值即可。