如果要使用日期類型
需要在html最下面script中寫入
<script>
? ? laydate.render({
????????????elem:'#控件id'
? ? });
</script>
添加數(shù)據(jù)功能
數(shù)據(jù)庫id要為bigint類型
實(shí)體類的id添加下面注釋
@TableId(value ="id", type = IdType.ID_WORKER) 就可以自動生成id
刪除功能
首先獲取選取的行 然后在行[0]獲取id? 再根據(jù)這個id傳給后臺進(jìn)行刪除 傳入時id為String類型? 后臺需要將他轉(zhuǎn)為Long類型
修改功能
????還是首先獲取選取的行 然后在行[0]獲取id,然后將這個id傳給后臺跳轉(zhuǎn)頁面的接口,根據(jù)這個id可以動態(tài)生成頁面,生成的頁面數(shù)據(jù)就是選中的數(shù)據(jù),然后修改后提交給后臺,通過input id="id" value="${item.id}" type="hidden"傳入id
前臺日歷時間和后臺數(shù)據(jù)庫時間不一致
修改后臺yml配置文件的連接數(shù)據(jù)庫url? ? ?serverTimezone=Hongkong
面對不同開發(fā)環(huán)境可以通過
---來進(jìn)行分割? 這是spring profiles的功能
Wrapper初步理解
????首先controller層查詢數(shù)據(jù)后必須是List<Map<String,Object>>或者M(jìn)ap<String,Object>類型,然后給自定義的一個Wrapper包裝
? ? 自定義的Wrapper要繼承extends BaseControllerWarpper? 然后構(gòu)造函數(shù)中
public UserWarpper(List> list) {
????super(list);
}? 讓父類去處理
? ? 然后重寫warpTheMap的方法,自己進(jìn)行包裝
比如
map.put("sexName", ConstantFactory.me().getSexName((Integer) map.get("sex")));
sexName:經(jīng)過包裝后的Map Key
sex:數(shù)據(jù)庫列的名字,通過這個名字去字典查找相應(yīng)的值
在IConstaantFactory接口類中寫這個獲取值的方法
然后在ConstaantFactory類中寫實(shí)現(xiàn)剛剛的那個方法,在這個方法中調(diào)用
return getDictsByName("性別", sex);? 意思就是在字典中查找對應(yīng)的值
第一個參數(shù)寫類型,第二個參數(shù)寫的是值 比如 性別:1? 然后就能返回相應(yīng)的中文字段了
創(chuàng)建一個字典映射類
目前好像只用在日志記錄中
創(chuàng)建一個類如UserDict 繼承 AbstractDictMap
重寫他的init方法 在里面寫
put(字段名,對用中文名中文)
initBeWrapped方法
用于存放些某些需要字典翻譯的字段名
如:
putFieldWrapperMethodName(sex,getSexName)
因?yàn)?sex 1對應(yīng)男 2對應(yīng)女 這種字段就需寫在initBeWrapped中
業(yè)務(wù)日志功能
在Controller層中添加
@BussinessLog注解(value="業(yè)務(wù)名稱",key="用來唯一標(biāo)識,當(dāng)一個不能標(biāo)識的時候可以填兩個",dict="UserDict,class") 字典用于查找某些值對應(yīng)的中文名稱
key的值和UserDict里面的屬性值想對應(yīng)
GUNS中使用SWAGGER
只需要在控制層里面得方法中添加@ApiOperation("添加訂單")注解就可以了
@RequestParam 對應(yīng)得paramType="querry"
@PathVariable 對應(yīng)得paramType="path"
@RequestBody 對應(yīng)得paramType="body"
獲取登陸用戶信息
ShiroUser user = ShiroKit.getUser();
@Permission
不加參數(shù)就是按正常權(quán)限來看能否訪問
這個正常權(quán)限是檢測你請求的路徑有沒有你的權(quán)限
@Permission(參數(shù))
里面的參數(shù)是什么就是什么角色可以訪問
就是角色管理里面的別名
如果想自定義權(quán)限 需要在Const接口類中添加常量
${tips!}
tips是后端model傳入的值 在前臺頁面如果為空則不顯示?
Guns框架使用的表單驗(yàn)證是寫在js的? 用的是bootstrapValidator.js
第一步
在info.js中
InfoDlg中
:validateFields: {
????account: {
????????validators: {
????????????notEmpty: {
????????????????message:'賬戶不能為空'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ?}
}
添加需要驗(yàn)證的字段
第二步:
/**
* 驗(yàn)證數(shù)據(jù)是否為空
*/
MyOrderInfoDlg.validate =function () {
$('#MyOrderInfoForm').data("bootstrapValidator").resetForm();
? ? $('#MyOrderInfoForm').bootstrapValidator('validate');
? ? return $("#MyOrderInfoForm").data('bootstrapValidator').isValid();
};
MyOrderInfoForm:是需驗(yàn)證表單的id
第三步:
在ajax請求中
if (!this.validate()) {
return;
}
開啟驗(yàn)證
第四步:
$(function() {
Feng.initValidator("MyOrderInfoForm", MyOrderInfoDlg.validateFields);
});
初始化驗(yàn)證
https://blog.csdn.net/asd245025733/article/details/78061577?locationNum=7&fps=1
這個博客說明了各種驗(yàn)證的方法.
想使用不同模板
重新創(chuàng)建一個模板文件? 重新創(chuàng)建一個TemplateEngine類 修改對應(yīng)的模板路徑
最后在AbstractGeneratorConfig的doGunsGeneration方法中將GunsTemplateEngine改為你自己的模板引擎
動態(tài)查詢功能
1.在html頁面中增加輸入框
如:
<div class="col-sm-3">
? ? <#NameCon id="goodsid" name="訂單id" />
</div>
2.在js文件下的search方法中獲取輸入框?qū)?yīng)的值
如:
queryData['goodsid'] =$("#goodsid").val();
3.在后臺方面,在控制層參數(shù)上添加@RequestParam(required =false) String goodsid獲取對應(yīng)的值
4.新建一個實(shí)體Wrapper對象
如:
EntityWrapper myOrderEntityWrapper=new EntityWrapper<>();
5.判斷每個查詢條件是否為空,若不為空則:
myOrderEntityWrapper.like("id",goodsid);
6.最后返回查詢數(shù)據(jù)
return secondService.selectList(myOrderEntityWrapper);
數(shù)據(jù)范圍
myOrderEntityWrapper.in("deptid",ShiroKit.getDeptDataScope());
思路:前臺不傳入deptid,后臺獲取當(dāng)前用戶的deptid
test.setDeptid(ShiroKit.getUser().deptId);就可以了
事務(wù)
事務(wù)的四個特性
原子性(Atomicity):事務(wù)是一個原子操作,由一系列動作組成。事務(wù)的原子性確保動作要么全部完成,要么完全不起作用。
一致性(Consistency):一旦事務(wù)完成(不管成功還是失?。?,系統(tǒng)必須確保它所建模的業(yè)務(wù)處于一致的狀態(tài),而不會是部分完成部分失敗。在現(xiàn)實(shí)中的數(shù)據(jù)不應(yīng)該被破壞。
隔離性(Isolation):可能有許多事務(wù)會同時處理相同的數(shù)據(jù),因此每個事務(wù)都應(yīng)該與其他事務(wù)隔離開來,防止數(shù)據(jù)損壞。
持久性(Durability):一旦事務(wù)完成,無論發(fā)生什么系統(tǒng)錯誤,它的結(jié)果都不應(yīng)該受到影響,這樣就能從任何系統(tǒng)崩潰中恢復(fù)過來。通常情況下,事務(wù)的結(jié)果被寫到持久化存儲器中。
隔離性
如果不考慮隔離性產(chǎn)生的三種后果:
1.臟讀:在一個事務(wù)中,讀取了另一個未提交事務(wù)中的數(shù)據(jù).
2.不可重復(fù)讀:一個事務(wù)范圍內(nèi)多次查詢,返回了不同數(shù)據(jù)值(由于在查詢間隔被另一個事務(wù)修改了)
3.幻讀:一個事務(wù)批量修改表中的所有數(shù)據(jù),這時另一個事務(wù)往表里新增了一條記錄,導(dǎo)致第一個事務(wù)發(fā)現(xiàn)修改完之后落了一條,就跟產(chǎn)生幻覺一樣.
Mysql提供的四種隔離級別
isolation=Isolation.DEFAULT
Serializable (串行化):可避免臟讀、不可重復(fù)讀、幻讀的發(fā)生。
Repeatable read (可重復(fù)讀):可避免臟讀、不可重復(fù)讀的發(fā)生(默認(rèn)的隔離級別) 。(默認(rèn))
Read committed (讀已提交):可避免臟讀的發(fā)生。
Read uncommitted (讀未提交):最低級別,任何情況都無法保證。
然級別越高,執(zhí)行效率就越低。
傳播行為
propagation=Propagation.REQUIRED
當(dāng)事務(wù)方法被另一個事務(wù)方法調(diào)用時,須指定事務(wù)應(yīng)該如何傳播。
事務(wù)的傳播行為:
PROPAGATION_REQUIRED--表示當(dāng)前方法必須運(yùn)行在事務(wù)中。如果當(dāng)前事務(wù)存在,方法將會在該事務(wù)中運(yùn)行。否則,會啟動一個新的事務(wù)(默認(rèn))
PROPAGATION_SUPPORTS--表示當(dāng)前方法不需要事務(wù),但是如果存在當(dāng)前事務(wù)的話,那么該方法會在這個事務(wù)中運(yùn)行,如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。
PROPAGATION_MANDATORY--表示該方法必須在事務(wù)中運(yùn)行,如果當(dāng)前事務(wù)不存在,則會拋出一個異常。
PROPAGATION_REQUIRES_NEW--表示當(dāng)前方法必須運(yùn)行在它自己的事務(wù)中。一個新的事務(wù)將被啟動。如果存在當(dāng)前事務(wù),在該方法執(zhí)行期間,當(dāng)前事務(wù)會被掛起。
PROPAGATION_NOT_SUPPORTED--表示該方法不應(yīng)該運(yùn)行在事務(wù)中。如果存在當(dāng)前事務(wù),在該方法運(yùn)行期間,當(dāng)前事務(wù)將被掛起。
PROPAGATION_NEVER--表示當(dāng)前方法不應(yīng)該運(yùn)行在事務(wù)上下文中。如果當(dāng)前正有一個事務(wù)在運(yùn)行,則會拋出異常
PROPAGATION_NESTED--一個事務(wù)內(nèi)部嵌套事務(wù)的執(zhí)行不會影響外部事務(wù),但外部事務(wù)的執(zhí)行要影響內(nèi)部
REST框架使用流程
????先訪問auth接口獲得隨機(jī)字符串和token
????客戶端通過這個隨機(jī)字符串當(dāng)作鹽先將要發(fā)送的數(shù)據(jù)轉(zhuǎn)化為json,在進(jìn)行base64加密,在進(jìn)行md5加密獲得對象和簽名.
? ? 客戶端再訪問hello接口,在body當(dāng)中傳入剛剛生成的object和sign? 要以raw和json的形式發(fā)送,在請求頭上
添加Authorization:Bearer+剛剛從auth獲取的token值
例如:Bearer eyJhbGciOiJIUzUxMiJ9.eyJyYW5kb21LZXkiOiIzbmhhZ20iLCJzdWIiOiJhZG1pbiIsImV4cCI6MTUzNzg3NzM3OCwiaWF0IjoxNTM3MjcyNTc4fQ.slc5CDGe1Py6Ieo86fpQHlEIQhX8Um3la4z6OnJxVDQHCd_QATMbwvG_ORqJpx3UEFX10g7EJpzdKEC3Y9cI4g
和Content-Type:application/json
就驗(yàn)證成功了