跟我一起學extjs5(29--加入模塊和菜單定義[2建立java bean])
來源:程序員人生 發布時間:2014-10-11 08:00:01 閱讀次數:2665次
跟我一起學extjs5(29--加入模塊和菜單定義[2建立java bean])
對上一節中加入的4個模塊在java中建立相應的bean文件。
以上表建立好以后,需要建立java bean文件。在建立之前需要加入幾個支持類。
先在com.jfok.server.common中建立包annotation,再在下面加入二個類庫,這二個是自定義的注釋類。分別用來注釋每一個模塊的信息和模塊中每一字段的信息。
package com.jfok.server.common.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* 用來注釋模塊
*
* @author jiangfeng
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface TableDefine {
// 此表的id號,為一個4位數字
int id();
// 模塊名稱
String title();
// 模塊簡稱
String shortname() default "";
// 模塊分組名稱
String group();
// 模塊的主鍵是否可以是分級的,如果是可以分級的,可定義為"2,2,2",表示有三級,每級代碼長為2位,
// 比如會計科目可以這樣來定義
// 10
// 1001
// 100101
// 100102
// 100102
// 1002
// ......
String codeLevel() default "";
// 模塊是否有附件
boolean attachment() default false;
}
package com.jfok.server.common.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* 用來注釋模塊中的每個字段
*
* @author jiangfeng
*
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldDefine {
String title();
int number() default 0;
String remark() default "";
boolean nameField() default false;
boolean hidden() default false;
String fieldGroup() default "默認組";
}
在com.jfok.server.hibernate中建立包system,把系統用到的bean文件都放在這個目錄下。先建立一個接口文件:
package com.jfok.server.hibernate.system;
/**
* 有此接口的類,都是系統模塊的控制類
*
* @author jfok
*
*/
public interface _IModuleControlInterface {
}
再建立_ModuleGroup.java
package com.jfok.server.hibernate.system;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import com.jfok.server.common.annotation.FieldDefine;
import com.jfok.server.common.annotation.TableDefine;
/**
* 模塊分組類,每一個模塊都有一個大類分組
*
* @author jfok 2012.11.7
*/
@SuppressWarnings("serial")
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@TableDefine(group = "系統模塊", id = 9901, title = "模塊分組")
public class _ModuleGroup implements _IModuleControlInterface, Serializable {
public static final String TITLE = "tf_title";
@Id
@FieldDefine(title = "模塊分組序號", number = 10)
@Column(nullable = false, length = 10)
private String tf_moduleGroupId;
@FieldDefine(title = "模塊分組名稱", nameField = true, number = 20)
@Column(nullable = false, length = 50)
private String tf_title;
@FieldDefine(title = "描述", number = 30)
private String tf_description;
@FieldDefine(title = "圖標地址", number = 40)
private String tf_iconURL;
@FieldDefine(title = "備注", number = 50)
private String tf_remark;
public _ModuleGroup() {
}
// setter and getter
}
上面這個類中,就用自定義的注釋類來進行了注釋,一個是注釋在類名上,一個是注釋在各個字段上。這二個類注釋的功能是以后在增加一個模塊的時候,會自動把這些注釋的信息自動的加到保存的模塊和模塊字段的表中。
再加入_Module.java
package com.jfok.server.hibernate.system;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import com.jfok.server.common.annotation.FieldDefine;
import com.jfok.server.common.annotation.TableDefine;
/**
* 系統中每個模塊的字義
*
* @author jfok 2012.11.7
*
*/
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
@SuppressWarnings("serial")
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@TableDefine(group = "系統模塊", id = 9902, title = "系統模塊")
public class _Module implements _IModuleControlInterface, Serializable {
public static final String MODULEID = "tf_moduleId";
public static final String MODULENAME = "tf_moduleName";
@Id
@FieldDefine(title = "模塊ID號", number = 10)
@Column(nullable = false, length = 10)
private String tf_moduleId; // 模塊ID,模塊序號
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
@JoinColumn(name = "tf_moduleGroupId")
@FieldDefine(title = "模塊分組", number = 20)
private _ModuleGroup tf_ModuleGroup;
@FieldDefine(title = "模塊標識", number = 30)
@Column(nullable = false, length = 50, updatable = false)
private String tf_moduleName; // 模塊英文名稱
@FieldDefine(title = "模塊名稱", nameField = true, number = 40)
@Column(nullable = false, length = 50)
private String tf_title; // 模塊中文名稱
@FieldDefine(title = "模塊簡稱", number = 50)
@Column(length = 20)
private String tf_shortname; // 簡稱
@FieldDefine(title = "英文簡稱", number = 60)
@Column(length = 20)
private String tf_englishname; // 英文簡稱,在新增序號的時候,可以把這字母加進去
@FieldDefine(title = "表名", number = 70)
@Column(length = 50)
private String tf_tableName;
@FieldDefine(title = "主鍵", number = 80)
@Column(nullable = false, length = 50)
private String tf_primaryKey;// 模塊主鍵
@FieldDefine(title = "顯示標志字段", number = 81)
@Column(nullable = false, length = 50)
private String tf_nameFields;// 模塊主要關鍵內容的字段,如合同的是合同名稱,部門的是部門名稱
@FieldDefine(title = "記錄標題tpl", number = 82, remark = "如果顯示標志字段不能描述記錄,需要設置此內容")
@Column(length = 200)
private String tf_titleTpl;// 模塊主要關鍵內容的字段,如合同的是合同名稱,部門的是部門名稱
@FieldDefine(title = "編碼字段", number = 91)
@Column(length = 50)
private String tf_codeField;// 模塊編碼字段,如果有的話
@FieldDefine(title = "順序號字段", number = 97)
@Column(length = 50)
private String tf_orderField;// 模塊編碼字段,如果有的話
@FieldDefine(title = "日期字段", number = 92)
@Column(length = 50)
private String tf_dateField;
@FieldDefine(title = "年度字段", number = 93)
@Column(length = 50)
private String tf_yearfield;
@FieldDefine(title = "月度字段", number = 94)
@Column(length = 50)
private String tf_monthField;
@FieldDefine(title = "季度字段", number = 95)
@Column(length = 50)
private String tf_seasonField;
@FieldDefine(title = "文件字段", number = 96)
@Column(length = 50)
private String tf_fileField;
@FieldDefine(title = "主頁上順序", number = 99)
@Column(length = 50)
private String tf_homePageTag;
@FieldDefine(title = "模塊描述", number = 100)
@Column(length = 50)
private String tf_description;
@FieldDefine(title = "請求地址", number = 110)
@Column(nullable = false, length = 50)
private String tf_requestMapping;// 系統中后臺服務的調用接入點 user.do,employee.do 等
@FieldDefine(title = "圖標地址", number = 120)
@Column(length = 50)
private String tf_iconURL;
@FieldDefine(title = "默認排序字段", number = 130)
private String tf_defaultOrderField;
@FieldDefine(title = "行操作", remark = "新增及修改操作都行內完成", number = 140)
@Column(nullable = false)
private Boolean tf_isInlineOper;
// 如部門編碼為 2,2,2,2,2
@FieldDefine(title = "編碼級次", remark = "如果設置了編碼級次,則主鍵的長度必須是此級次中的,并且必須有父級編碼存在", number = 150)
@Column(length = 50)
String tf_codeLevel;
@FieldDefine(title = "聯動模塊", remark = "在本模塊的數據增刪改后,打開的聯動模塊都要刷新數據。", number = 155)
@Column(length = 200)
private String tf_linkedModule;
@FieldDefine(title = "可用", number = 160)
@Column(nullable = false)
private Boolean tf_isEnable = false;
@FieldDefine(title = "可瀏覽", number = 170)
@Column(nullable = false)
private Boolean tf_hasBrowse = false;
@FieldDefine(title = "可增加", number = 180)
@Column(nullable = false)
private Boolean tf_hasInsert = false;
@FieldDefine(title = "可修改", number = 190)
@Column(nullable = false)
private Boolean tf_hasEdit = false;
@FieldDefine(title = "可刪除", number = 200)
@Column(nullable = false)
private Boolean tf_hasDelete = false;
@FieldDefine(title = "可執行", number = 210)
@Column(nullable = false)
private Boolean tf_hasExec = false;
@FieldDefine(title = "可審核", number = 220)
@Column(nullable = false)
private Boolean tf_hasAuditing = false;
@FieldDefine(title = "可審批", number = 230)
@Column(nullable = false)
private Boolean tf_hasApprove = false;
@FieldDefine(title = "可支付", number = 240)
@Column(nullable = false)
private Boolean tf_hasPayment = false;
@FieldDefine(title = "有附件", number = 250)
@Column(nullable = false)
private Boolean tf_hasAddition = false; // 是否需要附件
@FieldDefine(title = "可權限設置", remark = "用戶可對此模塊設置權限,選定的才可以瀏覽與操作", number = 260)
@Column(nullable = false)
private Boolean tf_canLimit = false; // 此模塊是否能進行權限設置
@FieldDefine(title = "Excel導入", remark = "是否可以通過Excel導入新增記錄", number = 270)
@Column(nullable = false)
private Boolean tf_allowInsertExcel = false;
@FieldDefine(title = "Excel修改", remark = "是否可以導出的Excel修改后再導入", number = 280)
@Column(nullable = false)
private Boolean tf_allowEditExcel = false;
@FieldDefine(title = "可圖表", number = 290)
@Column(nullable = false)
private Boolean tf_hasChart = false;
@FieldDefine(title = "系統模塊", number = 300, remark = "如果是系統模塊,用戶沒有瀏覽權限,就不把模塊定義發送到前端")
@Column(nullable = false)
private Boolean tf_isSystem = false;
@FieldDefine(title = "查詢條件順序號", number = 310, remark = "此模塊放在綜合查詢的條件選擇欄中的順序")
private Integer tf_searchCondOrder;
@FieldDefine(title = "備注", number = 800)
private String tf_remark;
public _Module() {
}
// setter and getter
}
_MenuGroup.java
package com.jfok.server.hibernate.system;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
import com.jfok.server.common.annotation.FieldDefine;
import com.jfok.server.common.annotation.TableDefine;
/**
* 菜單分組
*
* @author jfok
*
*/
@SuppressWarnings("serial")
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@TableDefine(group = "系統模塊", id = 9920, title = "菜單分組")
public class _MenuGroup implements _IModuleControlInterface, Serializable {
@Id
@FieldDefine(title = "順序號", remark = "菜單分組按順序號顯示在菜單條上", number = 10)
@Column(length = 10, nullable = false)
private String tf_menuGroupId;
@FieldDefine(title = "分組名稱", nameField = true, number = 20)
@Column(length = 50, nullable = false)
private String tf_title;
@FieldDefine(title = "展開", remark = "在樹狀菜單下默認是否展開", number = 30)
private Boolean tf_expand;
@FieldDefine(title = "圖標glyph", number = 40)
private Boolean tf_glyph;
@FieldDefine(title = "圖標文件名", remark = "圖標放置于/images/module/目錄下", number = 50)
@Column(length = 50)
private String tf_iconURL;
@FieldDefine(title = "分組描述", number = 60)
@Column(length = 50)
private String tf_description;
@FieldDefine(title = "備注", number = 70)
private String tf_remark;
@Transient
private List<_MenuModule> tf_menuModules;
public _MenuGroup() {
}
//setter and getter
}
_MenuModule.java
package com.jfok.server.hibernate.system;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.hibernate.annotations.GenericGenerator;
import com.jfok.server.common.annotation.FieldDefine;
import com.jfok.server.common.annotation.TableDefine;
/**
* 系統可使用的菜單項
*
* @author jfok
*
*/
@SuppressWarnings("serial")
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@TableDefine(group = "系統模塊", id = 9921, title = "系統菜單")
public class _MenuModule implements _IModuleControlInterface, Serializable {
@Id
@FieldDefine(title = "ID號", hidden = true, number = 10)
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
private Integer tf_menuModuleId;
@FieldDefine(title = "順序號", remark = "按順序號顯示在菜單中", number = 20)
@Column(nullable = false)
private Integer tf_orderId;
@JsonIgnore
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
@JoinColumn(name = "tf_menuGroupId", nullable = false)
@FieldDefine(title = "菜單分組", nameField = true, number = 30)
private _MenuGroup tf_MenuGroup;
@JsonIgnore
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
@JoinColumn(name = "tf_moduleId", nullable = false)
@FieldDefine(title = "系統模塊", number = 40)
private _Module tf_Module;
@FieldDefine(title = "父菜單標題", number = 50)
@Column(length = 20)
private String tf_parentMenu;
@FieldDefine(title = "分隔下一條", number = 60)
private Boolean tf_addSeparator;
@FieldDefine(title = "菜單標題", number = 70)
@Column(length = 50)
private String tf_title;
@FieldDefine(title = "父模塊約束設置", number = 80)
private String tf_parentFilter;
// 這個字段用于傳送json到前臺,放在json中
@Column(insertable = false, updatable = false)
private String tf_ModuleId;
public _MenuModule() {
}
// setter and getter
}
再修改 hibernate.cfg.xml,把上面4個class加入到配置文件中。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://10.211.55.5:1433;databaseName=extjs5</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.autocommit">false</property>
<property name="format_sql">true</property>
<property name="show_sql">true</property>
<!-- 系統模塊 -->
<mapping class="com.jfok.server.hibernate.system._ModuleGroup" />
<mapping class="com.jfok.server.hibernate.system._Module" />
<mapping class="com.jfok.server.hibernate.system._MenuGroup" />
<mapping class="com.jfok.server.hibernate.system._MenuModule" />
</session-factory>
</hibernate-configuration>
到現在為止,我們建立好了數據表以及java bean文件,下面可以開發前后臺進行協同工作的內容了。
各個文件的目錄結構:
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