CompanyManager項(xiàng)目簡(jiǎn)介
該項(xiàng)目的搭建環(huán)境:
項(xiàng)目管理:maven
框架:spring叨粘、springmvc、mybatis雀久、easyui
數(shù)據(jù):mysql
主要用途:實(shí)現(xiàn)了用戶管理、菜單管理、部門(mén)管理剂桥、理財(cái)管理、理財(cái)報(bào)表属提、待辦管理权逗、字典管理等多個(gè)功能美尸,可作為有具體需要的朋友提供參考的demo,也可作為新手學(xué)習(xí)的demo斟薇。
碼云地址:https://git.oschina.net/xi_fan/CompanyManager.git
目前該項(xiàng)目已經(jīng)搭建在騰訊云上师坎,有需要的朋友可以登錄訪問(wèn):http://123.207.236.102:8080/ssm_template/pages/login.jsp
超級(jí)管理員用戶名:system
超級(jí)管理員密碼:123
一、主要板塊講解:
1堪滨、用戶管理板塊
需求說(shuō)明:
- 該項(xiàng)目的使用角色可分為三個(gè):分別為一般用戶胯陋、系統(tǒng)管理員、超級(jí)管理員袱箱;
- 權(quán)限管理:超級(jí)管理員具有所有的權(quán)限遏乔,包括添加、修改发笔、刪除系統(tǒng)管理員等權(quán)限盟萨,而系統(tǒng)管理員具有管理一般用戶的權(quán)限,遵守現(xiàn)實(shí)中上級(jí)管理下級(jí)的原則了讨。
用戶管理板塊具體實(shí)現(xiàn):
- 1捻激、先從dao層說(shuō)起:在cn.springmvc.dao中搭建好UserInfoDao,該類(lèi)是一個(gè)接口前计,中包含著對(duì)user相關(guān)信息的增刪查改胞谭。具體的可看項(xiàng)目中cn.springmvc.dao.UserInfoDao的實(shí)現(xiàn)
- 2 、在對(duì)應(yīng)的目錄下配置好UserInfoDao的Mapper映射文件残炮,實(shí)現(xiàn)具體函數(shù)在mybatis中實(shí)現(xiàn)對(duì)Mysql的操作韭赘。具體的可看項(xiàng)目中cn.springmvc.dao.UserInfoMapper的實(shí)現(xiàn)
- 3 、在cn.springmvc.service中搭建好對(duì)應(yīng)的service接口势就,并在cn.springmvc.service.impl中實(shí)現(xiàn)具體的service層功能泉瞻。具體的可看項(xiàng)目中cn.springmvc.service.impl.UserInfoServiceImpl的實(shí)現(xiàn)
- 4 、在cn.springmvc.controller中實(shí)現(xiàn)對(duì)應(yīng)的控制器具體的可看項(xiàng)目中cn.springmvc.service.controller.UserInfoController的實(shí)現(xiàn)
2苞冯、菜單管理板塊
需求說(shuō)明:
- 該項(xiàng)目的菜單主要可以分為兩種袖牙,一是項(xiàng)目系統(tǒng)的菜單,需要編寫(xiě)相應(yīng)的代碼進(jìn)行連接舅锄,二是web的菜單鞭达,只要提供鏈接既可以點(diǎn)擊后實(shí)現(xiàn)跳轉(zhuǎn)。
- 主要實(shí)現(xiàn)菜單的crud皇忿。
菜單管理板塊具體實(shí)現(xiàn):
- 項(xiàng)目的分層以及具體實(shí)現(xiàn)跟用戶管理板塊類(lèi)似畴蹭,可以直接查看源碼。
在這里我要談?wù)勎沂侨绾芜M(jìn)行mybatis的物理分頁(yè)的:
學(xué)過(guò)mybatis的都知道鳍烁,mybatis使用RowBounds實(shí)現(xiàn)的分頁(yè)是邏輯分頁(yè),也就是先把數(shù)據(jù)記錄全部查詢出來(lái),然在再根據(jù)offset和limit截?cái)嘤涗浄祷貫榱嗽跀?shù)據(jù)庫(kù)層面上實(shí)現(xiàn)物理分頁(yè),如果我們不想改變?cè)瓉?lái)MyBatis的函數(shù)邏輯,又實(shí)現(xiàn)物理分頁(yè)叨襟,可以編寫(xiě)plugin截獲MyBatis Executorstatementhandler,重寫(xiě)SQL來(lái)執(zhí)行查詢。
那么我是如何在整個(gè)項(xiàng)目中進(jìn)行實(shí)現(xiàn)的呢幔荒?
我所做的就是在view層糊闽、controller層以及Model層三個(gè)層中傳遞一個(gè)PageInfo對(duì)象梳玫,該對(duì)象綁定著分頁(yè)的信息。
在controller層:
@RequestMapping(value = "/queryUser")
public String queryUser(Model model, @ModelAttribute(value = "pageInfo") PageInfo<UserInfo> pageInfo,@ModelAttribute(value = "user") UserInfo userInfo, @ModelAttribute(value = "dept") DeptInfo dept) { //實(shí)現(xiàn)業(yè)務(wù) }
在service層:將PageInfo打包成RowBounds對(duì)象后傳給dao層
public ArrayList<UserInfo> queryUsers(Map<String, String> map,PageInfo<UserInfo> pageInfo) {
return userInfoDao.queryUsers(new RowBounds(pageInfo.getFromRecord(),pageInfo.getPageSize()), map);}
在mybatis配置文件中配置plugin:interceptor屬性指向攔截器右犹;
<plugins>
<plugin interceptor="cn.springmvc.utildao.PaginationInterceptor" />
</plugins>
而PaginationInterceptor可以查看項(xiàng)目中cn.springmvc.utildao的源碼提澎,
對(duì)于主要實(shí)現(xiàn)數(shù)據(jù)庫(kù)的CRUD的mapper沒(méi)有任何變化。
Note: 其它板塊和以上兩個(gè)差不多念链,具體的可以查看源碼E渭伞!钓账!
二碴犬、在ie以及360兼容模式下出現(xiàn)json數(shù)據(jù)被瀏覽器攔截并且直接請(qǐng)求保存的問(wèn)題:
在springmvc-servlet文件中添加:
<!-- json格式配置 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
</property>
<!--
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd HH:mm:ss"/>
</bean>
</property> -->
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
便可以解決該問(wèn)題。
Note: 歡迎有興趣的小伙伴們一起為該項(xiàng)目添加不一樣的色彩0鹉骸7!