使用Maven構(gòu)建 整合Dubbo+Zookeeper+SpringMVC+Spring+MyBatis支持分布式 高效便捷開發(fā)框架

Yan 項目簡介(Instruction)

項目已托管至Github,請前往https://github.com/micyo202/yan查看源碼
logo

注:最新基于SpringCloud的完整微服務(wù)架構(gòu)體系已經(jīng)逐步完成欺栗,查看詳細(xì)內(nèi)容請前往http://www.reibang.com/p/a061effe4ae5

該項目是一整套整合 Dubbo+Zookeeper+SpringMVC+Spring+MyBatis 支持分布式的高效率便捷開發(fā)RPC框架,使開發(fā)人員更專注于業(yè)務(wù),達(dá)到面向業(yè)務(wù)開發(fā)国葬。

項目使用 Maven 構(gòu)建安吁,便于項目管理,可支持 Oracle睛琳、MySql 等主流數(shù)據(jù)庫盒蟆。

項目模塊化分層明確,代碼規(guī)范师骗,便于后期維護(hù)等工作历等。

前端展示界面采用基于 Boostrap 實現(xiàn)的響應(yīng)式布局,并集成了一系列的動畫效果插件辟癌,整體界面簡潔寒屯、美觀大方并可優(yōu)雅的與后臺完成交互操作。

項目目標(biāo)是為中小型企業(yè)打造全方位的J2EE企業(yè)級開發(fā)解決方案黍少,提高工作效率浩螺。

該項目是yan-demo單節(jié)點項目的升級版,支持分布式仍侥,持續(xù)更新中要出,敬請期待...

