一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring+springmvc+mybatis 開發JAVA單體應用

spring+springmvc+mybatis 開發JAVA單體應用

2021-06-15 10:19葉de第柒章 Java教程

這篇文章主要介紹了spring+springmvc+mybatis 開發JAVA單體應用的相關知識,本文通過圖文實例代碼的形式給大家介紹的非常詳細 ,需要的朋友可以參考下

myshop 概述

myshop項目是根據視頻教程 java 單體應用 做的一個練習項目,目前完成了登錄功能、用戶管理、類別管理后續有時間會繼續做其它的功能。趁著雙11花了99元一年買了臺阿里云服務器,演示地址>> myshop

項目地址 https://gitee.com/yehuabin/myshop

spring+springmvc+mybatis 開發JAVA單體應用

spring+springmvc+mybatis 開發JAVA單體應用

spring+springmvc+mybatis 開發JAVA單體應用

spring+springmvc+mybatis 開發JAVA單體應用

項目結構

spring+springmvc+mybatis 開發JAVA單體應用

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜日本大胆裸艺术 | 勾搭已婚高h | 4438全国免费观看 | 亚洲精品午夜视频 | 亚洲精品视频网 | 99热在这里只有精品 | 三上悠亚精品专区久久 | 国产亚洲欧美日韩综合综合二区 | igao网果冻传媒 | 日韩高清一区二区 | 青草青青在线 | 亚洲色图首页 | 国产亚洲欧美成人久久片 | 亚洲精品成人在线 | 男人的天堂在线观看视频不卡 | 色琪琪久久草在线视频 | 邪恶肉肉全彩色无遮盖 | 男人资源站 | 91日本在线 | 青青热久免费精品视频网站 | 国产在视频线在精品 | 九九大香尹人视频免费 | 无人在线高清免费看 | 国内视频一区二区三区 | poren18美女 | 三上悠亚精品专区久久 | 日本一级不卡一二三区免费 | 被强迫变性翘秘书 | 国产馆 | 亚洲冬月枫中文字幕在线看 | 久久久久久久伊人电影 | 毛片小视频 | www亚洲精品 | 欧美日韩精品一区二区三区视频在线 | 国产一卡2卡3卡四卡高清 | 果冻传媒在线视频观看免费 | 色哟哟观看 | 亚洲男gay同性同志 亚洲免费在线看 | 精品视频国产 | 欧美一级欧美一级高清 | 全彩孕交漫画福利啪啪吧 |