Yan 項目簡介(Instruction)
項目已托管至Github,請前往https://github.com/micyo202/yan查看源碼
注:最新基于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)
項目所需工具及版本 *
- zookeeper-3.4.11 http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11
- apache-activemq-5.15.2 http://activemq.apache.org/activemq-5152-release.html
- solr-7.1.0 https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.1.0
一廊酣、項目開發(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)
三、項目結(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)
- 下載項目饿幅,并且導(dǎo)入到IDE開發(fā)工具中(建議使用:IntelliJ IDEA)
- 使用 Maven 構(gòu)建項目
- 創(chuàng)建數(shù)據(jù)庫并執(zhí)行 yan-dao 模塊中 resources/database 路徑下的 yan.sql 文件,創(chuàng)建整個項目必要的表(如:用戶表戒职、資源表栗恩、日志記錄表等...)
- 分別修改 yan-dao、yan-service帕涌、yan-web 模塊中 resources/properties 路徑下的 *.properties 配置文件(具體修改方法及對應(yīng)屬性解釋摄凡,詳見 - 五、配置說明)
- 完成以上步驟就可以正常部署啟動服務(wù)了:
a). 啟動 zookeeper 服務(wù)(必要服務(wù)蚓曼,不啟動該服務(wù)導(dǎo)致項目無法正常運行)
b). 啟動 activemq 服務(wù)(非必要服務(wù)亲澡,若不啟動該服務(wù),則項目運行中會有jms監(jiān)聽器異常纫版,但不影響整體能)
c). 啟動 solr 服務(wù)(非必要服務(wù)床绪,若不啟動該服務(wù),則搜索引擎無法使用其弊,但不影響整體功能)
[以上服務(wù)具體配置及啟動命令癞己,這里我不多做闡述了,不知道的可自行百度搜索]- 啟動完以上基礎(chǔ)的服務(wù)后梭伐,就可以運行項目了
a). 首先啟動 yan-service痹雅,直接運行該模塊中的 com.yan.service.ServiceApp.main() 方法來啟動
b). 其次啟動 yan-web ,可(使用 jetty / tomcat 均可)[詳細(xì)部署過程在這里就不多做闡述了]糊识,啟動成功后即可訪問web應(yīng)用界面绩社。接下來進(jìn)入開發(fā)階段- 根據(jù)實際業(yè)務(wù)需求,在對應(yīng)的數(shù)據(jù)庫中創(chuàng)建業(yè)務(wù)表赂苗,表命名規(guī)范:“模塊名_表名” 如:SYS_RESOURCE(系統(tǒng)模塊資源表)
- 修改 yan-dao 模塊中 resources 路徑下的 generatorConfig.xml 中的 targetPackage 包名及 tableName 表名愉耙,使用 MyBatis generator 插件生成對應(yīng)的持久層模塊代碼(Maven 執(zhí)行命令:mvn mybatis-generator:generate),具體配置請參考MyBatis GeneratorXML Configuration
- 在 yan-api 模塊中 src/main/java 路徑下創(chuàng)建對應(yīng)的接口
- 在 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ù)接口
- 在 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ù)接口
- 在 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);
更多方法使用請參考項目中的示例代碼