近期更新內(nèi)容

  • beta 1.0.0:項目整體改造,升級為RPC架構(gòu)农渊。(注:若想查看非RPC版請移步至https://gitee.com/micyo202/yan
  • beta 0.1.0:模塊優(yōu)化患蹂,刪除不必要的模塊,優(yōu)化代碼(模塊詳情參考:三砸紊、項目結(jié)構(gòu))
  • beta 0.0.5:前端添加ECharts传于,便于圖形化展示
  • beta 0.0.4:添加JMS(ActiveMQ)消息服務(wù)(目前僅測試方法,暫無業(yè)務(wù)流轉(zhuǎn)醉顽,后期逐漸完善細(xì)化)
  • beta 0.0.3:添加Solr搜索引擎服務(wù)(基本的全文檢索功能沼溜,可根據(jù)實際需求情況進(jìn)行二次開發(fā),后期本人再逐漸完善)
  • beta 0.0.2:優(yōu)化整體代碼游添、添加更多注釋系草,結(jié)構(gòu)更清晰、代碼更易懂
  • beta 0.0.1:將原有yan-demo項目重構(gòu)唆涝,保留原有功能找都,模塊拆分、優(yōu)化項目結(jié)構(gòu)

項目所需工具及版本 *

一廊酣、項目開發(fā)環(huán)境&工具(Environment&Tools)

  • MacOS Sierra / Windows 7
  • MySql 5.7
  • JDK 1.8
  • CentOS 7
  • IntelliJ IDEA 2017.2.5 / Eclipse 4.6.1
  • Navicat Premium 11.1.12
  • Maven 3.3.9
  • Jetty 9.4.6.v20170531 / Tomcat 9.0.1

二能耻、技術(shù)選型(Technology)

1.服務(wù)端技術(shù)(Server)

名稱 版本號 網(wǎng)址
Spring Framework 4.3.13.RELEASE http://projects.spring.io/spring-framework/
Shiro 1.4.0 http://shiro.apache.org
AspectJ 1.8.13 http://www.eclipse.org/aspectj/
MyBatis 3.4.5 http://www.mybatis.org/mybatis-3/zh/index.html
MyBatis Generator 1.3.5 http://www.mybatis.org/generator/index.html
PageHelper 5.1.2 http://git.oschina.net/free/Mybatis_PageHelper
Dubbo 2.6.0 http://dubbo.io
Solr 7.1.0 https://lucene.apache.org/solr/
ActiveMQ 5.15.2 http://activemq.apache.org
Druid 1.1.5 https://github.com/alibaba/druid
Jackson 2.9.2 https://github.com/FasterXML/jackson
Dom4j 1.6.1 http://www.dom4j.org
Ehcache 2.6.11 http://www.ehcache.org/
Logback 1.2.3 https://logback.qos.ch
Maven 3.3.9 http://maven.apache.org/
Zookeeper 3.4.11 https://www.apache.org/dyn/closer.cgi/zookeeper/

2.前端技術(shù)(Web)

名稱 版本號 網(wǎng)址
angular - https://angularjs.org
awesome-bootstrap-checkbox - https://github.com/flatlogic/awesome-bootstrap-checkbox
bootstrap 3.3.7 http://www.bootcss.com
bootstrap-datetimepicker - http://www.bootcss.com/p/bootstrap-datetimepicker/
bootstrap-select 1.12.4 http://silviomoreto.github.io/bootstrap-select/
bootstrap-table 1.11.1 http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/
bootstrapvalidator 0.5.3 https://github.com/nghuuphuoc/bootstrapvalidator/
ECharts 3.8.4 http://echarts.baidu.com
font-awesome 4.7.0 http://fontawesome.io/icons/
fontIconPicker 2.0.0 https://codeb.it/fonticonpicker/
fullPage - https://alvarotrigo.com/fullPage/
jquery-confirm 3.3.0 https://github.com/craftpip/jquery-confirm
malihu-custom-scrollbar-plugin - https://github.com/videoMonkey/malihu-custom-scrollbar-plugin
material-design-iconic-font 2.2.0 https://github.com/zavoloklom/material-design-iconic-font
waves 0.7.5 https://github.com/fians/Waves
zTree_v3 3.5.26 http://www.treejs.cn/v3/main.php#_zTreeInfo
BootstrapMenu - https://mobirise.com/bootstrap-menu
device - https://github.com/matthewhudson/device.js
jquery 3.2.1 http://jquery.com
jquery-cookie - https://github.com/carhartl/jquery-cookie

三、項目結(jié)構(gòu)(Construction)

yan -- 根目錄
├── yan-api -- 接口模塊(提供核心接口方法)
|    ├── main -- 主模塊路徑
|    |    ├── java -- java類路徑
|    |    |    ├── com.yan.api -- 核心接口包
|    |    |    |    ├── jms -- 消息服務(wù)接口
|    |    |    |    ├── persistence -- 持久化接口
├── yan-common -- 公共模塊
|    ├── main -- 主模塊路徑
|    |    ├── java -- java類路徑
|    |    |    ├── com.yan.common -- 公共類包
|    |    |    |    ├── annotation -- 注解類
|    |    |    |    ├── aspect -- 切面類
|    |    |    |    ├── constant -- 常量定義類
|    |    |    |    ├── model -- 通用模型
|    |    |    |    ├── service -- 泛型對象服務(wù)
|    |    |    |    ├── spring -- spring擴(kuò)展類
|    |    |    |    ├── support -- 基礎(chǔ)支持類
├── yan-core -- 核心模塊(提供核心方法)
|    ├── main -- 主模塊路徑
|    |    ├── java -- java類路徑
|    |    |    ├── com.yan.core -- 核心類包
|    |    |    |    ├── annotation -- 注解類
|    |    |    |    ├── aspect -- 切面類
|    |    |    |    ├── controller -- 控制器
|    |    |    |    ├── injector -- 注入類
|    |    |    |    ├── listener -- 消息消費者監(jiān)聽器
|    |    |    |    ├── shiro -- 安全認(rèn)證類
├── yan-dao -- 數(shù)據(jù)庫訪問模塊(該模塊主要通過 mbg 插件生成相應(yīng)的模型及接口映射)
|    ├── main -- 主模塊路徑
|    |    ├── java -- java類路徑
|    |    |    ├── com.yan.dao -- dao層包
|    |    |    |    ├── mapper -- 接口映射類
|    |    |    |    ├── model -- 數(shù)據(jù)庫模型類
|    |    ├── resources -- 資源配置路徑
|    |    |    ├── database -- 數(shù)據(jù)庫sql文件
|    |    |    ├── mybatis -- sqlMap映射文件
|    |    |    ├── properties -- 配置文件
├── yan-plugins -- 插件模塊(自定義插件)
|    ├── main -- 主模塊路徑
|    |    ├── java -- java類路徑
|    |    |    ├── com.yan.plugins -- 插件包
|    |    |    |    ├── mybatis.generator -- mbg插件類(包含注釋插件、序列化插件)
├── yan-service -- 服務(wù)模塊(核心接口方法實現(xiàn))
|    ├── main -- 主模塊路徑
|    |    ├── java -- java類路徑
|    |    |    ├── com.yan.service -- 服務(wù)包
|    |    |    |    ├── jms -- 消息服務(wù)接口實現(xiàn)類
|    |    |    |    ├── persistence -- 持久化接口實現(xiàn)類
├── yan-web -- web模塊
|    ├── main -- 主模塊路徑
|    |    ├── java -- java類路徑
|    |    |    ├── com.yan.web.controller -- 業(yè)務(wù)處理控制器包
|    |    ├── resources -- 資源配置路徑
|    |    |    ├── properties -- 項目配置文件
|    |    |    ├── spring -- spring的配置文件
|    |    ├── webapp -- web應(yīng)用根路徑
|    |    |    ├── common -- 公共路徑
|    |    |    ├── resources -- 靜態(tài)資源路徑
|    |    |    ├── views -- 視圖路徑

四晓猛、項目入門(Introduction)

  1. 下載項目饿幅,并且導(dǎo)入到IDE開發(fā)工具中(建議使用:IntelliJ IDEA)
  2. 使用 Maven 構(gòu)建項目
  3. 創(chuàng)建數(shù)據(jù)庫并執(zhí)行 yan-dao 模塊中 resources/database 路徑下的 yan.sql 文件,創(chuàng)建整個項目必要的表(如:用戶表戒职、資源表栗恩、日志記錄表等...)
  4. 分別修改 yan-dao、yan-service帕涌、yan-web 模塊中 resources/properties 路徑下的 *.properties 配置文件(具體修改方法及對應(yīng)屬性解釋摄凡,詳見 - 五、配置說明)
  5. 完成以上步驟就可以正常部署啟動服務(wù)了:

    a). 啟動 zookeeper 服務(wù)(必要服務(wù)蚓曼,不啟動該服務(wù)導(dǎo)致項目無法正常運行)

    b). 啟動 activemq 服務(wù)(非必要服務(wù)亲澡,若不啟動該服務(wù),則項目運行中會有jms監(jiān)聽器異常纫版,但不影響整體能)

    c). 啟動 solr 服務(wù)(非必要服務(wù)床绪,若不啟動該服務(wù),則搜索引擎無法使用其弊,但不影響整體功能)

    [以上服務(wù)具體配置及啟動命令癞己,這里我不多做闡述了,不知道的可自行百度搜索]
  6. 啟動完以上基礎(chǔ)的服務(wù)后梭伐,就可以運行項目了

    a). 首先啟動 yan-service痹雅,直接運行該模塊中的 com.yan.service.ServiceApp.main() 方法來啟動

    b). 其次啟動 yan-web ,可(使用 jetty / tomcat 均可)[詳細(xì)部署過程在這里就不多做闡述了]糊识,啟動成功后即可訪問web應(yīng)用界面绩社。接下來進(jìn)入開發(fā)階段
  7. 根據(jù)實際業(yè)務(wù)需求,在對應(yīng)的數(shù)據(jù)庫中創(chuàng)建業(yè)務(wù)表赂苗,表命名規(guī)范:“模塊名_表名” 如:SYS_RESOURCE(系統(tǒng)模塊資源表)
  8. 修改 yan-dao 模塊中 resources 路徑下的 generatorConfig.xml 中的 targetPackage 包名及 tableName 表名愉耙,使用 MyBatis generator 插件生成對應(yīng)的持久層模塊代碼(Maven 執(zhí)行命令:mvn mybatis-generator:generate),具體配置請參考MyBatis GeneratorXML Configuration
  9. yan-api 模塊中 src/main/java 路徑下創(chuàng)建對應(yīng)的接口
  10. yan-service 模塊中 src/main/java 路徑下創(chuàng)建對應(yīng)的接口服務(wù)實現(xiàn)類拌滋,并在 src/main/resources/META-INF/spring 路徑下的 spring-dubbo-provider.xml 配置中添加聲明暴露對應(yīng)服務(wù)接口
  11. yan-web 模塊中 src/main/java 路徑下創(chuàng)建對應(yīng)的 controller 控制器朴沿,該控制器類命名規(guī)范以 Controller 結(jié)尾,繼承 BaseController 類败砂,編寫 controller 控制器業(yè)務(wù)處理代碼(具體使用參考 - 七赌渣、示例代碼),并在 src/main/resources/spring/config 路徑下的 spring-dubbo-customer.xml 配置中添加聲明暴露對應(yīng)服務(wù)接口
  12. yan-web 模塊中 src/main/webapp/views 路徑下創(chuàng)建對應(yīng)的jsp頁面吠卷,并編寫前端頁面展示代碼

