例如 Userm.java
UsermDAO.java
2. 建立user.hbm.xml的映射文件
之後應該把user.hbm.xml註冊到hibernate-config.xml文件中
在clmis系統的數據庫中有定義 一個用戶表 c_userM, 其中user_id 是根據oracle自動編號的,對應的序列爲 c_userm_sn,
可以通過 select c_userm_sn.nextval from dual 查詢出序列值
請大家寫一個用戶管理的程序,包含用戶的新增,修改,查詢,刪除的功能,
查詢條件爲(可以模糊查詢)
用戶名:———— 姓名:—————— 查詢
程序的書寫步驟爲
第一階段
1. 創建javaBean userm
2. 建立userm.hbm.xml的映射文件
把userm.hbm.xml註冊到hibernate-config.xml文件中
3. 建立UsermDAO 接口(由於 新增 修改 刪除 的方法都有繼承,所以只需要寫一個 findUserByNameAndNo(String userName,String userNo))
4. 建立UsermDAOImpl 實現類, 實現 UsermDAO
5. 建立UsermService,基本代碼和UsermDAO一樣
6. 建立UsermServiceImpl,實現UsermService
7. 在erpit-base-dao.xml中註冊usermDAO
8. 在erpit-base-service.xml中註冊 usermService
(完成此步就可以用junit測試操作數據庫,學會單元測試,並測試成功後再寫下面步驟)
後階段
9. 填寫jsp頁面
10. 填寫controller程序
11. erpit-base-view.xml中註冊controller
12. 運行測試
注:
在java代碼中變量命名除 static final 變量中可以使用 中劃線或下劃線 -, 其他變量我們一般不會採用劃線
例如:數據庫中 USER_NAME 我們一般對應爲 private String userName;
我們可以定義常量就採用 public static final String SYS_CMIS_LOCKRMK = 'Y';
由於userId是採用oracle序列自動編號,所以在hbm.xml中配置時要自動應用 C_userm_sn付值
由於採用了hibernate做底層,很多方法都提取出來公共使用,所以我們把所有的table的主key,對應的javaBean中的字段都統一爲id,也就是c_userm表中user_id,就應該對應 user bean中的id字段,由於id是繼承下來的,所以在user.java bean中是不用定義private Long id的
在oracle數據中的date類型,在java中是用 java.sql.Timestamp類型接收的,在hbm.xml中是用 timestamp對應的
下面有個例子
public class Userm extends BaseEntity<Long> {
private String user_no;
private String user_nm;
private String user_pwd;
private String per_no;
private String used_rmk;
private EmailBean email;
public User(){}
public User(Long id){
this.id = id;
}
public String getUser_no() {
return user_no;
}
public void setUser_no(String user_no) {
this.user_no = user_no;
}
public String getUser_nm() {
return user_nm;
}
public void setUser_nm(String user_nm) {
this.user_nm = user_nm;
}
public String getUser_pwd() {
return user_pwd;
}
public void setUser_pwd(String user_pwd) {
this.user_pwd = user_pwd;
}
public String getPer_no() {
return per_no;
}
public void setPer_no(String per_no) {
this.per_no = per_no;
}
@Override
public boolean equalsIfIdNull(Object o) {
// TODO Auto-generated method stub
return false;
}
@Override
public int hashCodeIfIdNull() {
// TODO Auto-generated method stub
return 0;
}
public EmailBean getEmail() {
return email;
}
public void setEmail(EmailBean email) {
this.email = email;
}
public String getUsed_rmk() {
return used_rmk;
}
public void setUsed_rmk(String used_rmk) {
this.used_rmk = used_rmk;
}
}
hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.g512.app.base.model.admin">
<class name="User" table="WUSERS">
<id name="id" column="USER_ID" type="long">
<generator class="sequence">
<param name="sequence">WUSERS_SN</param>
</generator>
</id>
<property name="user_no" column="USER_NO" type="string" />
<property name="user_nm" column="USER_NM" type="string" />
<property name="user_pwd" column="USER_PWD" type="string" />
<property name="used_rmk" column="USED_RMK" type="string" />
<property name="per_no" column="PER_NO" type="string" length="6" />
</class>
</hibernate-mapping>
1.從ie中輸入url,例如 index.htm
2.springmvc 會根據web.xml中配置,一切.htm都要採用springmvc的轉向,所以會根據spring的轉向配置文件dispatcher-servlet.xml
3.從dispatcher-servlet.xml文件中可以看到,index.htm是執行indexController的,但再執行indexController之前,我們要先執行logonValidatorController,這個也是配置,例如login.htm我們就沒有要求他執行logonValidatorController,logonValidatorController是個過濾器,他的作用是判斷是否有登錄,所以程序就轉到logonValidatorController中,因爲沒有登錄,所以就轉向了login.jsp了
logonValidatorController的代碼在base/filter/filter.xml中配置的,從logonValidatorController配置代碼中可以看到爲什麼會轉向login.jsp也是配置的。
4.當我們輸入用戶名和密碼後,我們從login.jsp中可以看到,程序是提交到了login.htm?method=loginCheck,表示執行login.htm中的loginCheck的方法,這又回到了第二步了,他又會根據dispatcher-servlet.xml,login.htm又會執行loginController,loginController對應到什麼java文件?我們要從mvc文件夾中的配置xml文件了,因爲controller將來會很多,所以我就對他分類管理,loginController是基本,所以我放在base/mvc/eip-base-mvc.xml中,我們可以看到他執行的是com.byd.erpit.base.controller.admin.LoginController.java,但是他有用到數據庫查詢,所以要用到service,service是要調用dao的,所以大家可以根據service和dao的配置查詢到具體調用的代碼。