OA中基础功能总结
1,設計 BaseDao 與 BaseDaoImpl
?1,設計接口 BaseDao
??1,每個實體都應有一個對應的Dao接口,封裝了對這個實體的數據庫操作。例
???實體???Dao接口????實現類
???========================================================
???User???--> UserDao???--> UserDaoImpl
???Role???--> RoleDao???--> RoleDaoImpl
???Department??--> DepartmentDao?--> DepartmentDaoImpl
???Article???--> ArticleDao??--> ArticleDaoImpl
???...
??2,在每個Dao接口中都應有一個基本的增刪改查的方法,
???但每個Dao接口中都寫一遍就是重復的代碼,可以把這些方法抽取到一個父接口中,定義為:
???public interface BaseDao<T> {
????save(entity : T) : void
????delete(id : Serializable) : void
????update(entity : T) :void
????getById(id : Serializable) : T
????getByIds(ids : Serializable[]) : List<T>
????findAll() : List<T>
???}
??3,說明:
???1,使用泛型的技術,可以在使用時更方便,如:User user = userDao.getById(1L); // 不需要強制轉型
???2,getById(id : Long) 與 getByIds(ids : Long[]) 不要合并為一個有可變參數的方法,
????因為那個用起來就不方便了,比如要經常使用的根據一個id獲取一個對象時就很不方便:
????List<User> list = userDao.getByIds(1L); User user = list.size() > 0 ? list.get(0) : null。
???3,以后再有Dao接口就可以繼承這個 BaseDao,以擁有基本的增刪改查方法,如:
????UserDao extends BaseDao<User>
????RoleDao extends BaseDao<Role>
?2,設計實現類 BaseDaoImpl
??1,每個Dao的接口還要有相應的實現類才可以,在每個DaoImpl中都要實現Dao接口中定義的所有方法,
???當然也包括公共的增刪改查方法(BaseDao中定義的6個基本方法)。
??2,每個DaoImpl中都實現一遍公共方法顯示是重復的,所以也可以抽取出來為一個父類BaseDaoImpl,
???在BaseDaoImpl中實現了BaseDao接口的所有方法,我們的DaoImpl只需要繼承他就可以不用重復的寫公共方法的實現了。
???聲明如下:
????public class BaseDaoImpl<T> implements BaseDao<T> {
?????@Resource private SessionFactory sessionFactory; // 讓Spring注入sessionFactory
?????private Class<T> clazz; // 要想辦法得到T的Class
?????public void save(T entity) { }
?????public void delete(Long id) { }
?????public void update(T entity) { }
?????public T getById(Long id) { }
?????public List<T> getByIds(Long[] ids) { }
?????public List<T> findAll() { }
????}
???在實現方法時,獲取Session的代碼為:sessionFactory.getCurrentSession()
??3,在獲取clazz時有兩種方法
???1,方法一:
????1,把clazz聲明成protected修飾符的,這樣子類中就可以訪問了,
????2,在每個子類的構造方法中傳遞這個屬性的值,如:
?????public RoleDaoImpl() { clazz = Role.class; }
?????public UserDaoImpl() { clazz = User.class; }
???2,方法二:使用反射的方式:
????1,在BaseDaoImpl的默認構造方法中寫如下代碼就可以了:
?????ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
?????clazz = (Class) pt.getActualTypeArguments()[0];
????2,說明:BaseDaoImpl不能直接使用,只能使用他的子類,否則這段代碼就無效了。
2,頁面中的JS表單驗證(使用jQuery.validate)
?1,基本用法
??1,導入JS文件
???<script type="text/javascript" src="lib/jquery.js"></script>
???<script type="text/javascript" src="lib/jquery.metadata.js"></script>
???<script type="text/javascript" src="jquery.validate.js"></script>
??2,指定哪個表單要在提交前要先進行驗證
???$(function(){
????$("form").validate();?
???})
??3,指定表單中字段的驗證規則
???<input type="text" name="name" class="required" />
?2,指定驗證規則的方式
??1,多個class之間使用空格隔開,如 class="required email"
??2,使用json方式,如 class="{required: true, minlength: 2}"
??3,混合方式一與方式二,如 class="required {minlength: 2}"
?3,內置的驗證規則
??有很多,見文檔
?4,修改提示消息
??1,默認提示
??2,針對某個表單的個性化提示
?5,修改提示消息的樣式
??<style type="text/css">
???label.error{
????margin-left: 10px;
????color: red;
???}
??</style>
?
總結
- 上一篇: 二手电动车上牌车架号重复怎么办?
- 下一篇: 昆仑润滑油品质好吗?不知道这个品牌算不算