五锡垄、配置說明(Properties)

yan-dao 模塊 resources/properties 中配置文件說明

名稱(Key值) 描述
mbg.path mybatis generator 插件生成代碼的路徑(絕對路徑)
mbg.db.username mybatis generator 插件連接數(shù)據(jù)庫的用戶名
mbg.db.password mybatis generator 插件連接數(shù)據(jù)庫的密碼
mbg.db.driverClassName mybatis generator 插件連接數(shù)據(jù)庫的驅(qū)動
mbg.db.url mybatis generator 插件連接數(shù)據(jù)庫的地址

yan-service 模塊 resources/properties 中配置文件說明

名稱(Key值) 描述
default.datasource.username 默認(rèn)數(shù)據(jù)庫用戶名
default.datasource.password 默認(rèn)數(shù)據(jù)庫密碼
default.datasource.driverClassName 默認(rèn)數(shù)據(jù)庫驅(qū)動類
default.datasource.url 默認(rèn)數(shù)據(jù)庫鏈接地址
dextend.datasource.username 擴(kuò)展數(shù)據(jù)庫用戶名(用于多數(shù)據(jù)源切換)
dextend.datasource.password 擴(kuò)展數(shù)據(jù)庫密碼(用于多數(shù)據(jù)源切換)
dextend.datasource.driverClassName 擴(kuò)展數(shù)據(jù)庫驅(qū)動類(用于多數(shù)據(jù)源切換)
dextend.datasource.url 擴(kuò)展數(shù)據(jù)庫鏈接地址(用于多數(shù)據(jù)源切換)
datasource.initialSize 初始化時建立物理連接的個數(shù)
datasource.minIdle 最小連接池數(shù)量
datasource.maxActive 最大連接池數(shù)量
datasource.maxWait 獲取連接時最大等待時間,單位毫秒
datasource.timeBetweenEvictionRunsMillis 配置間隔多久才進(jìn)行一次檢測祭隔,檢測需要關(guān)閉的空閑連接,單位是毫秒
datasource.minEvictableIdleTimeMillis 配置一個連接在池中最小生存的時間,單位是毫秒
datasource.validationQuery 用來檢測連接是否有效的sql
datasource.testWhileIdle 建議配置為true疾渴,不影響性能千贯,并且保證安全性
datasource.testOnBorrow 申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能搞坝。
datasource.testOnReturn 歸還連接時執(zhí)行validationQuery檢測連接是否有效搔谴,做了這個配置會降低性能
datasource.poolPreparedStatements 是否緩存preparedStatement,也就是PSCache
datasource.maxPoolPreparedStatementPerConnectionSize 每個連接上PSCache的大小
datasource.filters 屬性類型是字符串桩撮,通過別名的方式配置擴(kuò)展插件敦第,常用的插件有:監(jiān)控統(tǒng)計用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
- -
dubbo.application.name dubbo 應(yīng)用服務(wù)提供者名稱
dubbo.protocol.port dubbo 協(xié)議暴露服務(wù)的端口
dubbo.registry.address dubbo 使用 zookeeper 注冊中心暴露服務(wù)的地址
- -
jms.brokerURL activeMQ 服務(wù)地址
jms.userName activeMQ 服務(wù)管理端用戶名
jms.password activeMQ 服務(wù)管理端密碼

