-
springboot項目實戰筆記
查看全部 -
dataobject和model的區別:dataobject僅僅是映射數據庫;model是業務模型,該模型的屬性會來自于多個數據庫
查看全部 -
課堂筆記:
3.8?用戶模型管理--getotp頁面實現(16:00) ????1.?完成?getotp.html?頁面樣式的編寫。 ????2.?完成?button?提交業務的編寫 ????????????先實現頁面交互,再實現頁面美化。 ????????????a.?引入?jquery.js ????????????b.?編寫?js?代碼,實現?button?的?click?事件,用于向后端發送獲取短信驗證碼的請求。 ????????????????//?綁定?otp?的?click?事件用于向后端發送獲取短信驗證碼的請求 ????????????????//?使用?ajax?方式發送異步請求完成業務。 ????????????????//?為?Controller?中的?@RequestMapper?添加指定的?method,consumes(將其聲明到控制層基類中) ????????????????//?注意判空處理 ????????????????//?注意?button?自定義?click?方法后,該方法內應該返回?false,因為使用?ajax?發送請求處理業務,不需要常見的事件冒泡給?form?提交?POST?方法。 ????????????????//?注意程序中已經進行了統一異常處理,因此會盡可能返回了?success?HTTPstatus?=?200 ????????????c.?因為是從本地?html?中發送請求到?localhost?的?url?因此會出現跨域安全異常,雖然請求能夠到達控制層,并成功被控制層方法處理業務并返回,但是?ajax?請求會認為該請求是不安全的,因此走不到?success?塊中,并會給瀏覽器報錯。 ????????????????在?springboot?中處理?ajax?跨域請求的方式:只要讓?response?時刻返回?'Access-Control-Allow-Origin'?為所有的域,即?*?即可。 ????????????????SpringBoot?提供給我們一個簡單注解方式?@CrossOrigin?實現所有?SpringBoot?中所有請求返回對象帶上一個?Access-Control-Allow-Origin?標簽,即可實現跨域處理。 ????????????????@CrossOrigin?可使用在?controller?上,或方法級別上,也可以同時使用,Spring將合并兩個注釋屬性以創建合并的CORS配置。 ????????????????該注解可以有2個參數: ???????????????????origins?:允許可訪問的域列表 ???????????????????maxAge:準備響應前的緩存持續的最大時間(以秒為單位)。 ????3.??Ajax跨域請求問題,設置一下屬性就可以了, ????????前端?Ajax?請求中添加?xhrFields:?{withCredentials:?true}, ????????后端?controller?層添加?@CrossOrigin(origins?=?"*",?allowCredentials?=?"true")?就可以訪問了
查看全部 -
課堂筆記:
3.6?用戶模型管理-otp驗證碼獲取 ????0.?基礎能力建設 ????????????springboot?+?MVC?+?mybatis?框架搭建,外加常態的錯誤異常定義、正確的返回值類型定義。 ???????模型能力管理 ????????????領域模型管理(如?user?對象就是一個用戶領域的一個模型),包括完整的生命周期。用戶模型、商品模型、秒殺模型等。 ????????????????用戶信息管理: ????????????????????otp?短信獲取 ????????????????????otp?注冊用戶 ????????????????????用戶手機號登錄 ????1.?用戶獲取?otp?短信驗證碼 ????????a.?需要按照一定的規則生產OTP?驗證碼 ????????b.?將?OTP?驗證碼通對應用戶的手機號關聯(一般使用Redis處理,此處采用?session?模仿實現) ????????????使用?spring?注入方式注入一個?HttpServletRequest?對象,該對象其實是通過?spring?bean?包裝的?request?對象本質是?proxy?模式(spring?在注入?HttpServletRequest?時,發現如果注入的是?一個?ObjectFactory?類型的對象時,就會將注入的?bean?替換成一個?JDK?動態代理對象,代理對象在執行?HttpServletRequest?對象里的方法時,就會通過?RequestObjectFactory.getObject()?獲取一個?新的?request?對象來執行。),即多例模式?。 ????????????Spring能實現在多線程環境下,將各個線程的request進行隔離,且準確無誤的進行注入,奧秘就是ThreadLocal.?它的內部擁有?ThreadLocal?方式的?map,去讓用戶在每個線程中處理自己對應的?request?中的數據,并且有ThreadLocal清除的機制。 ????????c.?將?OTP?驗證碼通關短信通道發送給用戶
查看全部 -
3.5?定義通用的返回對象-異常處理02 ????1.?為?handlerException()?方法繼續添加?@ResponseBody?注解即可將返回的?object?返回給前端頁面。 ????????????該方式會將異常的所有棧信息序列化后輸出到前端頁面,因此還需要繼續處理,只將前端需要的異常信息返回給前端。 ????2.?將?ex?強轉為?BusinessException?,然后使用其?getErrCode、getErrMsg?方法獲取前端需要的異常信息,將其封裝為?Map?后封裝到?CommonReturnType?對象中,然后再返回給前端。 ????3.?優化:使用?CommonReturnType?的靜態方法?create?構造對象并返回。 ????4.?繼續完善該方法。 ????????????判斷?exception?是否為?BusinessException?類型,如果不是則為?CommonReturnType?對象賦值?errCode?為?EmBusinessError?枚舉中的?UNKNOWN_ERROR?的?code?和?msg。 ????5.?繼續優化異常處理。 ????????????因為該處理方式是所有?controller?都需要的方式,因此將其抽象為?BaseController?中的方法,然后讓其他?controller?組件去繼承該?controller。 ????6.?總結:a.?定義一個?CommonReturnType,?能夠用對應的?status,?object?的方式返回所有的被?JSON?序列化對象,供前端解析使用,摒棄掉了使用?httpstatuscode?+?內線?tomcat?自帶的?error?頁面方式去處理響應數據以及異常。 ????????????b.?并且定義了一個?BusinessException?,統一管理我們自定義的錯誤碼。 ????????????c.?然后,在?BaseController?中定義一個所有?Controller?的基類,使用其中注解了?@ExceptionHandler?的方法來處理所有被?Controller?層捕獲的異常。 ????????????????按照異常的種類由2種處理方式,一種是自定義?BusinessException,?其中有自定義的?error?的?code?和?msg,一種是未知的異常,采用統一處理方式。 ????????????d.?異常處理方法上還可以添加日志相關組件,方便項目運行記錄與錯誤排查。
查看全部 -
Enum 中的 int 類型的狀態碼,如果以 0 開頭,則會在 controller 組件中返回到前端時,如果使用了 JSON 序列化,解析時則會省略數字前的 0,因此,不應該使用 0 開頭。
正例:10001、10002、20001
反例:00001、00002
查看全部 -
3.2?定義通用的返回對象-返回正確信息 ????1.?通用的返回對象。方便前端解析數據。 ????????首先,定義返回對象類型?class?com.miaoshaproject.response.CommonReturnType,?包含?String?status,?Object?date?2個屬性。 ????????然后,定義?二重奏創建對象方法,?create(Object?result)-(該方法中如果沒給?status?參數則給出默認值"success")?調用?create(Object?result,?String?status), ????2.?返回的數據為?Object?對象。 ????????????若?status?=?success?,則返回前端需要的?JSON?數據。 ????????????若?status?=?fail?,?則返回通用的錯誤碼格式。 ????3.?修改?controller?層中的方法,將返回值修改為?CommonReturnType?類型的對象。 ????4.?查看運行效果。
查看全部 -
3.1?使用SpringMVC方式開發用戶信息 ????1.?搭建?MVC?層次組件 ????????創建?controller?層目錄,并編寫?UserController,包含一個?getUser(Integer?id)?方法,注意添加注解。 ????????創建?service?層目錄,并編寫?UserService?接口以及?UserSServiceImpl?實現類,包含?getUserById(Integer?id)?方法,其中使用了?UserDOMapper. ????2.?除了?UserDO?表示與數據庫對應的數據對象類外,?service?層業務領域也應該有與?DO?對象不同的對象?model,?即業務領域對象,用來封裝?DO?對象,避免直接將?DO?對象返回給前端。 ????????創建?service?層領域模型對象:?com.miaoshaproject.service.model.UserModer,?其中封裝從?DO?到?model?封裝方法。 ????????為?userPasswordDOMapper?添加?selectByUserId(Integer?id)?方法,實現通過用戶?id?查找對應的用戶加密密碼信息。 ????3.?編寫?userController?中的?getUser()?方法,返回領域模型?userModel,?測試是否可以通過前端成功訪問。 ????4.?創建一個前端模型對象?UserVO,?用來封裝可以返回給前端的對象數據信息,不包含前端非必要屬性字段。其中包含?convertFromModel(model)?方法,用來將核心領域模型?model?對象封裝成可供前端使用的?VO?對象。 ????5.?需要注意的是?DO、VO、Model?對象中的屬性類型必須一致,字段名同樣要一致,才可以使用?BeanUtils.copyProperties(srcObj,?tarObj)?方法,否則會丟失不一致屬性中的數據。
查看全部 -
2.4?Mybatis自動生成器的使用方式 ????1.?mybatis-core版本要和mybatis-maven-plugin版本要一致 ????2.?mybatis-generator.xml?中的配置 ????3.?配置?maven?Command?line?:?mybatis-generator:generate?-e?-X ????????注意?:?generate?前是?: ????4.?生成后,需要給?mapper?接口添加注解 ????5.?application.properties?中添加數據源配置 ???????? ????????#?接入?mybatis?對應的數據源 ????????spring.datasource.name=miaosha ????????spring.datasource.url=jdbc:mysql://127.0.0.1:3306/miaosha?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false ????????spring.datasource.username=root ????????spring.datasource.password=1234 ???????? ????????#?使用?druid?數據源 ????????spring.datasource.type=com.alibaba.druid.pool.DruidDataSource ????????spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
查看全部
舉報
0/150
提交
取消