myshop 概述
myshop項目是根據視頻教程 java 單體應用 做的一個練習項目,目前完成了登錄功能、用戶管理、類別管理后續有時間會繼續做其它的功能。趁著雙11花了99元一年買了臺阿里云服務器,演示地址>> myshop
項目地址 https://gitee.com/yehuabin/myshop
項目結構
my-shop-dependencies:管理jar包的版本,所有項目依賴此項目
my-shop-commons:項目通用工具、實體類
my-shop-domain: pojo類,對于數據庫一張表
my-shop-web-admin:后臺管理功能
my-shop-web-api、my-shop-web-ui:商城前端展示部分,目前還沒開發
basedao
1
2
3
4
5
6
|
public interface basedao<t> { int create(t model); int update(t model); int delete( int id); t getbyid( int id); } |
basedao定義了通用的數據操作接口其它具體的操作接口都繼承該dao
1
2
3
4
5
|
public interface tbuserdao extends basedao<tbuser> { tbuser getbyusernameandpasswrod(map<string,string> param); list<tbuser> getbypage(pagequery<tbuserquery> pagequery); int getcount(pagequery<tbuserquery> pagequery); } |
tbuserdao繼承basedao并定義了自己特有的一些接口
baseservice
1
2
3
4
5
6
|
public interface baseservice<t extends baseentity> { baseresult create(t model); t getbyid( int id); baseresult update(t model); baseresult delete( int id); } |
baseservice定義通用的服務接口,t 就是某個具體的domain對象
然后給這個通用服務接口定義一個通用的實現 baseserviceimpl。實現通用的crud
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public abstract class baseserviceimpl<t extends baseentity,d extends basedao<t>> implements baseservice<t> { @autowired protected d dao; @override public baseresult create(t model) { baseresult baseresult = entityvalidator.validate(model); if (!baseresult.issuccess()) { return baseresult; } model.setcreated( new date()); model.setupdated( new date()); return getbaseresult(dao.create(model), "新增失敗" ); } public t getbyid( int id) { return dao.getbyid(id); } public baseresult update(t model) { baseresult baseresult = entityvalidator.validate(model); if (!baseresult.issuccess()) { return baseresult; } model.setupdated( new date()); return getbaseresult(dao.update(model), "更新失敗" ); } public baseresult delete( int id) { return getbaseresult(dao.delete(id), "刪除失敗" ); } private baseresult getbaseresult( int row,string error){ baseresult baseresult = baseresult.success(); if (row<= 0 ){ baseresult=baseresult.fail(error); } return baseresult; } } |
用戶服務繼承baseservice并擴展了兩個方法
1
2
3
4
|
public interface userservice extends baseservice<tbuser> { pageresult<tbuser> getbypage(pagequery<tbuserquery> pagequery); tbuser login(string username, string password); } |
用戶服務的具體實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
@service public class userserviceimpl extends baseserviceimpl<tbuser,tbuserdao> implements userservice { @override public baseresult create(tbuser tbuser) { if (stringutils.isblank(tbuser.getpassword())) { return baseresult.fail( "密碼不能為空" ); } tbuser.setpassword(md5digestashex(tbuser.getpassword())); return super .create(tbuser); } @override public pageresult<tbuser> getbypage(pagequery<tbuserquery> pagequery) { pageresult<tbuser> result = new pageresult<>(); list<tbuser> list = dao.getbypage(pagequery); int count=dao.getcount(pagequery); result.setdata(list); result.setrecordstotal(count); result.setrecordsfiltered(count); return result; } @override public baseresult update(tbuser tbuser) { if (stringutils.isnotblank(tbuser.getpassword())) { tbuser.setpassword(md5digestashex(tbuser.getpassword())); } return super .update(tbuser); } @override public tbuser login(string username, string password) { map<string, string> param = new hashmap<>(); param.put( "username" , username); param.put( "password" , md5digestashex(password)); system.out.println(param.get( "password" )); return dao.getbyusernameandpasswrod(param); } private string md5digestashex(string password){ return digestutils.md5digestashex(password.getbytes()); } } |
basecontroller
basecontroller定義了通用的列表頁、表單頁、刪除操作的跳轉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
public abstract class basecontroller<t extends baseentity,s extends baseservice<t>> { @autowired protected s service; @modelattribute public t getmodel(integer id) { t model=initformentity(); if (id != null && id > 0 ) { model = service.getbyid(id); } return model; } @requestmapping ( "/list" ) public string list(model model) { return getjsppath()+ "/list" ; } @requestmapping (value = { "/create" , "edit" }, method = requestmethod.get) public string form() { return getjsppath()+ "/form" ; } @requestmapping ( "/detail" ) public string detail() { return getjsppath()+ "/detail" ; } @responsebody @requestmapping ( "/delete" ) public baseresult delete( int id) { return service.delete(id); } @requestmapping (value = { "/create" , "edit" }, method = requestmethod.post) public string form(t entity, model model) { baseresult baseresult; if (entity.getid() != null && entity.getid() > 0 ) { baseresult = service.update(entity); } else { baseresult = service.create(entity); } //新增或者修改成功返回列表頁 if (baseresult.issuccess()) { return "redirect:list" ; } //失敗顯示錯誤信息 model.addattribute( "result" , baseresult); return getjsppath()+ "/form" ; } protected abstract t initformentity(); protected string getjsppath(){ return getclass().getsimplename().tolowercase().replace( "controller" , "" ); } } |
任何其它模塊只要繼承basecontroller,就可以自動跳轉到列表、表單、刪除等頁面,可以大大減少代碼量
具體的usercontroller只需要實現特有的業務邏輯就可以
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@controller @requestmapping ( "/user" ) public class usercontroller extends basecontroller<tbuser,userservice> { @responsebody @requestmapping ( "/page" ) public pageresult<tbuser> page(pagequery<tbuserquery> pagequery, tbuserquery query) { pagequery.setquery(query); pageresult<tbuser> tbusers = service.getbypage(pagequery); return tbusers; } @override protected tbuser initformentity() { return new tbuser(); } } |
總結
以上所述是小編給大家介紹的spring+springmvc+mybatis 開發java單體應用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/yehuabin/p/9993497.html