yan-web 模塊 resources/properties 中配置文件說明

名稱(Key值) 描述
jms.brokerURL activeMQ 服務(wù)地址
jms.userName activeMQ 服務(wù)管理端用戶名
jms.password activeMQ 服務(wù)管理端密碼
- -
logback.name 日志文件前綴名稱(一般使用項目名稱,便于區(qū)分)
logback.path 日志存放路徑(絕對路徑)
logback.maxHistory 日志最大的歷史天數(shù)
logback.db.username 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的用戶名
logback.db.password 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的密碼
logback.db.driverClassName 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的驅(qū)動
logback.db.url 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的url
- -
setting.upload 文件上傳路徑(絕對路徑)
- -
solr.builder Solr搜索引擎服務(wù)地址

六店量、常用方法(Methods)

方法均在繼承于BaseController的controller類中使用this.metodName或直接使用methodName來進(jìn)行調(diào)用(注:methodName代表需要調(diào)用的方法名稱芜果,方法名稱見下表)
方法名 參數(shù) 返回值 描述
getSession HttpSession 服務(wù)器會話 獲取服務(wù)器會話 session 對象
setSession session 服務(wù)器會話 設(shè)置服務(wù)器會話 session 對象
getRequest HttpServletRequest 用戶請求 獲取用戶請求 request 對象
setRequest request 用戶請求 設(shè)置用戶請求 request 對象
getResponse HttpServletResponse 服務(wù)器響應(yīng)結(jié)果 獲取服務(wù)器響應(yīng)結(jié)果 response 對象
setResponse response 服務(wù)器響應(yīng)結(jié)果 設(shè)置服務(wù)器響應(yīng)結(jié)果 response 對象
getSessionUser TbSysUser 用戶對象 獲取登錄成功后 session 中的存儲的用戶信息
- - - -
getService DelegateService 通用 Service,查看自定義 sqlMap 的代理 service 對象 獲取 delegateService 對象
resultPage list 查詢到的分頁結(jié)果融师,為 Page 對象 PageModel<T> 自定義的分頁模型右钾,T 為查詢的對象 分頁結(jié)果集對象
resultMsg status 狀態(tài)值(可根據(jù)需求任意設(shè)置,無強(qiáng)制標(biāo)準(zhǔn))旱爆;msg 消息內(nèi)容舀射;res 返回的對象 MsgModel 自定義消息模型 消息返回對象
fileUpLoad request 上傳方法中傳遞的 request 對象,并非父類中的 request 對象 List<String> 上傳文件成功后的新文件名稱怀伦,以集合形式返回 文件上傳方法脆烟,支持多個文件上傳
fileDownLoad fileName 需要下載的文件名稱 ResponseEntity<byte[]> 下載的文件,在瀏覽器會進(jìn)行下載 文件下載方法
- - - -
isNull obj 需要進(jìn)行判斷的對象 boolean 為null或空返回 true房待,否則返回 false 判斷對象是否為null邢羔,或空
obj2Str obj 需要轉(zhuǎn)換的對象 String 對象的值(為null則返回"") 對象轉(zhuǎn)換為 String,通常用于獲取 Map 集合中的對象時使用
getUUID String 32位主鍵字符串 生成 uuid 主鍵吴攒,長度為32位张抄,且為大寫模式
base64Encoder str 需要進(jìn)行編碼的字符串 String 進(jìn)行編碼后的結(jié)果字符串 對字符串進(jìn)行 base64 編碼
base64Decoder str 已進(jìn)行 base64 編碼的編碼字符串 String 解碼后的原字符串 對字符串進(jìn)行 base64 解碼
md5 str 需要進(jìn)行 md5 加密的字符串 String 加密后的結(jié)果 對字符串進(jìn)行 md5 加密算法
currentDate pattern 獲取系統(tǒng)時間的格式,如:yyyy-MM-dd HH:mm:ss String 返回格式化后的當(dāng)前時間 獲取系統(tǒng)當(dāng)前時間
timeStamp2Date timestamp 需要進(jìn)行轉(zhuǎn)換的時間戳洼怔;pattern 轉(zhuǎn)換后的格式 String 格式化后的日期 時間戳轉(zhuǎn)換成日期
date2TimeStamp dateStr 需要進(jìn)行轉(zhuǎn)換的日期字符串署惯;pattern 日期的格式 String 轉(zhuǎn)換后的時間戳 日期轉(zhuǎn)換為時間戳
readFromFile filePath 文件路徑(絕對路徑) String 讀取的文件內(nèi)容 從指定文件中讀取文件內(nèi)容
writeToFile content 需要寫入文件中的內(nèi)容 filePath 文件路徑(絕對路徑) 將內(nèi)容寫入到指定文件中(寫入會覆蓋文件原有內(nèi)容,建議先讀取镣隶,再寫入极谊,將讀取的內(nèi)容與需要寫入的內(nèi)容并在一起進(jìn)行寫入)
generatePath path 文件夾路徑(絕對路徑) 生成指定路徑文件夾,先進(jìn)行判斷文件夾是否存在安岂,若不存在則創(chuàng)建對應(yīng)目錄的文件夾轻猖,若存在則不進(jìn)行任何操作
generateFile path 文件路徑(絕對路徑) 生成指定路徑的文件,先進(jìn)行判斷文件是否存在域那,若不存在則進(jìn)行創(chuàng)建文件咙边,若存在則不進(jìn)行任何操作
propertiesValue key 資源文件中的 key 值 String 讀取到的 key 對應(yīng)的 value 值 讀取 properties 文件中的值,讀取 classpath 下 /properties/config.properties 配置文件
propertiesValue resource 資源文件路徑(對應(yīng) classpath 中的路徑);key 資源文件中的 key 值 String 讀取到的 key 對應(yīng)的 value 值 讀取指定路徑 properties 文件中的值败许,會從 classpath 路徑下進(jìn)行查找資源文件

