プロジェクト紹介
このプロジェクトはフロントエンドとバックエンドのプロジェクトで、一般ユーザーと管理者の役割が分かれており、一般ユーザーはフロント、管理者はバックエンドでログインすることになります。
管理者の役割には次の機能が含まれます:
管理者ログイン、ユーザー管理、花のカテゴリ管理、花の管理、注文管理と配送、メッセージ管理、システム アナウンス管理およびその他の機能。
ユーザーの役割には、次の機能が含まれます。
Web サイトは、ユーザーのホームページ、ユーザー登録とログイン、花の詳細ビュー、ショッピング カートへの商品の追加、注文確認、個人注文ビュー、モールのメッセージ ボードを提供します。モールのアナウンスやその他多くの機能。
環境要件
1. 実行環境: できれば Java jdk 1.8、このプラットフォームで実行します。理論的には他のバージョンも可能です。
2. IDE 環境: IDEA、Eclipse、Myeclipse がすべて利用可能です。推奨アイデア;
3. Tomcat 環境: Tomcat 7.x、8.x、9.x バージョンが利用可能
4. ハードウェア環境: Windows 7/8/10 1G メモリ以上; または Mac OS;
5. データベース: MySql バージョン 5.7;
6. Maven プロジェクトかどうか: いいえ;
テクノロジー スタック
1. バックエンド :Spring SpringMVC Mybatis
2. フロントエンド : JSP jQuery Ajax
使用方法
1. Navicat などのツールを使用して、対応するデータベースを作成します。 mysql に名前を付けてインポートします プロジェクトの SQL ファイル;
2. IDEA/Eclipse/MyEclipse を使用してプロジェクトをインポートします Eclipse/MyEclipse にインポートする場合、Maven プロジェクトの場合は Maven を選択してください。 Maven プロジェクトの場合は、インポートが成功した後に maven clean を実行し、maven install コマンドを実行してから、
3 を実行してください。プロジェクト内の jdbc.properties 構成ファイル内のデータベース構成を独自のものに変更します。構成;
4. プロジェクトを実行し、「localhost:8080/」と入力してログインします
ユーザー アカウント/パスワード: user/123456
管理者アカウント/パスワード: admin/admin
レンダリング表示
/**
* 商品
**/
@RestController
@RequestMapping("flower")
public class FlowerController {
@Autowired
FlowersService flowerService;
@Autowired
FlowersDao flowersDao;
@RequestMapping("/test")
R test() {
R r = new R();
return r;
}
//find
@RequestMapping("/find")
R find(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey, @RequestParam("searchType") String searchType) {
R r = new R();
List<Flower> flowers = flowerService.find(searchKey, searchType);
if (flowers == null) {
return r.setCode(2000);
}
return getResponse(flowers, page, Constant.SHOW_PAGE_SIZE, r);
}
// 管理员查询所有
@RequestMapping("/findAll")
R findAll(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey) {
R r = new R();
List<Flower> flowers = flowerService.findAll(searchKey);
if (flowers == null) {
return r.setCode(2000);
}
return getResponse(flowers, page, Constant.PAGE_SIZE, r);
}
// 返回结果
private R getResponse(List<Flower> flowers, int page, int pageSize, R r) {
Map<String, Object> map = new HashMap<>();
List<Flower> items = flowers.size() >= page * pageSize ?
flowers.subList((page - 1) * pageSize, page * pageSize)
: flowers.subList((page - 1) * pageSize, flowers.size());
int len = flowers.size() % pageSize == 0 ? flowers.size() / pageSize
: (flowers.size() / pageSize + 1);
for (Flower item : items) {
if (item.getImg_guid() == null) {
item.setImg_guid(Constant.DEFAULT_IMG);
}
item.setImg_guid(Constant.IMG_USE_PATH + item.getImg_guid());
}
map.put("items", items);
map.put("len", len);
return r.setCode(2000).setData(map);
}
@RequestMapping("/create")
R create(@RequestBody Flower flower) {
R r = new R();
int ans = flowerService.add(flower);
if (ans == 1) {
return r.setCode(2000).setMsg(HttpMsg.ADD_FLOWER_OK);
}
return r.setCode(4000).setMsg(HttpMsg.ADD_FLOWER_FAILED);
}
@RequestMapping("/update")
R update(@RequestBody Flower flower) {
R r = new R();
int ans = flowerService.update(flower);
if (ans >= 0) {
return r.setCode(2000).setMsg(HttpMsg.UPDATE_FLOWER_OK);
}
return r.setCode(4000).setMsg(HttpMsg.UPDATE_FLOWER_FAILED);
}
@RequestMapping("/changeState")
R changeState(@RequestBody Flower flower) {
R r = new R();
flowersDao.changeState(flower);
String msg = flower.getState() == 1?HttpMsg.GOODS_UP_OK:HttpMsg.GOODS_DOWN_OK;
return r.setCode(2000).setMsg(msg);
}
// 保存上传的图片
@RequestMapping("/updateImg")
R updateImg(@RequestParam("file") MultipartFile file) {
R r = new R();
// 只接收 jpg/png 图片
String filename = file.getOriginalFilename();
if (!filename.endsWith(".jpg") && !filename.endsWith(".png")){
return r.setCode(4000).setMsg(HttpMsg.ERROR_FILE_TYPE);
}
String img_guid = UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
try {
savePic(file.getInputStream(), img_guid);
return r.setCode(2000).setMsg(HttpMsg.UPDATE_PIC_OK).setData(img_guid);
} catch (IOException e) {
return r.setCode(4000).setMsg(HttpMsg.UPDATE_PIC_FAILED);
}
}
@PutMapping("/updateImgGuid")
R updateImgGuid(@RequestParam("guid") String guid, @RequestParam("id") int id) {
R r = new R();
int ans = flowerService.updateImg(guid, id);
if (ans == 1) {
return r.setCode(2000).setMsg(HttpMsg.UPDATE_PIC_OK);
}
return r.setCode(4000).setMsg(HttpMsg.UPDATE_PIC_FAILED);
}
@DeleteMapping("/delete")
R delete(@RequestParam("id") int id) {
R r = new R();
int ans = flowerService.delete(id);
if (ans == 1) {
return r.setCode(2000).setMsg(HttpMsg.DELETE_FLOWER_OK);
}
return r.setCode(4000).setMsg(HttpMsg.DELETE_FLOWER_FAILED);
}
private void savePic(InputStream inputStream, String fileName) {
OutputStream os = null;
try {
String path = Constant.IMG_PATH;
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流保存到本地文件
os = new FileOutputStream(new File(path + fileName));
// 开始读取
while ((len = inputStream.read(bs)) != -1) {
os.write(bs, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 完毕,关闭所有链接
try {
os.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
注文管理コントロール層/**
* 用户
**/
@RestController
@RequestMapping("order")
public class OrderController {
@Autowired
OrderService orderService;
@Autowired
UserDao userDao;
@Autowired
OrderDao orderDao;
@Autowired
FlowersDao flowersDao;
@RequestMapping("/test")
R test() {
R r = new R();
return r.setCode(4000).setMsg(Constant.IMG_PATH).setData(orderDao.findAll(null));
}
@RequestMapping("/queryByAccount")
R queryByAccount(@RequestParam("account") String account) {
R r = new R();
if (StringUtil.isEmpty(account)) {
return r.setCode(4000).setMsg(HttpMsg.INVALID_PARAM);
}
List<Order> orders = orderService.queryByAccount(account);
return r.setCode(2000).setData(orders);
}
@RequestMapping("/find")
R find(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey, @RequestParam("account") String account) {
R r = new R();
Map<String, Object> map = new HashMap<>();
List<Order> orders = orderService.find(searchKey, account);
if (orders == null) {
return r.setCode(2000);
}
map.put("items", orders);
map.put("len", orders.size());
return r.setCode(2000).setData(map);
}
@RequestMapping("/findAll")
R findAll(@RequestParam("page") int page, @RequestParam("searchKey") String searchKey) {
R r = new R();
Map<String, Object> map = new HashMap<>();
List<Order> orders = orderService.findAll(searchKey);
if (orders == null) {
return r.setCode(2000);
}
List<Order> items = orders.size() >= page * Constant.PAGE_SIZE ?
orders.subList((page - 1) * Constant.PAGE_SIZE, page * Constant.PAGE_SIZE)
: orders.subList((page - 1) * Constant.PAGE_SIZE, orders.size());
int len = orders.size() % Constant.PAGE_SIZE == 0 ? orders.size() / Constant.PAGE_SIZE
: (orders.size() / Constant.PAGE_SIZE + 1);
List<OrderVo> vos = new ArrayList<>();
for (Order item : items) {
User user = userDao.queryById(item.getUid());
OrderVo vo = new OrderVo();
vo.setAddress(user.getAddress()).setPhone(user.getPhone()).setUsername(user.getName())
.setAmount(item.getAmount()).setFlower(item.getFlower()).setId(item.getId())
.setUid(item.getUid()).setOrder_guid(item.getOrder_guid()).setPrice(item.getPrice())
.setState(item.getState());
vos.add(vo);
}
map.put("items", vos);
map.put("len", len);
return r.setCode(2000).setData(map);
}
@RequestMapping("/update")
R update(@RequestBody Order order) {
R r = new R();
int ans = orderService.update(order);
if (ans >= 0) {
return r.setCode(2000).setMsg(HttpMsg.UPDATE_USER_OK);
}
return r.setCode(4000).setMsg(HttpMsg.UPDATE_USER_FAILED);
}
@RequestMapping("/changeState")
R changeState(@RequestBody Order order) {
orderDao.changeState(order);
return new R().setCode(2000).setMsg(HttpMsg.UPDATE_ORDER_OK);
}
@DeleteMapping("/delete")
R delete(@RequestParam("id") int id) {
R r = new R();
int ans = orderService.delete(id);
if (ans == 1) {
return r.setCode(2000).setMsg(HttpMsg.DELETE_USER_OK);
}
return r.setCode(4000).setMsg(HttpMsg.DELETE_USER_FAILED);
}
}
ユーザー管理コントロールレイヤーrree
以上がJavaでフラワーモールシステムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

Dreamweaver Mac版
ビジュアル Web 開発ツール
