## 一、设计数据库 #### 1、数据库结构 | No | 表名称 | 中文名 | 说明 | | -- | -------- | -------- | -------------------------------- | | 1 | business | 商家表 | 存储所有商家信息 | | 2 | food | 食品表 | 存储每个商家所拥有的所有食品信息 | | 3 | admin | 管理员表 | 存储管理员信息 | #### 2、表结构 约束类型标识: - PK:primary key 主键 - FK:foreign key 外键 - NN:not null 非空 - UQ:unique 唯一索引 - AI:auto increment 自增 ##### business(商家表) | No | 字段名 | 数据类型 | size | 默认値 | 约束 | 说明 | | -- | ------------- | -------- | ----- | ------ | ---------- | -------- | | 1 | bid | int | | | PK、AI、NN | 商家编号 | | 2 | password | varchar | 20 | | NN | 密码 | | 3 | bname | varchar | 40 | | NN | 商家名称 | | 4 | address | varchar | 50 | | | 商家地址 | | 5 | explain | varchar | 100 | | | 商家介绍 | | 6 | starPrice | decimal | (5,2) | 0.00 | | 起送费 | | 7 | deliveryPrice | decimal | (5,2) | 0.00 | | 配送费 | ##### food(食品表) | No | 字段名 | 数据类型 | size | 默认値 | 约束 | 说明 | | -- | ------- | -------- | ----- | ------ | ---------- | ------------ | | 1 | fid | int | | | PK、AI、NN | 食品编号 | | 2 | fname | varchar | 30 | | NN | 食品名称 | | 3 | explain | varchar | 30 | | | 食品介绍 | | 4 | price | decimal | (5,2) | | NN | 食品价格 | | 5 | bid | int | | | FK、NN | 所属商家编号 | ##### admin(管理员表) | No | 字段名 | 数据类型 | size | 默认値 | 约束 | 说明 | | -- | -------- | -------- | ---- | ------ | ---------- | ---------- | | 1 | aid | int | | | PK、AI、NN | 管理员编号 | | 2 | aname | varchar | 20 | | NN、UQ | 管理员名称 | | 3 | password | varchar | 20 | | NN | 密码 | #### 3、SQL语句 ```SQL CREATE DATABASE IF NOT EXISTS elm CHARSET utf8; USE elm; CREATE TABLE IF NOT EXISTS business ( bid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '商家编号', password VARCHAR(20) NOT NULL COMMENT '密码', bname VARCHAR(40) NOT NULL COMMENT '商家名称', address VARCHAR(50) COMMENT '商家地址', `explain` VARCHAR(100) COMMENT '商家介绍', startPrice DECIMAL(5, 2) DEFAULT 0.00 COMMENT '起送费', deliveryPrice DECIMAL(5, 2) DEFAULT 0.00 COMMENT '配送费' ); CREATE TABLE IF NOT EXISTS food ( fid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '食品编号', fname VARCHAR(30) NOT NULL COMMENT '食品名称', `explain` VARCHAR(30) COMMENT '食品介绍', price DECIMAL(5, 2) NOT NULL COMMENT '食品价格', bid INT UNSIGNED NOT NULL COMMENT '所属商家编号', FOREIGN KEY (bid) REFERENCES business (bid) ); CREATE TABLE IF NOT EXISTS admin ( aid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '管理员编号', aname VARCHAR(20) NOT NULL UNIQUE COMMENT '管理员名称', password VARCHAR(20) NOT NULL COMMENT '密码' ); INSERT INTO admin(aname, `password`) VALUES ('admin', 'admin'); ``` ## 二、添加依赖库 这次用到的是`Maven`项目,所以在`pom.xml`文件添加`dependencis`,依赖的库有`jdbc9.4.0`、`mybatis3.5.19`、`log4j1.2.17` ```xml 4.0.0 org.example eml-MyBatis 1.0-SNAPSHOT 22 22 UTF-8 com.mysql mysql-connector-j 9.4.0 org.mybatis mybatis 3.5.19 log4j log4j 1.2.17 ``` ## 三、添加配置文件 在`rescources`资源目录下创建下面的文件。 #### 1、数据库配置文件 创建`db.properties` ```properties jdbc.mysql.driver=com.mysql.cj.jdbc.Driver jdbc.mysql.url=jdbc:mysql://localhost:3306/elm?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8 jdbc.mysql.username=username jdbc.mysql.password=password ``` #### 2、日志配置文件 创建`log4j.properties` ```properties log4j.rootLogger=ERROR, stdout log4j.logger.org.mybatis.example.BlogMapper=TRACE log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n ``` 3、MyBatis配置文件 创建`sqlMapConfig.xml` ```xml ``` ## 四、创建`model`层 新建`com.doooog.elmmybatis.po`包 #### 1、`Admin.java`类 ```java package com.doooog.elmmybatis.po; public class Admin { private Integer aid; private String aname; private String password; public Admin() { } public Admin(Integer aid, String aname, String password) { this.aid = aid; this.aname = aname; this.password = password; } @Override public String toString() { return "Admin{" + "aid=" + aid + ", aname='" + aname + '\'' + ", password='" + password + '\'' + '}'; } public boolean isEmpty() { return aid == null && (aname == null || aname.isEmpty()) && (password == null || password.isEmpty()); } public boolean isUnsafe(boolean withPK) { if (!withPK) { return isEmpty() || aname == null || aname.isEmpty() || password == null || password.isEmpty(); } else { return isEmpty() || aid == null || aid <= 0 || aname == null || aname.isEmpty() || password == null || password.isEmpty(); } } public Integer getAid() { return aid; } public void setAid(Integer aid) { this.aid = aid; } public String getAname() { return aname; } public void setAname(String aname) { this.aname = aname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` #### 2、`Business.java`类 ```java package com.doooog.elmmybatis.po; import java.util.List; public class Business { private Integer bid; private String password; private String bname; private String address; private String explain; private Double startPrice; private Double deliveryPrice; private List foodList; public Business() { } public Business(Integer bid, String password, String bname, String address, String explain, Double startPrice, Double deliveryPrice) { this.bid = bid; this.password = password; this.bname = bname; this.address = address; this.explain = explain; this.startPrice = startPrice; this.deliveryPrice = deliveryPrice; } public Business(Integer bid, String password, String bname, String address, String explain, Double startPrice, Double deliveryPrice, List foodList) { this.bid = bid; this.password = password; this.bname = bname; this.address = address; this.explain = explain; this.startPrice = startPrice; this.deliveryPrice = deliveryPrice; this.foodList = foodList; } @Override public String toString() { return "Business{" + "bid=" + bid + ", password='" + password + '\'' + ", bname='" + bname + '\'' + ", address='" + address + '\'' + ", explain='" + explain + '\'' + ", startPrice=" + startPrice + ", deliveryPrice=" + deliveryPrice + ", foodList=" + ((foodList != null && !foodList.isEmpty()) ? foodList : "null") + '}'; } public boolean isEmpty() { return bid == null && (bname == null || bname.isEmpty()) && (address == null || address.isEmpty()) && (explain == null || explain.isEmpty()) && startPrice == null && deliveryPrice == null && (foodList == null || foodList.isEmpty()); } public boolean isUnsafe(boolean withPK) { if (!withPK) { return isEmpty() || password == null || password.isEmpty() || bname == null || bname.isEmpty(); } else { return isEmpty() || bid == null || bid <= 0 || password == null || password.isEmpty() || bname == null || bname.isEmpty(); } } public Business copy() { return new Business(bid, password, bname, address, explain, startPrice, deliveryPrice, foodList); } public List getFoodList() { return foodList; } public void setFoodList(List foodList) { this.foodList = foodList; } public Integer getBid() { return bid; } public void setBid(Integer bid) { this.bid = bid; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getExplain() { return explain; } public void setExplain(String explain) { this.explain = explain; } public Double getStartPrice() { return startPrice; } public void setStartPrice(Double startPrice) { this.startPrice = startPrice; } public Double getDeliveryPrice() { return deliveryPrice; } public void setDeliveryPrice(Double deliveryPrice) { this.deliveryPrice = deliveryPrice; } } ``` #### 3、`food.java`类 ```java package com.doooog.elmmybatis.po; public class Food { private Integer fid; private String fname; private String explain; private Double price; private Integer bid; private Business business; public Food() { } public Food(Integer fid, String fname, String explain, Double price, Integer bid) { this.fid = fid; this.fname = fname; this.explain = explain; this.price = price; this.bid = bid; } public Food(Integer fid, String fname, String explain, Double price, Integer bid, Business business) { this.fid = fid; this.fname = fname; this.explain = explain; this.price = price; this.bid = bid; this.business = business; } @Override public String toString() { return "Food{" + "fid=" + fid + ", fname='" + fname + '\'' + ", explain='" + explain + '\'' + ", price=" + price + ", bid=" + bid + ", business=" + ((business != null && !business.isEmpty()) ? business : "null") + '}'; } public boolean isEmpty() { return fid == null && (fname == null || fname.isEmpty()) && (explain == null || explain.isEmpty()) && price == null && bid == null && (business == null || business.isEmpty()); } public boolean isUnsafe(boolean withPK) { if (!withPK) { return this.isEmpty() || bid == null || bid <= 0 || fname == null || fname.isEmpty() || price == null || price <= 0; } else { return this.isEmpty() || fid == null || fid <= 0 || bid == null || bid <= 0 || fname == null || fname.isEmpty() || price == null || price <= 0; } } public Integer getFid() { return fid; } public void setFid(Integer fid) { this.fid = fid; } public String getFname() { return fname; } public void setFname(String fname) { this.fname = fname; } public String getExplain() { return explain; } public void setExplain(String explain) { this.explain = explain; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Integer getBid() { return bid; } public void setBid(Integer bid) { this.bid = bid; } public Business getBusiness() { return business; } public void setBusiness(Business business) { this.business = business; } } ``` ## 五、创建`util`层 新建`com.doooog.elmmybatis.util`包 #### 1、数据库工具类 ```java package com.doooog.elmmybatis.util; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class DBUtil { private static final SqlSessionFactory sqlSessionFactory; static { SqlSessionFactory sqlSessionFactory1; try { // 1、读取Mybatis配置文件 InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml"); // 2、通过配置文件信息,创建SqlSessionFactory sqlSessionFactory1 = new SqlSessionFactoryBuilder().build(input); } catch (IOException e) { sqlSessionFactory1 = null; System.out.println(e.getMessage()); } sqlSessionFactory = sqlSessionFactory1; } public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } } ``` #### 2、输入工具类 ```java package com.doooog.elmmybatis.util; import java.util.InputMismatchException; import java.util.Scanner; public class InputUtil { private static final Scanner INPUT = new Scanner(System.in); public static int menuInputInteger(String msg) { int data; try { data = INPUT.nextInt(); if (data < -2) throw new InputMismatchException(); } catch (InputMismatchException e) { INPUT.nextLine(); if (!msg.isEmpty()) { System.out.print("输入的类型错误!请重新输入" + msg + ":"); } else { System.out.print("输入的类型错误!请重新输入:"); } data = menuInputInteger(msg); } return data; } public static double menuInputDouble(String msg) { double data; try { data = INPUT.nextDouble(); if (data < 0 && data != -1) throw new InputMismatchException(); } catch (InputMismatchException e) { INPUT.nextLine(); if (!msg.isEmpty()) { System.out.print("输入的类型错误!请重新输入" + msg + ":"); } else { System.out.print("输入的类型错误!请重新输入:"); } data = menuInputDouble(msg); } return data; } public static String menuInputString(String msg) { String data; try { data = INPUT.next(); } catch (InputMismatchException e) { INPUT.nextLine(); if (!msg.isEmpty()) { System.out.print("输入的类型错误!请重新输入" + msg + ":"); } else { System.out.print("输入的类型错误!请重新输入:"); } data = menuInputString(msg); } return data; } } ``` #### 3、其他工具类 ```java package com.doooog.elmmybatis.util; public class CommonUtil { public static String copyChar(char c, int num) { if (num <= 0) return ""; return String.valueOf(c).repeat(num); } } ``` ## 六、创建`data`层 新建`com.doooog.elmmybatis.mapper`包、`com.doooog.elmmybatis.sqlprovider`包 #### 1、`AdminMapper.java`接口 ```java package com.doooog.elmmybatis.mapper; import com.doooog.elmmybatis.sqlprovider.AdminSqlProvider; import com.doooog.elmmybatis.po.Admin; import org.apache.ibatis.annotations.*; import java.util.List; public interface AdminMapper { @Results(id = "adminResults", value = { @Result(property = "aid", column = "aid", id = true), @Result(property = "aname", column = "aname"), @Result(property = "password", column = "password") }) @Select("select * from admin;") List listAdminAll(); @Select("select * from admin where aname=#{username} and password=#{password}") @ResultMap("adminResults") Admin getAdminByLogin(@Param("username") String username, @Param("password") String password); @Select("select * from admin where aid=#{aid}") @ResultMap("adminResults") Admin getAdminById(int aid); @Insert("insert into admin(aname, password) values(#{aname},#{password})") int addAdmin(Admin admin); @Insert("insert into admin values(#{aid},#{aname},#{password})") int addAdminWithId(Admin admin); @Delete("delete from admin where aid=#{aid}") int deleteAdminById(int aid); @UpdateProvider(type = AdminSqlProvider.class, method = "updateAdmin") int updateAdminById(Admin admin); @Select("select count(aid) from admin where aname=#{aname}") int getAdminByName(String aname); } ``` #### 2、`BusinessMapper.java`接口 ```java package com.doooog.elmmybatis.mapper; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.sqlprovider.BusinessSqlProvider; import org.apache.ibatis.annotations.*; import java.util.List; public interface BusinessMapper { @Select("select * from business where bid=#{bid} and password=#{password}") @Results(id = "businessResults", value = { @Result(property = "bid", column = "bid", id = true), @Result(property = "password", column = "password"), @Result(property = "bname", column = "bname"), @Result(property = "address", column = "address"), @Result(property = "explain", column = "explain"), @Result(property = "startPrice", column = "deliveryPrice"), @Result(property = "foodList", column = "bid", javaType = List.class, many = @Many(select = "com.doooog.elmmybatis.mapper.FoodMapper.listFoodByBidLazy")) }) Business getBusinessByLogin(@Param("bid") int bid, @Param("password") String password); @Select("select * from business where bid=#{bid}") @ResultMap("businessResults") Business getBusinessById(int bid); @Select("select * from business where bid=#{bid}") @Results({ @Result(property = "bid", column = "bid", id = true), @Result(property = "password", column = "password"), @Result(property = "bname", column = "bname"), @Result(property = "address", column = "address"), @Result(property = "explain", column = "explain"), @Result(property = "startPrice", column = "deliveryPrice"), }) Business getBusinessByIdLazy(int bid); @Select("select * from business where bname=#{bname}") @ResultMap("businessResults") Business getBusinessByName(String bname); @Select("select * from business where bname like concat('%',#{bname},'%')") @ResultMap("businessResults") List listBusinessByName(String bname); @Select("select * from business") @ResultMap("businessResults") List listBusinessAll(); @Insert("insert into business(password, bname, address, `explain`, startPrice, deliveryPrice) values (#{password},#{bname},#{address},#{explain},#{startPrice},#{deliveryPrice})") @Options(useGeneratedKeys = true, keyProperty = "bid", keyColumn = "bid") int addBusiness(Business business); @Insert("insert into business values (#{bid},#{password},#{bname},#{address},#{explain},#{startPrice},#{deliveryPrice})") @Options(useGeneratedKeys = true, keyProperty = "bid", keyColumn = "bid") int addBusinessWithId(Business business); @UpdateProvider(type = BusinessSqlProvider.class, method = "updateBusinessById") int updateBusinessById(Business business); @Delete("delete from business where bid=#{bid}") int deleteBusinessById(int bid); } ``` #### 3、`FoodMapper.java`接口 ```java package com.doooog.elmmybatis.mapper; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.po.Food; import com.doooog.elmmybatis.sqlprovider.FoodSqlProvider; import org.apache.ibatis.annotations.*; import java.util.List; public interface FoodMapper { @Select("select * from food where fid=#{fid}") @Results(id = "foodResults", value = { @Result(property = "fid", column = "fid", id = true), @Result(property = "fname", column = "fname"), @Result(property = "explain", column = "explain"), @Result(property = "price", column = "price"), @Result(property = "bid", column = "bid"), @Result(property = "business", column = "bid", javaType = Business.class, one = @One(select = "com.doooog.elmmybatis.mapper.BusinessMapper.getBusinessByIdLazy")) }) Food getFoodById(int fid); @Select("select * from food where fname=#{fname}") @ResultMap("foodResults") List getFoodByName(String fname); @Select("select * from food where fname like concat('%',#{fname},'%')") @ResultMap("foodResults") List listFoodByName(String fname); @Select("select * from food") @ResultMap("foodResults") List listFoodAll(); @Select("select * from food where food.bid=#{bid}") @Results({ @Result(property = "fid", column = "fid", id = true), @Result(property = "fname", column = "fname"), @Result(property = "explain", column = "explain"), @Result(property = "price", column = "price"), @Result(property = "bid", column = "bid") }) Food listFoodByBidLazy(int bid); @UpdateProvider(type = FoodSqlProvider.class, method = "updateFoodById") int updateFoodById(Food food); @Insert("insert into food ( fname, `explain`, price, bid) values (#{fname},#{explain},#{price},#{bid})") @Options(useGeneratedKeys = true, keyProperty = "fid", keyColumn = "fid") int addFood(Food food); @Insert("insert into food values (#{fid},#{fname},#{explain},#{price},#{bid})") @Options(useGeneratedKeys = true, keyProperty = "fid", keyColumn = "fid") int addFoodWithId(Food food); @Delete("delete from food where fid=#{fid}") int deleteFoodById(int fid); } ``` #### 4、`AdminSqlProvider.java`类 ```java package com.doooog.elmmybatis.sqlprovider; import com.doooog.elmmybatis.po.Admin; import org.apache.ibatis.jdbc.SQL; public class AdminSqlProvider { public String updateAdmin(Admin admin) { return new SQL() {{ UPDATE("admin"); if (admin.getAname() != null && !admin.getAname().isEmpty()) SET("aname=#{aname}"); if (admin.getPassword() != null && !admin.getPassword().isEmpty()) SET("password=#{password}"); WHERE("aid=#{aid}"); }}.toString(); } } ``` #### 5、`BusinessSqlProvider.java`类 ```java package com.doooog.elmmybatis.sqlprovider; import com.doooog.elmmybatis.po.Business; import org.apache.ibatis.jdbc.SQL; public class BusinessSqlProvider { public String updateBusinessById(Business business) { return new SQL() {{ UPDATE("business"); if (business.getPassword() != null && !business.getPassword().isEmpty()) SET("password=#{password}"); if (business.getBname() != null && !business.getBname().isEmpty()) SET("bname=#{bname}"); if (business.getAddress() != null && !business.getAddress().isEmpty()) SET("address=#{address}"); if (business.getExplain() != null && !business.getExplain().isEmpty()) SET("`explain`=#{explain}"); if (business.getStartPrice() != null && business.getStartPrice() > 0) SET("startPrice=#{startPrice}"); if (business.getDeliveryPrice() != null && business.getDeliveryPrice() > 0) SET("deliveryPrice=#{deliveryPrice}"); WHERE("bid=#{bid}"); }}.toString(); } } ``` #### 6、`FoodSqlProvider.java`类 ```java package com.doooog.elmmybatis.sqlprovider; import com.doooog.elmmybatis.po.Food; import org.apache.ibatis.jdbc.SQL; public class FoodSqlProvider { public String updateFoodById(Food food) { return new SQL() {{ UPDATE("food"); if (food.getFname() != null && !food.getFname().isEmpty()) SET("fname=#{fname}"); if (food.getExplain() != null && !food.getExplain().isEmpty()) SET("`explain`=#{explain}"); if (food.getPrice() != null && food.getPrice() > 0) SET("price=#{price}"); if (food.getBid() != null && food.getBid() > 0) SET("bid=#{bid}"); WHERE("fid=#{fid}"); }}.toString(); } } ``` ## 七、创建`Controller`层 新建`com.doooog.elmmybatis.controller`包、`com.doooog.elmmybatis.controller.impl`包 #### 1、`AdminCtrl.java`接口 ```java package com.doooog.elmmybatis.controller; import com.doooog.elmmybatis.po.Admin; import java.util.List; public interface AdminCtrl { // 管理员部分 boolean login(String username, String password); boolean addAdmin(Admin admin); boolean deleteAdminById(int aid); List listAdminAll(); boolean updateAdminPasswordById(int aid, String oldPW, String newPW); boolean getAdminById(int aid); } ``` #### 2、`BusinessCtrl.java`接口 ```java package com.doooog.elmmybatis.controller; import com.doooog.elmmybatis.po.Business; import java.util.List; public interface BusinessCtrl { // 商家部分 Business login(int bid, String password); boolean updateBusinessPasswordById(int bid, String oldPW, String newPW); boolean updateBusinessNameById(int bid, String name); boolean updateBusinessAddressById(int bid, String address); boolean updateBusinessExplainById(int bid, String explain); boolean updateBusinessPriceById(int bid,double startPrice, double deliveryPrice); boolean deleteBusinessById(int bid); boolean addBusiness(Business business); boolean getBusinessById(int bid); List listBusinessAll(); } ``` #### 3、`FoodCtrl.java`接口 ```java package com.doooog.elmmybatis.controller; import com.doooog.elmmybatis.po.Food; import java.util.List; public interface FoodCtrl { Food getFoodById(int fid); List listFoodAll(); List listFoodByName(String fname); boolean addFood(Food food); boolean updateFoodPriceById(int fid,double price); boolean updateFoodById(Food food); boolean deleteFoodById(int fid); } ``` #### 4、`AdminCtrlImpl.java`类 ```java package com.doooog.elmmybatis.controller.impl; import com.doooog.elmmybatis.controller.AdminCtrl; import com.doooog.elmmybatis.mapper.AdminMapper; import com.doooog.elmmybatis.po.Admin; import com.doooog.elmmybatis.util.DBUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; public class AdminCtrlImpl implements AdminCtrl { public boolean login(String username, String password) { if (username == null || password == null || username.isEmpty() || password.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); Admin admin = adminMapper.getAdminByLogin(username, password); return admin != null && !admin.isEmpty(); } } @Override public boolean addAdmin(Admin admin) { if (admin == null) return false; if ((admin.getAid() == null || admin.getAid() <= 0) && !admin.isUnsafe(false)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.addAdmin(admin) == 1; } } else if (!admin.isUnsafe(true)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.addAdminWithId(admin) == 1; } } return false; } @Override public boolean deleteAdminById(int aid) { if (aid <= 1) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.deleteAdminById(aid) == 1; } } @Override public List listAdminAll() { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.listAdminAll(); } } @Override public boolean updateAdminPasswordById(int aid, String oldPW, String newPW) { if (aid <= 0 || oldPW == null || oldPW.isEmpty() || newPW == null || newPW.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); Admin admin = adminMapper.getAdminById(aid); if (admin == null || !admin.getPassword().equals(oldPW)) return false; Admin tmp = new Admin(); tmp.setAid(aid); tmp.setPassword(newPW); return adminMapper.updateAdminById(tmp) == 1; } } @Override public boolean getAdminById(int aid) { if (aid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); Admin admin = adminMapper.getAdminById(aid); if (admin == null) return false; System.out.println(admin); return true; } } } ``` #### 5、`BusinessCtrlImpl.java`类 ```java package com.doooog.elmmybatis.controller.impl; import com.doooog.elmmybatis.controller.BusinessCtrl; import com.doooog.elmmybatis.mapper.BusinessMapper; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.util.DBUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; public class BusinessCtrlImpl implements BusinessCtrl { @Override public Business login(int bid, String password) { if (bid <= 0 || password == null || password.isEmpty()) return null; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); return businessMapper.getBusinessByLogin(bid, password); } } @Override public boolean addBusiness(Business business) { if (business == null) return false; if ((business.getBid() == null || business.getBid() <= 0) && !business.isUnsafe(false)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); int rs = businessMapper.addBusiness(business); return rs != 0; } } else if (!business.isUnsafe(true)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); int rs = businessMapper.addBusinessWithId(business); return rs != 0; } } return false; } @Override public boolean deleteBusinessById(int bid) { if (bid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); return businessMapper.deleteBusinessById(bid) == 1; } } @Override public boolean getBusinessById(int bid) { if (bid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business b = businessMapper.getBusinessById(bid); return b != null; } } @Override public List listBusinessAll() { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); return businessMapper.listBusinessAll(); } } @Override public boolean updateBusinessPasswordById(int bid, String oldPW, String newPW) { if (bid <= 0 || oldPW == null || oldPW.isEmpty() || newPW == null || newPW.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business b = businessMapper.getBusinessById(bid); if (b == null || !b.getPassword().equals(oldPW)) return false; Business tmp = new Business(); tmp.setBid(bid); tmp.setPassword(newPW); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessNameById(int bid, String name) { if (bid <= 0 || name == null || name.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setBname(name); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessAddressById(int bid, String address) { if (bid <= 0 || address == null || address.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setAddress(address); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessExplainById(int bid, String explain) { if (bid <= 0 || explain == null || explain.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setExplain(explain); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessPriceById(int bid, double startPrice, double deliveryPrice) { if (bid <= 0 || startPrice <= 0 || deliveryPrice <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setStartPrice(startPrice); tmp.setDeliveryPrice(deliveryPrice); return businessMapper.updateBusinessById(tmp) == 1; } } } ``` #### 6、`FoodCtrlImpl.java`类 ```java package com.doooog.elmmybatis.controller.impl; import com.doooog.elmmybatis.controller.FoodCtrl; import com.doooog.elmmybatis.mapper.FoodMapper; import com.doooog.elmmybatis.po.Food; import com.doooog.elmmybatis.util.DBUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; public class FoodCtrlImpl implements FoodCtrl { @Override public Food getFoodById(int fid) { if (fid <= 0) return null; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.getFoodById(fid); } } @Override public List listFoodAll() { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.listFoodAll(); } } @Override public List listFoodByName(String fname) { if (fname == null || fname.isEmpty()) return null; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.listFoodByName(fname); } } @Override public boolean addFood(Food food) { if (food == null || food.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); if ((food.getFid() == null || food.getFid() <= 0) && !food.isUnsafe(false)) { return foodMapper.addFood(food) > 0; } else if (!food.isUnsafe(true)) { return foodMapper.addFoodWithId(food) > 0; } return false; } } @Override public boolean updateFoodPriceById(int fid, double price) { if (fid <= 0 || price <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); Food tmp = new Food(); tmp.setFid(fid); tmp.setPrice(price); return foodMapper.updateFoodById(tmp) > 0; } } @Override public boolean updateFoodById(Food food) { if (food == null || food.isEmpty() || food.isUnsafe(true)) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.updateFoodById(food) > 0; } } @Override public boolean deleteFoodById(int fid) { if (fid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.deleteFoodById(fid) > 0; } } } ``` ## 八、创建`view`层 新建`com.doooog.elmmybatis.view`包 #### 1、`MainEntry.java`类 ```java package com.doooog.elmmybatis.view; import com.doooog.elmmybatis.util.CommonUtil; import com.doooog.elmmybatis.util.InputUtil; public class MainEntry { public static void main(String[] args) { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 欢迎进入饿了么后台管理系统 --|"); System.out.println("|-- 1.系统管理员 2.商家"); System.out.print("|-- 请输入编号(0.退出):"); int choice = InputUtil.menuInputInteger("(1或2或0)"); switch (choice) { case 0 -> exit = true; case 1 -> new AdminView().menuLogin(); case 2 -> new BusinessView().menuLogin(); default -> { } } } } } ``` #### 2、`AdminView.java`类 ```java package com.doooog.elmmybatis.view; import com.doooog.elmmybatis.controller.AdminCtrl; import com.doooog.elmmybatis.controller.BusinessCtrl; import com.doooog.elmmybatis.controller.impl.AdminCtrlImpl; import com.doooog.elmmybatis.controller.impl.BusinessCtrlImpl; import com.doooog.elmmybatis.po.Admin; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.util.CommonUtil; import com.doooog.elmmybatis.util.InputUtil; import java.util.List; public class AdminView { private AdminCtrl adminCtrl = new AdminCtrlImpl(); private BusinessCtrl businessCtrl = new BusinessCtrlImpl(); public void menuLogin() { System.out.println("|-- 请使用管理员身份进行登录 --|"); System.out.print("|-- 请输入用户名:"); String username = InputUtil.menuInputString(""); System.out.print("|-- 请输入密码:"); String password = InputUtil.menuInputString(""); if (adminCtrl.login(username, password)) { System.out.println("登录成功!"); menuMain(); } else { System.out.println("登录失败,请检查账号或密码是否有误!"); } } private void menuMain() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 管理员菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.管理员操作"); System.out.println("|-- 2.管理商家"); System.out.println("|-- 0.退出登录"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~2整数):"); int choice = InputUtil.menuInputInteger("(0~2整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuAdmin(); case 2 -> menuBusiness(); default -> { } } } } private void menuAdmin() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 管理员菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.查看所有管理员"); System.out.println("|-- 2.新增管理员"); System.out.println("|-- 3.更改管理员密码"); System.out.println("|-- 4.删除管理员"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~4整数):"); int choice = InputUtil.menuInputInteger("(0~4整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuListAdminAll(); case 2 -> menuAddAdmin(); case 3 -> menuRePasswordAdmin(); case 4 -> menuDeleteAdmin(); default -> { } } } } private void menuBusiness() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 管理员菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.查看所有商家"); System.out.println("|-- 2.新增商家"); System.out.println("|-- 3.更改商家密码"); System.out.println("|-- 4.更改商家名称"); System.out.println("|-- 5.更改商家地址"); System.out.println("|-- 6.更改商家介绍"); System.out.println("|-- 7.更改商家配送价格"); System.out.println("|-- 8.删除商家"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~12整数):"); int choice = InputUtil.menuInputInteger("(0~12整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuListBusinessAll(); case 2 -> menuAddBusiness(); case 3 -> menuRePasswordBusiness(); case 4 -> menuRenameBusiness(); case 5 -> menuReAddress(); case 6 -> menuReExplain(); case 7 -> menuRePrice(); case 8 -> menuDeleteBusiness(); default -> { } } } } private void menuListBusinessAll() { List list = businessCtrl.listBusinessAll(); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Business business : list) { System.out.println(business); } } private void menuListAdminAll() { List list = adminCtrl.listAdminAll(); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Admin admin : list) { System.out.println(admin); } } private void menuAddAdmin() { Admin admin = new Admin(); int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- ID(整数):"); tmp = InputUtil.menuInputInteger("(请输入整数,或0跳过)"); if (tmp == -1) return; if (tmp != 0) admin.setAid(tmp); System.out.print("|-- 账号(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setAname(tmp2); System.out.print("|-- 密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setPassword(tmp2); if (adminCtrl.addAdmin(admin)) { System.out.println("添加成功!"); return; } System.out.println("添加失败,请检查输入是否有误,ID可以为空"); } private void menuRePasswordAdmin() { Admin admin = new Admin(); int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)提取方法…"); if (tmp == -1 || tmp == 0) return; admin.setAid(tmp); System.out.print("|-- 旧密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setAname(tmp2); System.out.print("|-- 新密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setPassword(tmp2); if (adminCtrl.updateAdminPasswordById(admin.getAid(), admin.getAname(), admin.getPassword())) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteAdmin() { int tmp; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要删除的ID(0以上整数)(必填):"); tmp = InputUtil.menuInputInteger("(0以上整数)"); if (tmp == -1) return; if (!adminCtrl.getAdminById(tmp)) { System.out.println("未查询到信息"); return; } if (!doChoice()) return; if (adminCtrl.deleteAdminById(tmp)) { System.out.println("删除成功!"); return; } System.out.println("删除失败,未知错误"); } private void menuAddBusiness() { Business business = new Business(); double tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setBname(tmp2); System.out.print("|-- 密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setPassword(tmp2); System.out.print("|-- 地址:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) business.setAddress(tmp2); System.out.print("|-- 介绍:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) business.setExplain(tmp2); System.out.print("|-- 起送价格:"); tmp = InputUtil.menuInputDouble(""); if (tmp == -1) return; if (tmp != 0) business.setStartPrice(tmp); System.out.print("|-- 配送价格:"); tmp = InputUtil.menuInputDouble(""); if (tmp == -1) return; if (tmp != 0) business.setDeliveryPrice(tmp); System.out.print("|-- 确认信息:"); System.out.println(business); if (!doChoice()) return; if (businessCtrl.addBusiness(business)) { System.out.println("添加成功!"); System.out.println("您用于登录的编号为:" + business.getBid()); return; } System.out.println("添加失败,请检查输入是否有误"); } private void menuRePasswordBusiness() { Business business = new Business(); int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; business.setBid(tmp); System.out.print("|-- 旧密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setBname(tmp2); System.out.print("|-- 新密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setPassword(tmp2); if (businessCtrl.updateBusinessPasswordById(business.getBid(), business.getBname(), business.getPassword())) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuRenameBusiness() { int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessNameById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuReAddress() { int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新地址(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessAddressById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuReExplain() { int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新介绍(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessExplainById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuRePrice() { int tmp; double tmp2, tmp3; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新起送价(大于0的小数)(必填):"); tmp2 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp2 == -1 || tmp2 == 0) return; System.out.print("|-- 新配送价(大于0的小数)(必填):"); tmp3 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp3 == -1 || tmp3 == 0) return; if (businessCtrl.updateBusinessPriceById(tmp, tmp2, tmp3)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteBusiness() { int tmp; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要删除的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; if (!businessCtrl.getBusinessById(tmp)) { System.out.println("未查询到信息"); return; } if (!doChoice()) return; if (businessCtrl.deleteBusinessById(tmp)) { System.out.println("删除成功!"); return; } System.out.println("删除失败,请检查输入是否有误"); } private boolean doChoice() { System.out.print("|-- 确认无误(1.是,2.否):"); int tmp = InputUtil.menuInputInteger("(1.是,2.否)"); return tmp == 1; } } ``` #### 3、`BusinessView.java`类 ```java package com.doooog.elmmybatis.view; import com.doooog.elmmybatis.controller.BusinessCtrl; import com.doooog.elmmybatis.controller.FoodCtrl; import com.doooog.elmmybatis.controller.impl.BusinessCtrlImpl; import com.doooog.elmmybatis.controller.impl.FoodCtrlImpl; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.po.Food; import com.doooog.elmmybatis.util.CommonUtil; import com.doooog.elmmybatis.util.InputUtil; import java.util.List; public class BusinessView { private BusinessCtrl businessCtrl = new BusinessCtrlImpl(); private FoodCtrl foodCtrl = new FoodCtrlImpl(); private Business my; private boolean exit2; public void menuLogin() { System.out.println("|-- 请使用商家身份进行登录 --|"); System.out.print("|-- 请输入商家编号:"); int username = InputUtil.menuInputInteger(""); System.out.print("|-- 请输入密码:"); String password = InputUtil.menuInputString(""); my = businessCtrl.login(username, password); if (my != null && !my.isEmpty()) { System.out.println("登录成功!"); menuMain(); } else { System.out.println("登录失败,请检查账号或密码是否有误!"); } } private void menuMain() { boolean exit = false; while (!exit) { if (exit2) { exit = true; continue; } System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 商家菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.账号操作"); System.out.println("|-- 2.食物操作"); System.out.println("|-- 0.退出登录"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~2整数):"); int choice = InputUtil.menuInputInteger("(0~2整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuBusiness(); case 2 -> menuFood(); default -> { } } } } private void menuBusiness() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 账号操作 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.修改密码"); System.out.println("|-- 2.更改名称"); System.out.println("|-- 3.更改介绍"); System.out.println("|-- 4.更改地址"); System.out.println("|-- 5.更改配送价格"); System.out.println("|-- 6.注销商家"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~6整数):"); int choice = InputUtil.menuInputInteger("(0~6整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuUpdatePassword(); case 2 -> menuUpdateName(); case 3 -> menuUpdateExplain(); case 4 -> menuUpdateAddress(); case 5 -> menuUpdatePrice(); case 6 -> { menuDeleteBusiness(); exit2 = true; exit = true; } default -> { } } } } private void menuFood() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 食物操作 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.查看所有食物"); System.out.println("|-- 2.搜索食物名称"); System.out.println("|-- 3.新增食物"); System.out.println("|-- 4.修改食物价格"); System.out.println("|-- 5.修改食物信息"); System.out.println("|-- 6.删除食物"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~6整数):"); int choice = InputUtil.menuInputInteger("(0~6整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuListFoodAll(); case 2 -> menuSearchFoodByName(); case 3 -> menuAddFood(); case 4 -> menuUpdateFoodPrice(); case 5 -> menuUpdateFood(); case 6 -> menuDeleteFood(); default -> { } } } } private void menuUpdatePassword() { Business b = my.copy(); String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 旧密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; b.setBname(tmp2); System.out.print("|-- 新密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; b.setPassword(tmp2); if (businessCtrl.updateBusinessPasswordById(b.getBid(), b.getBname(), b.getPassword())) { my.setPassword(b.getPassword()); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateName() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessNameById(my.getBid(), tmp2)) { my.setBname(tmp2); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateExplain() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新介绍(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessExplainById(my.getBid(), tmp2)) { my.setExplain(tmp2); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateAddress() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新地址(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessAddressById(my.getBid(), tmp2)) { my.setAddress(tmp2); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdatePrice() { double tmp2, tmp3; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新起送价(大于0的小数)(必填):"); tmp2 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp2 == -1 || tmp2 == 0) return; System.out.print("|-- 新配送价(大于0的小数)(必填):"); tmp3 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp3 == -1 || tmp3 == 0) return; if (businessCtrl.updateBusinessPriceById(my.getBid(), tmp2, tmp3)) { my.setStartPrice(tmp2); my.setDeliveryPrice(tmp3); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteBusiness() { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.println(my); if (!doChoice()) return; if (businessCtrl.deleteBusinessById(my.getBid())) { System.out.println("删除成功!"); return; } System.out.println("删除失败,请检查输入是否有误"); } private void menuListFoodAll() { List list = foodCtrl.listFoodAll(); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Food f : list) { System.out.println(f); } } private void menuSearchFoodByName() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 食物名称(模糊)(必填):"); tmp2 = InputUtil.menuInputString("(模糊)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; List list = foodCtrl.listFoodByName(tmp2); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Food f : list) { System.out.println(f); } } private void menuAddFood() { Food food = new Food(); double tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 食物名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; food.setFname(tmp2); System.out.print("|-- 介绍:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) food.setExplain(tmp2); System.out.print("|-- 价格(必填):"); tmp = InputUtil.menuInputDouble(""); if (tmp == -1 || tmp == 0) return; food.setPrice(tmp); food.setBid(my.getBid()); System.out.print("|-- 确认信息:"); System.out.println(food); if (!doChoice()) return; if (foodCtrl.addFood(food)) { System.out.println("添加成功!"); return; } System.out.println("添加失败,请检查输入是否有误"); } private void menuUpdateFoodPrice() { int tmp; double tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); menuListFoodAll(); System.out.print("|-- 食物ID(大于0的整数)(必填):"); tmp = InputUtil.menuInputInteger("(大于0的整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新价格(大于0的小数)(必填):"); tmp2 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp2 == -1 || tmp2 == 0) return; if (foodCtrl.updateFoodPriceById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateFood() { int id; double tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); menuListFoodAll(); System.out.print("|-- 需要修改的食物ID(大于0的整数)(必填):"); id = InputUtil.menuInputInteger("(大于0的整数)(必填)"); if (id == -1 || id == 0) return; Food food = foodCtrl.getFoodById(id); if (food == null || food.isEmpty()) { System.out.println("未查询到信息"); return; } System.out.print("|-- 食物名称(" + food.getFname() + "):"); tmp2 = InputUtil.menuInputString("(" + food.getFname() + ")"); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) food.setFname(tmp2); System.out.print("|-- 介绍:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) food.setExplain(tmp2); System.out.print("|-- 价格(" + food.getPrice() + "):"); tmp = InputUtil.menuInputDouble("(" + food.getPrice() + ")"); if (tmp == -1) return; if (tmp != 0) food.setPrice(tmp); System.out.print("|-- 确认信息:"); System.out.println(food); if (!doChoice()) return; if (foodCtrl.updateFoodById(food)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteFood() { int id; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); menuListFoodAll(); System.out.print("|-- 需要删除的食物ID(大于0的整数)(必填):"); id = InputUtil.menuInputInteger("(大于0的整数)(必填)"); if (id == -1 || id == 0) return; Food food = foodCtrl.getFoodById(id); if (food == null || food.isEmpty()) { System.out.println("未查询到信息"); return; } System.out.print("|-- 确认信息:"); System.out.println(food); if (!doChoice()) return; if (foodCtrl.deleteFoodById(id)) { System.out.println("删除成功!"); return; } System.out.println("删除失败,请检查输入是否有误"); } private boolean doChoice() { System.out.print("|-- 确认无误(1.是,2.否):"); int tmp = InputUtil.menuInputInteger("(1.是,2.否)"); return tmp == 1; } } ``` ## 九、总结 与JDBC的相比,MyBatis的`elm`实现了动态SQL,并且通过全注解去创建`Mapper`,另外优化了界面的操作逻辑。 项目编写思路: ① 导入依赖库 -> ② 创建数据库表对应的实例化对象 -> ③ 创建通用工具 -> ④ 写数据层接口及其实现类 -> ⑤ 写控制层接口及其实现类 -> ⑥ 根据控制层构建前端内容 -> ⑦ 根据前端需求修改控制层及数据层内容 -> ⑧ 优化前端逻辑 Loading... ## 一、设计数据库 #### 1、数据库结构 | No | 表名称 | 中文名 | 说明 | | -- | -------- | -------- | -------------------------------- | | 1 | business | 商家表 | 存储所有商家信息 | | 2 | food | 食品表 | 存储每个商家所拥有的所有食品信息 | | 3 | admin | 管理员表 | 存储管理员信息 | #### 2、表结构 约束类型标识: - PK:primary key 主键 - FK:foreign key 外键 - NN:not null 非空 - UQ:unique 唯一索引 - AI:auto increment 自增 ##### business(商家表) | No | 字段名 | 数据类型 | size | 默认値 | 约束 | 说明 | | -- | ------------- | -------- | ----- | ------ | ---------- | -------- | | 1 | bid | int | | | PK、AI、NN | 商家编号 | | 2 | password | varchar | 20 | | NN | 密码 | | 3 | bname | varchar | 40 | | NN | 商家名称 | | 4 | address | varchar | 50 | | | 商家地址 | | 5 | explain | varchar | 100 | | | 商家介绍 | | 6 | starPrice | decimal | (5,2) | 0.00 | | 起送费 | | 7 | deliveryPrice | decimal | (5,2) | 0.00 | | 配送费 | ##### food(食品表) | No | 字段名 | 数据类型 | size | 默认値 | 约束 | 说明 | | -- | ------- | -------- | ----- | ------ | ---------- | ------------ | | 1 | fid | int | | | PK、AI、NN | 食品编号 | | 2 | fname | varchar | 30 | | NN | 食品名称 | | 3 | explain | varchar | 30 | | | 食品介绍 | | 4 | price | decimal | (5,2) | | NN | 食品价格 | | 5 | bid | int | | | FK、NN | 所属商家编号 | ##### admin(管理员表) | No | 字段名 | 数据类型 | size | 默认値 | 约束 | 说明 | | -- | -------- | -------- | ---- | ------ | ---------- | ---------- | | 1 | aid | int | | | PK、AI、NN | 管理员编号 | | 2 | aname | varchar | 20 | | NN、UQ | 管理员名称 | | 3 | password | varchar | 20 | | NN | 密码 | #### 3、SQL语句 ```SQL CREATE DATABASE IF NOT EXISTS elm CHARSET utf8; USE elm; CREATE TABLE IF NOT EXISTS business ( bid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '商家编号', password VARCHAR(20) NOT NULL COMMENT '密码', bname VARCHAR(40) NOT NULL COMMENT '商家名称', address VARCHAR(50) COMMENT '商家地址', `explain` VARCHAR(100) COMMENT '商家介绍', startPrice DECIMAL(5, 2) DEFAULT 0.00 COMMENT '起送费', deliveryPrice DECIMAL(5, 2) DEFAULT 0.00 COMMENT '配送费' ); CREATE TABLE IF NOT EXISTS food ( fid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '食品编号', fname VARCHAR(30) NOT NULL COMMENT '食品名称', `explain` VARCHAR(30) COMMENT '食品介绍', price DECIMAL(5, 2) NOT NULL COMMENT '食品价格', bid INT UNSIGNED NOT NULL COMMENT '所属商家编号', FOREIGN KEY (bid) REFERENCES business (bid) ); CREATE TABLE IF NOT EXISTS admin ( aid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '管理员编号', aname VARCHAR(20) NOT NULL UNIQUE COMMENT '管理员名称', password VARCHAR(20) NOT NULL COMMENT '密码' ); INSERT INTO admin(aname, `password`) VALUES ('admin', 'admin'); ``` ## 二、添加依赖库 这次用到的是`Maven`项目,所以在`pom.xml`文件添加`dependencis`,依赖的库有`jdbc9.4.0`、`mybatis3.5.19`、`log4j1.2.17` ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>eml-MyBatis</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>22</maven.compiler.source> <maven.compiler.target>22</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>9.4.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.19</version> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> </project> ``` ## 三、添加配置文件 在`rescources`资源目录下创建下面的文件。 #### 1、数据库配置文件 创建`db.properties` ```properties jdbc.mysql.driver=com.mysql.cj.jdbc.Driver jdbc.mysql.url=jdbc:mysql://localhost:3306/elm?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8 jdbc.mysql.username=username jdbc.mysql.password=password ``` #### 2、日志配置文件 创建`log4j.properties` ```properties log4j.rootLogger=ERROR, stdout log4j.logger.org.mybatis.example.BlogMapper=TRACE log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n ``` 3、MyBatis配置文件 创建`sqlMapConfig.xml` ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 加载其他配置文件 --> <properties resource="db.properties"/> <settings> <!-- 如果aggressiveLazyLoading为true,即使lazyLoadingEnable为true也没有效果 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 全局延迟加载开关 默认为false --> <setting name="aggressiveLazyLoading" value="false"/> <!-- 延迟加载整个对象 默认为true,false:表示对象的每个属性都延迟加载 --> </settings> <typeAliases> <package name="com.doooog.mybatis.po"/> </typeAliases> <!-- 配置数据源 --> <environments default="development"> <environment id="development"> <!-- 数据源的事务管理 --> <transactionManager type="JDBC"/> <!-- 配置JDBC数据库信息 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.mysql.driver}"/> <property name="url" value="${jdbc.mysql.url}"/> <property name="username" value="${jdbc.mysql.username}"/> <property name="password" value="${jdbc.mysql.password}"/> </dataSource> </environment> </environments> <!-- 配置映射文件 --> <mappers> <package name="com.doooog.elmMyBatis.mapper"/> </mappers> </configuration> ``` ## 四、创建`model`层 新建`com.doooog.elmmybatis.po`包 #### 1、`Admin.java`类 ```java package com.doooog.elmmybatis.po; public class Admin { private Integer aid; private String aname; private String password; public Admin() { } public Admin(Integer aid, String aname, String password) { this.aid = aid; this.aname = aname; this.password = password; } @Override public String toString() { return "Admin{" + "aid=" + aid + ", aname='" + aname + '\'' + ", password='" + password + '\'' + '}'; } public boolean isEmpty() { return aid == null && (aname == null || aname.isEmpty()) && (password == null || password.isEmpty()); } public boolean isUnsafe(boolean withPK) { if (!withPK) { return isEmpty() || aname == null || aname.isEmpty() || password == null || password.isEmpty(); } else { return isEmpty() || aid == null || aid <= 0 || aname == null || aname.isEmpty() || password == null || password.isEmpty(); } } public Integer getAid() { return aid; } public void setAid(Integer aid) { this.aid = aid; } public String getAname() { return aname; } public void setAname(String aname) { this.aname = aname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` #### 2、`Business.java`类 ```java package com.doooog.elmmybatis.po; import java.util.List; public class Business { private Integer bid; private String password; private String bname; private String address; private String explain; private Double startPrice; private Double deliveryPrice; private List<Food> foodList; public Business() { } public Business(Integer bid, String password, String bname, String address, String explain, Double startPrice, Double deliveryPrice) { this.bid = bid; this.password = password; this.bname = bname; this.address = address; this.explain = explain; this.startPrice = startPrice; this.deliveryPrice = deliveryPrice; } public Business(Integer bid, String password, String bname, String address, String explain, Double startPrice, Double deliveryPrice, List<Food> foodList) { this.bid = bid; this.password = password; this.bname = bname; this.address = address; this.explain = explain; this.startPrice = startPrice; this.deliveryPrice = deliveryPrice; this.foodList = foodList; } @Override public String toString() { return "Business{" + "bid=" + bid + ", password='" + password + '\'' + ", bname='" + bname + '\'' + ", address='" + address + '\'' + ", explain='" + explain + '\'' + ", startPrice=" + startPrice + ", deliveryPrice=" + deliveryPrice + ", foodList=" + ((foodList != null && !foodList.isEmpty()) ? foodList : "null") + '}'; } public boolean isEmpty() { return bid == null && (bname == null || bname.isEmpty()) && (address == null || address.isEmpty()) && (explain == null || explain.isEmpty()) && startPrice == null && deliveryPrice == null && (foodList == null || foodList.isEmpty()); } public boolean isUnsafe(boolean withPK) { if (!withPK) { return isEmpty() || password == null || password.isEmpty() || bname == null || bname.isEmpty(); } else { return isEmpty() || bid == null || bid <= 0 || password == null || password.isEmpty() || bname == null || bname.isEmpty(); } } public Business copy() { return new Business(bid, password, bname, address, explain, startPrice, deliveryPrice, foodList); } public List<Food> getFoodList() { return foodList; } public void setFoodList(List<Food> foodList) { this.foodList = foodList; } public Integer getBid() { return bid; } public void setBid(Integer bid) { this.bid = bid; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getExplain() { return explain; } public void setExplain(String explain) { this.explain = explain; } public Double getStartPrice() { return startPrice; } public void setStartPrice(Double startPrice) { this.startPrice = startPrice; } public Double getDeliveryPrice() { return deliveryPrice; } public void setDeliveryPrice(Double deliveryPrice) { this.deliveryPrice = deliveryPrice; } } ``` #### 3、`food.java`类 ```java package com.doooog.elmmybatis.po; public class Food { private Integer fid; private String fname; private String explain; private Double price; private Integer bid; private Business business; public Food() { } public Food(Integer fid, String fname, String explain, Double price, Integer bid) { this.fid = fid; this.fname = fname; this.explain = explain; this.price = price; this.bid = bid; } public Food(Integer fid, String fname, String explain, Double price, Integer bid, Business business) { this.fid = fid; this.fname = fname; this.explain = explain; this.price = price; this.bid = bid; this.business = business; } @Override public String toString() { return "Food{" + "fid=" + fid + ", fname='" + fname + '\'' + ", explain='" + explain + '\'' + ", price=" + price + ", bid=" + bid + ", business=" + ((business != null && !business.isEmpty()) ? business : "null") + '}'; } public boolean isEmpty() { return fid == null && (fname == null || fname.isEmpty()) && (explain == null || explain.isEmpty()) && price == null && bid == null && (business == null || business.isEmpty()); } public boolean isUnsafe(boolean withPK) { if (!withPK) { return this.isEmpty() || bid == null || bid <= 0 || fname == null || fname.isEmpty() || price == null || price <= 0; } else { return this.isEmpty() || fid == null || fid <= 0 || bid == null || bid <= 0 || fname == null || fname.isEmpty() || price == null || price <= 0; } } public Integer getFid() { return fid; } public void setFid(Integer fid) { this.fid = fid; } public String getFname() { return fname; } public void setFname(String fname) { this.fname = fname; } public String getExplain() { return explain; } public void setExplain(String explain) { this.explain = explain; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Integer getBid() { return bid; } public void setBid(Integer bid) { this.bid = bid; } public Business getBusiness() { return business; } public void setBusiness(Business business) { this.business = business; } } ``` ## 五、创建`util`层 新建`com.doooog.elmmybatis.util`包 #### 1、数据库工具类 ```java package com.doooog.elmmybatis.util; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class DBUtil { private static final SqlSessionFactory sqlSessionFactory; static { SqlSessionFactory sqlSessionFactory1; try { // 1、读取Mybatis配置文件 InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml"); // 2、通过配置文件信息,创建SqlSessionFactory sqlSessionFactory1 = new SqlSessionFactoryBuilder().build(input); } catch (IOException e) { sqlSessionFactory1 = null; System.out.println(e.getMessage()); } sqlSessionFactory = sqlSessionFactory1; } public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } } ``` #### 2、输入工具类 ```java package com.doooog.elmmybatis.util; import java.util.InputMismatchException; import java.util.Scanner; public class InputUtil { private static final Scanner INPUT = new Scanner(System.in); public static int menuInputInteger(String msg) { int data; try { data = INPUT.nextInt(); if (data < -2) throw new InputMismatchException(); } catch (InputMismatchException e) { INPUT.nextLine(); if (!msg.isEmpty()) { System.out.print("输入的类型错误!请重新输入" + msg + ":"); } else { System.out.print("输入的类型错误!请重新输入:"); } data = menuInputInteger(msg); } return data; } public static double menuInputDouble(String msg) { double data; try { data = INPUT.nextDouble(); if (data < 0 && data != -1) throw new InputMismatchException(); } catch (InputMismatchException e) { INPUT.nextLine(); if (!msg.isEmpty()) { System.out.print("输入的类型错误!请重新输入" + msg + ":"); } else { System.out.print("输入的类型错误!请重新输入:"); } data = menuInputDouble(msg); } return data; } public static String menuInputString(String msg) { String data; try { data = INPUT.next(); } catch (InputMismatchException e) { INPUT.nextLine(); if (!msg.isEmpty()) { System.out.print("输入的类型错误!请重新输入" + msg + ":"); } else { System.out.print("输入的类型错误!请重新输入:"); } data = menuInputString(msg); } return data; } } ``` #### 3、其他工具类 ```java package com.doooog.elmmybatis.util; public class CommonUtil { public static String copyChar(char c, int num) { if (num <= 0) return ""; return String.valueOf(c).repeat(num); } } ``` ## 六、创建`data`层 新建`com.doooog.elmmybatis.mapper`包、`com.doooog.elmmybatis.sqlprovider`包 #### 1、`AdminMapper.java`接口 ```java package com.doooog.elmmybatis.mapper; import com.doooog.elmmybatis.sqlprovider.AdminSqlProvider; import com.doooog.elmmybatis.po.Admin; import org.apache.ibatis.annotations.*; import java.util.List; public interface AdminMapper { @Results(id = "adminResults", value = { @Result(property = "aid", column = "aid", id = true), @Result(property = "aname", column = "aname"), @Result(property = "password", column = "password") }) @Select("select * from admin;") List<Admin> listAdminAll(); @Select("select * from admin where aname=#{username} and password=#{password}") @ResultMap("adminResults") Admin getAdminByLogin(@Param("username") String username, @Param("password") String password); @Select("select * from admin where aid=#{aid}") @ResultMap("adminResults") Admin getAdminById(int aid); @Insert("insert into admin(aname, password) values(#{aname},#{password})") int addAdmin(Admin admin); @Insert("insert into admin values(#{aid},#{aname},#{password})") int addAdminWithId(Admin admin); @Delete("delete from admin where aid=#{aid}") int deleteAdminById(int aid); @UpdateProvider(type = AdminSqlProvider.class, method = "updateAdmin") int updateAdminById(Admin admin); @Select("select count(aid) from admin where aname=#{aname}") int getAdminByName(String aname); } ``` #### 2、`BusinessMapper.java`接口 ```java package com.doooog.elmmybatis.mapper; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.sqlprovider.BusinessSqlProvider; import org.apache.ibatis.annotations.*; import java.util.List; public interface BusinessMapper { @Select("select * from business where bid=#{bid} and password=#{password}") @Results(id = "businessResults", value = { @Result(property = "bid", column = "bid", id = true), @Result(property = "password", column = "password"), @Result(property = "bname", column = "bname"), @Result(property = "address", column = "address"), @Result(property = "explain", column = "explain"), @Result(property = "startPrice", column = "deliveryPrice"), @Result(property = "foodList", column = "bid", javaType = List.class, many = @Many(select = "com.doooog.elmmybatis.mapper.FoodMapper.listFoodByBidLazy")) }) Business getBusinessByLogin(@Param("bid") int bid, @Param("password") String password); @Select("select * from business where bid=#{bid}") @ResultMap("businessResults") Business getBusinessById(int bid); @Select("select * from business where bid=#{bid}") @Results({ @Result(property = "bid", column = "bid", id = true), @Result(property = "password", column = "password"), @Result(property = "bname", column = "bname"), @Result(property = "address", column = "address"), @Result(property = "explain", column = "explain"), @Result(property = "startPrice", column = "deliveryPrice"), }) Business getBusinessByIdLazy(int bid); @Select("select * from business where bname=#{bname}") @ResultMap("businessResults") Business getBusinessByName(String bname); @Select("select * from business where bname like concat('%',#{bname},'%')") @ResultMap("businessResults") List<Business> listBusinessByName(String bname); @Select("select * from business") @ResultMap("businessResults") List<Business> listBusinessAll(); @Insert("insert into business(password, bname, address, `explain`, startPrice, deliveryPrice) values (#{password},#{bname},#{address},#{explain},#{startPrice},#{deliveryPrice})") @Options(useGeneratedKeys = true, keyProperty = "bid", keyColumn = "bid") int addBusiness(Business business); @Insert("insert into business values (#{bid},#{password},#{bname},#{address},#{explain},#{startPrice},#{deliveryPrice})") @Options(useGeneratedKeys = true, keyProperty = "bid", keyColumn = "bid") int addBusinessWithId(Business business); @UpdateProvider(type = BusinessSqlProvider.class, method = "updateBusinessById") int updateBusinessById(Business business); @Delete("delete from business where bid=#{bid}") int deleteBusinessById(int bid); } ``` #### 3、`FoodMapper.java`接口 ```java package com.doooog.elmmybatis.mapper; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.po.Food; import com.doooog.elmmybatis.sqlprovider.FoodSqlProvider; import org.apache.ibatis.annotations.*; import java.util.List; public interface FoodMapper { @Select("select * from food where fid=#{fid}") @Results(id = "foodResults", value = { @Result(property = "fid", column = "fid", id = true), @Result(property = "fname", column = "fname"), @Result(property = "explain", column = "explain"), @Result(property = "price", column = "price"), @Result(property = "bid", column = "bid"), @Result(property = "business", column = "bid", javaType = Business.class, one = @One(select = "com.doooog.elmmybatis.mapper.BusinessMapper.getBusinessByIdLazy")) }) Food getFoodById(int fid); @Select("select * from food where fname=#{fname}") @ResultMap("foodResults") List<Food> getFoodByName(String fname); @Select("select * from food where fname like concat('%',#{fname},'%')") @ResultMap("foodResults") List<Food> listFoodByName(String fname); @Select("select * from food") @ResultMap("foodResults") List<Food> listFoodAll(); @Select("select * from food where food.bid=#{bid}") @Results({ @Result(property = "fid", column = "fid", id = true), @Result(property = "fname", column = "fname"), @Result(property = "explain", column = "explain"), @Result(property = "price", column = "price"), @Result(property = "bid", column = "bid") }) Food listFoodByBidLazy(int bid); @UpdateProvider(type = FoodSqlProvider.class, method = "updateFoodById") int updateFoodById(Food food); @Insert("insert into food ( fname, `explain`, price, bid) values (#{fname},#{explain},#{price},#{bid})") @Options(useGeneratedKeys = true, keyProperty = "fid", keyColumn = "fid") int addFood(Food food); @Insert("insert into food values (#{fid},#{fname},#{explain},#{price},#{bid})") @Options(useGeneratedKeys = true, keyProperty = "fid", keyColumn = "fid") int addFoodWithId(Food food); @Delete("delete from food where fid=#{fid}") int deleteFoodById(int fid); } ``` #### 4、`AdminSqlProvider.java`类 ```java package com.doooog.elmmybatis.sqlprovider; import com.doooog.elmmybatis.po.Admin; import org.apache.ibatis.jdbc.SQL; public class AdminSqlProvider { public String updateAdmin(Admin admin) { return new SQL() {{ UPDATE("admin"); if (admin.getAname() != null && !admin.getAname().isEmpty()) SET("aname=#{aname}"); if (admin.getPassword() != null && !admin.getPassword().isEmpty()) SET("password=#{password}"); WHERE("aid=#{aid}"); }}.toString(); } } ``` #### 5、`BusinessSqlProvider.java`类 ```java package com.doooog.elmmybatis.sqlprovider; import com.doooog.elmmybatis.po.Business; import org.apache.ibatis.jdbc.SQL; public class BusinessSqlProvider { public String updateBusinessById(Business business) { return new SQL() {{ UPDATE("business"); if (business.getPassword() != null && !business.getPassword().isEmpty()) SET("password=#{password}"); if (business.getBname() != null && !business.getBname().isEmpty()) SET("bname=#{bname}"); if (business.getAddress() != null && !business.getAddress().isEmpty()) SET("address=#{address}"); if (business.getExplain() != null && !business.getExplain().isEmpty()) SET("`explain`=#{explain}"); if (business.getStartPrice() != null && business.getStartPrice() > 0) SET("startPrice=#{startPrice}"); if (business.getDeliveryPrice() != null && business.getDeliveryPrice() > 0) SET("deliveryPrice=#{deliveryPrice}"); WHERE("bid=#{bid}"); }}.toString(); } } ``` #### 6、`FoodSqlProvider.java`类 ```java package com.doooog.elmmybatis.sqlprovider; import com.doooog.elmmybatis.po.Food; import org.apache.ibatis.jdbc.SQL; public class FoodSqlProvider { public String updateFoodById(Food food) { return new SQL() {{ UPDATE("food"); if (food.getFname() != null && !food.getFname().isEmpty()) SET("fname=#{fname}"); if (food.getExplain() != null && !food.getExplain().isEmpty()) SET("`explain`=#{explain}"); if (food.getPrice() != null && food.getPrice() > 0) SET("price=#{price}"); if (food.getBid() != null && food.getBid() > 0) SET("bid=#{bid}"); WHERE("fid=#{fid}"); }}.toString(); } } ``` ## 七、创建`Controller`层 新建`com.doooog.elmmybatis.controller`包、`com.doooog.elmmybatis.controller.impl`包 #### 1、`AdminCtrl.java`接口 ```java package com.doooog.elmmybatis.controller; import com.doooog.elmmybatis.po.Admin; import java.util.List; public interface AdminCtrl { // 管理员部分 boolean login(String username, String password); boolean addAdmin(Admin admin); boolean deleteAdminById(int aid); List<Admin> listAdminAll(); boolean updateAdminPasswordById(int aid, String oldPW, String newPW); boolean getAdminById(int aid); } ``` #### 2、`BusinessCtrl.java`接口 ```java package com.doooog.elmmybatis.controller; import com.doooog.elmmybatis.po.Business; import java.util.List; public interface BusinessCtrl { // 商家部分 Business login(int bid, String password); boolean updateBusinessPasswordById(int bid, String oldPW, String newPW); boolean updateBusinessNameById(int bid, String name); boolean updateBusinessAddressById(int bid, String address); boolean updateBusinessExplainById(int bid, String explain); boolean updateBusinessPriceById(int bid,double startPrice, double deliveryPrice); boolean deleteBusinessById(int bid); boolean addBusiness(Business business); boolean getBusinessById(int bid); List<Business> listBusinessAll(); } ``` #### 3、`FoodCtrl.java`接口 ```java package com.doooog.elmmybatis.controller; import com.doooog.elmmybatis.po.Food; import java.util.List; public interface FoodCtrl { Food getFoodById(int fid); List<Food> listFoodAll(); List<Food> listFoodByName(String fname); boolean addFood(Food food); boolean updateFoodPriceById(int fid,double price); boolean updateFoodById(Food food); boolean deleteFoodById(int fid); } ``` #### 4、`AdminCtrlImpl.java`类 ```java package com.doooog.elmmybatis.controller.impl; import com.doooog.elmmybatis.controller.AdminCtrl; import com.doooog.elmmybatis.mapper.AdminMapper; import com.doooog.elmmybatis.po.Admin; import com.doooog.elmmybatis.util.DBUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; public class AdminCtrlImpl implements AdminCtrl { public boolean login(String username, String password) { if (username == null || password == null || username.isEmpty() || password.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); Admin admin = adminMapper.getAdminByLogin(username, password); return admin != null && !admin.isEmpty(); } } @Override public boolean addAdmin(Admin admin) { if (admin == null) return false; if ((admin.getAid() == null || admin.getAid() <= 0) && !admin.isUnsafe(false)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.addAdmin(admin) == 1; } } else if (!admin.isUnsafe(true)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.addAdminWithId(admin) == 1; } } return false; } @Override public boolean deleteAdminById(int aid) { if (aid <= 1) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.deleteAdminById(aid) == 1; } } @Override public List<Admin> listAdminAll() { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); return adminMapper.listAdminAll(); } } @Override public boolean updateAdminPasswordById(int aid, String oldPW, String newPW) { if (aid <= 0 || oldPW == null || oldPW.isEmpty() || newPW == null || newPW.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); Admin admin = adminMapper.getAdminById(aid); if (admin == null || !admin.getPassword().equals(oldPW)) return false; Admin tmp = new Admin(); tmp.setAid(aid); tmp.setPassword(newPW); return adminMapper.updateAdminById(tmp) == 1; } } @Override public boolean getAdminById(int aid) { if (aid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class); Admin admin = adminMapper.getAdminById(aid); if (admin == null) return false; System.out.println(admin); return true; } } } ``` #### 5、`BusinessCtrlImpl.java`类 ```java package com.doooog.elmmybatis.controller.impl; import com.doooog.elmmybatis.controller.BusinessCtrl; import com.doooog.elmmybatis.mapper.BusinessMapper; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.util.DBUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; public class BusinessCtrlImpl implements BusinessCtrl { @Override public Business login(int bid, String password) { if (bid <= 0 || password == null || password.isEmpty()) return null; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); return businessMapper.getBusinessByLogin(bid, password); } } @Override public boolean addBusiness(Business business) { if (business == null) return false; if ((business.getBid() == null || business.getBid() <= 0) && !business.isUnsafe(false)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); int rs = businessMapper.addBusiness(business); return rs != 0; } } else if (!business.isUnsafe(true)) { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); int rs = businessMapper.addBusinessWithId(business); return rs != 0; } } return false; } @Override public boolean deleteBusinessById(int bid) { if (bid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); return businessMapper.deleteBusinessById(bid) == 1; } } @Override public boolean getBusinessById(int bid) { if (bid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business b = businessMapper.getBusinessById(bid); return b != null; } } @Override public List<Business> listBusinessAll() { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); return businessMapper.listBusinessAll(); } } @Override public boolean updateBusinessPasswordById(int bid, String oldPW, String newPW) { if (bid <= 0 || oldPW == null || oldPW.isEmpty() || newPW == null || newPW.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business b = businessMapper.getBusinessById(bid); if (b == null || !b.getPassword().equals(oldPW)) return false; Business tmp = new Business(); tmp.setBid(bid); tmp.setPassword(newPW); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessNameById(int bid, String name) { if (bid <= 0 || name == null || name.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setBname(name); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessAddressById(int bid, String address) { if (bid <= 0 || address == null || address.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setAddress(address); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessExplainById(int bid, String explain) { if (bid <= 0 || explain == null || explain.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setExplain(explain); return businessMapper.updateBusinessById(tmp) == 1; } } @Override public boolean updateBusinessPriceById(int bid, double startPrice, double deliveryPrice) { if (bid <= 0 || startPrice <= 0 || deliveryPrice <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { BusinessMapper businessMapper = sqlSession.getMapper(BusinessMapper.class); Business tmp = new Business(); tmp.setBid(bid); tmp.setStartPrice(startPrice); tmp.setDeliveryPrice(deliveryPrice); return businessMapper.updateBusinessById(tmp) == 1; } } } ``` #### 6、`FoodCtrlImpl.java`类 ```java package com.doooog.elmmybatis.controller.impl; import com.doooog.elmmybatis.controller.FoodCtrl; import com.doooog.elmmybatis.mapper.FoodMapper; import com.doooog.elmmybatis.po.Food; import com.doooog.elmmybatis.util.DBUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; public class FoodCtrlImpl implements FoodCtrl { @Override public Food getFoodById(int fid) { if (fid <= 0) return null; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.getFoodById(fid); } } @Override public List<Food> listFoodAll() { try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.listFoodAll(); } } @Override public List<Food> listFoodByName(String fname) { if (fname == null || fname.isEmpty()) return null; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.listFoodByName(fname); } } @Override public boolean addFood(Food food) { if (food == null || food.isEmpty()) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); if ((food.getFid() == null || food.getFid() <= 0) && !food.isUnsafe(false)) { return foodMapper.addFood(food) > 0; } else if (!food.isUnsafe(true)) { return foodMapper.addFoodWithId(food) > 0; } return false; } } @Override public boolean updateFoodPriceById(int fid, double price) { if (fid <= 0 || price <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); Food tmp = new Food(); tmp.setFid(fid); tmp.setPrice(price); return foodMapper.updateFoodById(tmp) > 0; } } @Override public boolean updateFoodById(Food food) { if (food == null || food.isEmpty() || food.isUnsafe(true)) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.updateFoodById(food) > 0; } } @Override public boolean deleteFoodById(int fid) { if (fid <= 0) return false; try (SqlSession sqlSession = DBUtil.getSqlSessionFactory().openSession()) { FoodMapper foodMapper = sqlSession.getMapper(FoodMapper.class); return foodMapper.deleteFoodById(fid) > 0; } } } ``` ## 八、创建`view`层 新建`com.doooog.elmmybatis.view`包 #### 1、`MainEntry.java`类 ```java package com.doooog.elmmybatis.view; import com.doooog.elmmybatis.util.CommonUtil; import com.doooog.elmmybatis.util.InputUtil; public class MainEntry { public static void main(String[] args) { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 欢迎进入饿了么后台管理系统 --|"); System.out.println("|-- 1.系统管理员 2.商家"); System.out.print("|-- 请输入编号(0.退出):"); int choice = InputUtil.menuInputInteger("(1或2或0)"); switch (choice) { case 0 -> exit = true; case 1 -> new AdminView().menuLogin(); case 2 -> new BusinessView().menuLogin(); default -> { } } } } } ``` #### 2、`AdminView.java`类 ```java package com.doooog.elmmybatis.view; import com.doooog.elmmybatis.controller.AdminCtrl; import com.doooog.elmmybatis.controller.BusinessCtrl; import com.doooog.elmmybatis.controller.impl.AdminCtrlImpl; import com.doooog.elmmybatis.controller.impl.BusinessCtrlImpl; import com.doooog.elmmybatis.po.Admin; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.util.CommonUtil; import com.doooog.elmmybatis.util.InputUtil; import java.util.List; public class AdminView { private AdminCtrl adminCtrl = new AdminCtrlImpl(); private BusinessCtrl businessCtrl = new BusinessCtrlImpl(); public void menuLogin() { System.out.println("|-- 请使用管理员身份进行登录 --|"); System.out.print("|-- 请输入用户名:"); String username = InputUtil.menuInputString(""); System.out.print("|-- 请输入密码:"); String password = InputUtil.menuInputString(""); if (adminCtrl.login(username, password)) { System.out.println("登录成功!"); menuMain(); } else { System.out.println("登录失败,请检查账号或密码是否有误!"); } } private void menuMain() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 管理员菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.管理员操作"); System.out.println("|-- 2.管理商家"); System.out.println("|-- 0.退出登录"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~2整数):"); int choice = InputUtil.menuInputInteger("(0~2整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuAdmin(); case 2 -> menuBusiness(); default -> { } } } } private void menuAdmin() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 管理员菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.查看所有管理员"); System.out.println("|-- 2.新增管理员"); System.out.println("|-- 3.更改管理员密码"); System.out.println("|-- 4.删除管理员"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~4整数):"); int choice = InputUtil.menuInputInteger("(0~4整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuListAdminAll(); case 2 -> menuAddAdmin(); case 3 -> menuRePasswordAdmin(); case 4 -> menuDeleteAdmin(); default -> { } } } } private void menuBusiness() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 管理员菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.查看所有商家"); System.out.println("|-- 2.新增商家"); System.out.println("|-- 3.更改商家密码"); System.out.println("|-- 4.更改商家名称"); System.out.println("|-- 5.更改商家地址"); System.out.println("|-- 6.更改商家介绍"); System.out.println("|-- 7.更改商家配送价格"); System.out.println("|-- 8.删除商家"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~12整数):"); int choice = InputUtil.menuInputInteger("(0~12整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuListBusinessAll(); case 2 -> menuAddBusiness(); case 3 -> menuRePasswordBusiness(); case 4 -> menuRenameBusiness(); case 5 -> menuReAddress(); case 6 -> menuReExplain(); case 7 -> menuRePrice(); case 8 -> menuDeleteBusiness(); default -> { } } } } private void menuListBusinessAll() { List<Business> list = businessCtrl.listBusinessAll(); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Business business : list) { System.out.println(business); } } private void menuListAdminAll() { List<Admin> list = adminCtrl.listAdminAll(); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Admin admin : list) { System.out.println(admin); } } private void menuAddAdmin() { Admin admin = new Admin(); int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- ID(整数):"); tmp = InputUtil.menuInputInteger("(请输入整数,或0跳过)"); if (tmp == -1) return; if (tmp != 0) admin.setAid(tmp); System.out.print("|-- 账号(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setAname(tmp2); System.out.print("|-- 密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setPassword(tmp2); if (adminCtrl.addAdmin(admin)) { System.out.println("添加成功!"); return; } System.out.println("添加失败,请检查输入是否有误,ID可以为空"); } private void menuRePasswordAdmin() { Admin admin = new Admin(); int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)提取方法…"); if (tmp == -1 || tmp == 0) return; admin.setAid(tmp); System.out.print("|-- 旧密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setAname(tmp2); System.out.print("|-- 新密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; admin.setPassword(tmp2); if (adminCtrl.updateAdminPasswordById(admin.getAid(), admin.getAname(), admin.getPassword())) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteAdmin() { int tmp; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要删除的ID(0以上整数)(必填):"); tmp = InputUtil.menuInputInteger("(0以上整数)"); if (tmp == -1) return; if (!adminCtrl.getAdminById(tmp)) { System.out.println("未查询到信息"); return; } if (!doChoice()) return; if (adminCtrl.deleteAdminById(tmp)) { System.out.println("删除成功!"); return; } System.out.println("删除失败,未知错误"); } private void menuAddBusiness() { Business business = new Business(); double tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setBname(tmp2); System.out.print("|-- 密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setPassword(tmp2); System.out.print("|-- 地址:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) business.setAddress(tmp2); System.out.print("|-- 介绍:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) business.setExplain(tmp2); System.out.print("|-- 起送价格:"); tmp = InputUtil.menuInputDouble(""); if (tmp == -1) return; if (tmp != 0) business.setStartPrice(tmp); System.out.print("|-- 配送价格:"); tmp = InputUtil.menuInputDouble(""); if (tmp == -1) return; if (tmp != 0) business.setDeliveryPrice(tmp); System.out.print("|-- 确认信息:"); System.out.println(business); if (!doChoice()) return; if (businessCtrl.addBusiness(business)) { System.out.println("添加成功!"); System.out.println("您用于登录的编号为:" + business.getBid()); return; } System.out.println("添加失败,请检查输入是否有误"); } private void menuRePasswordBusiness() { Business business = new Business(); int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; business.setBid(tmp); System.out.print("|-- 旧密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setBname(tmp2); System.out.print("|-- 新密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; business.setPassword(tmp2); if (businessCtrl.updateBusinessPasswordById(business.getBid(), business.getBname(), business.getPassword())) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuRenameBusiness() { int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessNameById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuReAddress() { int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新地址(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessAddressById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuReExplain() { int tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新介绍(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessExplainById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuRePrice() { int tmp; double tmp2, tmp3; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要更改的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新起送价(大于0的小数)(必填):"); tmp2 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp2 == -1 || tmp2 == 0) return; System.out.print("|-- 新配送价(大于0的小数)(必填):"); tmp3 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp3 == -1 || tmp3 == 0) return; if (businessCtrl.updateBusinessPriceById(tmp, tmp2, tmp3)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteBusiness() { int tmp; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 需要删除的ID(整数)(必填):"); tmp = InputUtil.menuInputInteger("(整数)(必填)"); if (tmp == -1 || tmp == 0) return; if (!businessCtrl.getBusinessById(tmp)) { System.out.println("未查询到信息"); return; } if (!doChoice()) return; if (businessCtrl.deleteBusinessById(tmp)) { System.out.println("删除成功!"); return; } System.out.println("删除失败,请检查输入是否有误"); } private boolean doChoice() { System.out.print("|-- 确认无误(1.是,2.否):"); int tmp = InputUtil.menuInputInteger("(1.是,2.否)"); return tmp == 1; } } ``` #### 3、`BusinessView.java`类 ```java package com.doooog.elmmybatis.view; import com.doooog.elmmybatis.controller.BusinessCtrl; import com.doooog.elmmybatis.controller.FoodCtrl; import com.doooog.elmmybatis.controller.impl.BusinessCtrlImpl; import com.doooog.elmmybatis.controller.impl.FoodCtrlImpl; import com.doooog.elmmybatis.po.Business; import com.doooog.elmmybatis.po.Food; import com.doooog.elmmybatis.util.CommonUtil; import com.doooog.elmmybatis.util.InputUtil; import java.util.List; public class BusinessView { private BusinessCtrl businessCtrl = new BusinessCtrlImpl(); private FoodCtrl foodCtrl = new FoodCtrlImpl(); private Business my; private boolean exit2; public void menuLogin() { System.out.println("|-- 请使用商家身份进行登录 --|"); System.out.print("|-- 请输入商家编号:"); int username = InputUtil.menuInputInteger(""); System.out.print("|-- 请输入密码:"); String password = InputUtil.menuInputString(""); my = businessCtrl.login(username, password); if (my != null && !my.isEmpty()) { System.out.println("登录成功!"); menuMain(); } else { System.out.println("登录失败,请检查账号或密码是否有误!"); } } private void menuMain() { boolean exit = false; while (!exit) { if (exit2) { exit = true; continue; } System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 商家菜单 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.账号操作"); System.out.println("|-- 2.食物操作"); System.out.println("|-- 0.退出登录"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~2整数):"); int choice = InputUtil.menuInputInteger("(0~2整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuBusiness(); case 2 -> menuFood(); default -> { } } } } private void menuBusiness() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 账号操作 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.修改密码"); System.out.println("|-- 2.更改名称"); System.out.println("|-- 3.更改介绍"); System.out.println("|-- 4.更改地址"); System.out.println("|-- 5.更改配送价格"); System.out.println("|-- 6.注销商家"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~6整数):"); int choice = InputUtil.menuInputInteger("(0~6整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuUpdatePassword(); case 2 -> menuUpdateName(); case 3 -> menuUpdateExplain(); case 4 -> menuUpdateAddress(); case 5 -> menuUpdatePrice(); case 6 -> { menuDeleteBusiness(); exit2 = true; exit = true; } default -> { } } } } private void menuFood() { boolean exit = false; while (!exit) { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 食物操作 --|"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.println("|-- 1.查看所有食物"); System.out.println("|-- 2.搜索食物名称"); System.out.println("|-- 3.新增食物"); System.out.println("|-- 4.修改食物价格"); System.out.println("|-- 5.修改食物信息"); System.out.println("|-- 6.删除食物"); System.out.println("|-- 0.返回上一页"); System.out.println(CommonUtil.copyChar('-', 30)); System.out.print("|-- 请输入编号(0~6整数):"); int choice = InputUtil.menuInputInteger("(0~6整数)"); switch (choice) { case 0 -> exit = true; case 1 -> menuListFoodAll(); case 2 -> menuSearchFoodByName(); case 3 -> menuAddFood(); case 4 -> menuUpdateFoodPrice(); case 5 -> menuUpdateFood(); case 6 -> menuDeleteFood(); default -> { } } } } private void menuUpdatePassword() { Business b = my.copy(); String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 旧密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; b.setBname(tmp2); System.out.print("|-- 新密码(字母+数字)(必填):"); tmp2 = InputUtil.menuInputString("(字母+数字)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; b.setPassword(tmp2); if (businessCtrl.updateBusinessPasswordById(b.getBid(), b.getBname(), b.getPassword())) { my.setPassword(b.getPassword()); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateName() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessNameById(my.getBid(), tmp2)) { my.setBname(tmp2); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateExplain() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新介绍(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessExplainById(my.getBid(), tmp2)) { my.setExplain(tmp2); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateAddress() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新地址(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; if (businessCtrl.updateBusinessAddressById(my.getBid(), tmp2)) { my.setAddress(tmp2); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdatePrice() { double tmp2, tmp3; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 新起送价(大于0的小数)(必填):"); tmp2 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp2 == -1 || tmp2 == 0) return; System.out.print("|-- 新配送价(大于0的小数)(必填):"); tmp3 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp3 == -1 || tmp3 == 0) return; if (businessCtrl.updateBusinessPriceById(my.getBid(), tmp2, tmp3)) { my.setStartPrice(tmp2); my.setDeliveryPrice(tmp3); System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteBusiness() { System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.println(my); if (!doChoice()) return; if (businessCtrl.deleteBusinessById(my.getBid())) { System.out.println("删除成功!"); return; } System.out.println("删除失败,请检查输入是否有误"); } private void menuListFoodAll() { List<Food> list = foodCtrl.listFoodAll(); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Food f : list) { System.out.println(f); } } private void menuSearchFoodByName() { String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 食物名称(模糊)(必填):"); tmp2 = InputUtil.menuInputString("(模糊)(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; List<Food> list = foodCtrl.listFoodByName(tmp2); if (list == null || list.isEmpty()) { System.out.println("未查询到信息"); return; } for (Food f : list) { System.out.println(f); } } private void menuAddFood() { Food food = new Food(); double tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); System.out.print("|-- 食物名称(必填):"); tmp2 = InputUtil.menuInputString("(必填)"); if (tmp2.equals("-1") || tmp2.equals("0")) return; food.setFname(tmp2); System.out.print("|-- 介绍:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) food.setExplain(tmp2); System.out.print("|-- 价格(必填):"); tmp = InputUtil.menuInputDouble(""); if (tmp == -1 || tmp == 0) return; food.setPrice(tmp); food.setBid(my.getBid()); System.out.print("|-- 确认信息:"); System.out.println(food); if (!doChoice()) return; if (foodCtrl.addFood(food)) { System.out.println("添加成功!"); return; } System.out.println("添加失败,请检查输入是否有误"); } private void menuUpdateFoodPrice() { int tmp; double tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); menuListFoodAll(); System.out.print("|-- 食物ID(大于0的整数)(必填):"); tmp = InputUtil.menuInputInteger("(大于0的整数)(必填)"); if (tmp == -1 || tmp == 0) return; System.out.print("|-- 新价格(大于0的小数)(必填):"); tmp2 = InputUtil.menuInputDouble("(大于0的小数)(必填)"); if (tmp2 == -1 || tmp2 == 0) return; if (foodCtrl.updateFoodPriceById(tmp, tmp2)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuUpdateFood() { int id; double tmp; String tmp2; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); menuListFoodAll(); System.out.print("|-- 需要修改的食物ID(大于0的整数)(必填):"); id = InputUtil.menuInputInteger("(大于0的整数)(必填)"); if (id == -1 || id == 0) return; Food food = foodCtrl.getFoodById(id); if (food == null || food.isEmpty()) { System.out.println("未查询到信息"); return; } System.out.print("|-- 食物名称(" + food.getFname() + "):"); tmp2 = InputUtil.menuInputString("(" + food.getFname() + ")"); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) food.setFname(tmp2); System.out.print("|-- 介绍:"); tmp2 = InputUtil.menuInputString(""); if (tmp2.equals("-1")) return; if (!tmp2.equals("0")) food.setExplain(tmp2); System.out.print("|-- 价格(" + food.getPrice() + "):"); tmp = InputUtil.menuInputDouble("(" + food.getPrice() + ")"); if (tmp == -1) return; if (tmp != 0) food.setPrice(tmp); System.out.print("|-- 确认信息:"); System.out.println(food); if (!doChoice()) return; if (foodCtrl.updateFoodById(food)) { System.out.println("修改成功!"); return; } System.out.println("修改失败,请检查输入是否有误"); } private void menuDeleteFood() { int id; System.out.println(CommonUtil.copyChar('=', 30)); System.out.println("|-- 没有(必填)项输入0可跳过,输入-1返回上级菜单"); menuListFoodAll(); System.out.print("|-- 需要删除的食物ID(大于0的整数)(必填):"); id = InputUtil.menuInputInteger("(大于0的整数)(必填)"); if (id == -1 || id == 0) return; Food food = foodCtrl.getFoodById(id); if (food == null || food.isEmpty()) { System.out.println("未查询到信息"); return; } System.out.print("|-- 确认信息:"); System.out.println(food); if (!doChoice()) return; if (foodCtrl.deleteFoodById(id)) { System.out.println("删除成功!"); return; } System.out.println("删除失败,请检查输入是否有误"); } private boolean doChoice() { System.out.print("|-- 确认无误(1.是,2.否):"); int tmp = InputUtil.menuInputInteger("(1.是,2.否)"); return tmp == 1; } } ``` ## 九、总结 与JDBC的相比,MyBatis的`elm`实现了动态SQL,并且通过全注解去创建`Mapper`,另外优化了界面的操作逻辑。 项目编写思路: ① 导入依赖库 -> ② 创建数据库表对应的实例化对象 -> ③ 创建通用工具 -> ④ 写数据层接口及其实现类 -> ⑤ 写控制层接口及其实现类 -> ⑥ 根据控制层构建前端内容 -> ⑦ 根据前端需求修改控制层及数据层内容 -> ⑧ 优化前端逻辑 最后修改:2025 年 10 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 👆请简单粗暴地爱我。