七王带、示例代碼(Codes)

創(chuàng)建一個繼承與BaseController的控制器
@Controller
public class XxxController extends BaseController {
    ...
}
獲取日志日志記錄Logger對象
// 方法一:使用注解獲取
@LogInject
private static Logger log;

// 方法二:使用工廠方法獲取
private static Logger log = LoggerFactory.getLogger(XxxController.class);
獲取service對象
// 獲取delegateService對象
@Autowired
private DelegateService delegateService;

// 獲取泛型Service對象
@Autowired
private XxxService xxxService;
分頁查詢后臺代碼
// 使用對象 service 分頁查詢數(shù)據(jù)
@RequestMapping("/list")
@ResponseBody
public PageModel<Xxx> list(int offset, int limit) {
    XxxExample example = new XxxExample();
   PageModel<Xxx> pageModel = xxxService.selectByExampleForOffsetPage(example, offset, limit);
   return pageModel;
}

// 使用 delegateService 自定義 sqlMap 分頁查詢數(shù)據(jù)
@RequestMapping("/list")
@ResponseBody
public PageModel<Xxx> list(int offset, int limit) {
    String statement = "com.yan.dao.mapper.xxx.XxxCustomMapper.getXxx";
    PageModel<Xxx> pageModel = delegateService.selectPagination(statement, offset, limit);
   return pageModel;
}

分頁查詢前臺代碼
<table id="table"><table>

$('#table').bsTable({
        url: '${pageContext.request.contextPath}/xxx/list',
        idField: 'id',
        columns: [
            {field: 'state', checkbox: true},
            {field: 'id', title: 'id', align: 'center'},
            ...
            ]
    });
文件上傳
@RequestMapping("/upload")
public String upload(HttpServletRequest request) {
    // 調(diào)用父類的上傳方法,在jsp中必須指定form為enctype="multipart/form-data"
    List<String> fileNames = this.fileUpLoad(request);
    return "success";
}
文件下載(在jsp頁面使用通用的下載方法市殷,使用restful風(fēng)格)
<a href="${pageContext.request.contextPath}/文件名稱/download">文件下載</a>
自定義文件下載后臺方法
@RequestMapping("/download")
public ResponseEntity<byte[]> download(String fileName) {
    // 調(diào)用父類文件下載方法
    return this.fileDownLoad(fileName);
}
常用 delegateService 方法
// 使用自定義sql模板查詢單個對象
Xxx xxx = delegateService.selectOne(statement);
Xxx xxx = delegateService.selectOne(statement, parameter);
        
// 使用自定義sql模板查詢對象集合
List<Xxx> list = delegateService.selectList(statement);
List<Xxx> list = delegateService.selectList(statement, parameter);

// 使用自定義sql模板有范圍的查詢愕撰,(每次返回指定的對象條數(shù)集合)
List<Xxx> list = delegateService.selectList(statement, parameter, rowBounds);

// 使用自定義sql模板進(jìn)行分頁查詢
PageModel<Xxx> pageModel = delegateService.selectPagination(statement, offset, limit);
PageModel<Xxx> pageModel = delegateService.selectPagination(statement, parameter, offset, limit);

// 使用自定義sql模板保存
int res = delegateService.insert(statement);
int res = delegateService.insert(statement, parameter);

// 使用自定義sql模板修改
int res = delegateService.update(statement);
int res = delegateService.update(statement, parameter);

// 使用自定義sql模板刪除
int res = delegateService.delete(statement);
int res = delegateService.delete(statement, parameter);
常用對象 service 方法
// 使用對象方法根據(jù)主鍵查詢
Xxx xxx = xxxService.selectByPrimaryKey(id);

// 使用對象方法根據(jù) criteria 查詢
List<Xxx> list = xxxService.selectByExample(example);

// 方法一:使用對象方法根據(jù) criteria 分頁查詢(推薦)
PageModel<Xxx> pageModel = xxxService.selectByExampleForOffsetPage(example, offset, limit);
// 方法二:使用對象方法根據(jù)criteria分頁查詢
PageModel<Xxx> pageModel = xxxService.selectByExampleForStartPage(example, pageNum, pageSize);

// 使用對象方法添加
int res = xxxService.insert(record);
int res = xxxService.insertSelective(record);

// 使用對象方法根據(jù)主鍵修改
int res = xxxService.updateByPrimaryKey(record);
int res = xxxService.updateByPrimaryKeySelective(record);

// 使用對象方法根據(jù) criteria 修改
int res = xxxService.updateByExample(record, example);
int res = xxxService.updateByExampleSelective(record, example);

// 使用對象方法根據(jù)主鍵刪除
int res = xxxService.deleteByPrimaryKey(productCode);

// 使用對象方法刪除根據(jù) criteria 刪除
int res = xxxService.deleteByExample(example);

更多方法使用請參考項目中的示例代碼

八、效果預(yù)覽(Preview)

login
web
mobile

九醋寝、許可證(License)

MIT License

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搞挣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子音羞,更是在濱河造成了極大的恐慌囱桨,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄选,死亡現(xiàn)場離奇詭異蝇摸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)办陷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門貌夕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人民镜,你說我怎么就攤上這事啡专。” “怎么了制圈?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵们童,是天一觀的道長。 經(jīng)常有香客問我鲸鹦,道長慧库,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任馋嗜,我火速辦了婚禮齐板,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葛菇。我一直安慰自己甘磨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布眯停。 她就那樣靜靜地躺著济舆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪莺债。 梳的紋絲不亂的頭發(fā)上滋觉,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天签夭,我揣著相機(jī)與錄音,去河邊找鬼椎瘟。 笑死覆致,一個胖子當(dāng)著我的面吹牛侄旬,可吹牛的內(nèi)容都是我干的肺蔚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼儡羔,長吁一口氣:“原來是場噩夢啊……” “哼宣羊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起汰蜘,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤仇冯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后族操,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苛坚,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年色难,在試婚紗的時候發(fā)現(xiàn)自己被綠了泼舱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡枷莉,死狀恐怖娇昙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笤妙,我是刑警寧澤冒掌,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站蹲盘,受9級特大地震影響股毫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜召衔,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一铃诬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧薄嫡,春花似錦氧急、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哑蔫,卻和暖如春钉寝,著一層夾襖步出監(jiān)牢的瞬間弧呐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工嵌纲, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留俘枫,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓逮走,卻偏偏與公主長得像鸠蚪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子师溅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容