为了实现顾客下单的功能,需要在MySQL数据库的中设置一张表:ordertbl
然后在服务器端的Wireless项目下的com.moka.entity包中新建一个此表的对象类Order,就像登录部分的User一样:


/*** 用于封装OrderTbl表的实体类*/ public class Order {// 此订单编号private int id;// 下单时间private String orderTime;// 操作用户idprivate int userId;// 开桌台号private int tableId;// 此桌人数private int personNum;// 结算否private int isPay;// 备注private String remark;// getters & setters .. 省略
同样,在对应包中建立对于ordertbl表的数据访问对象OrderDao与OrderDaoImpl,他们封装了所有对ordertbl的数据操作:
public interface OrderDao {// 保存开桌信息public int saveOrder(Order order);// 保存菜表信息public void saveOrderDetail(OrderDetail orderDetail);// 更新桌号状态, 有人public void updateTableStatus(int tableId);// 更新桌号状态, 空位public void updateTableStatus2(int orderId); }


public class OrderDaoImpl implements OrderDao {@Overridepublic int saveOrder(Order order) {// jdbc连接数据库准备工作DBUtil util = new DBUtil(); Connection conn = util.openConnection();// 插入数据库操作用String saveOrderSql = "insert into ordertbl (orderTime, userId, tableId, personNum) values (?, ?, ?, ?)";PreparedStatement ps = null;// 读取最新订单号操作用Statement statement = null;ResultSet orderIdSet = null;try {ps = conn.prepareStatement(saveOrderSql);ps.setString(1, order.getOrderTime());ps.setInt(2, order.getUserId());ps.setInt(3, order.getTableId());ps.setInt(4, order.getPersonNum());ps.executeUpdate();// 返回此订单编号,因为id为自增主键,所以取其最大即为最新订单号String returnOrderIdSql = "select max(id) as id from ordertbl";statement = conn.createStatement();orderIdSet = statement.executeQuery(returnOrderIdSql);if (orderIdSet.next()) {// 获得订单号int id = orderIdSet.getInt(1);return id;}} catch (SQLException e) {e.printStackTrace();} finally {try {if (orderIdSet != null) {orderIdSet.close();orderIdSet = null;}if (statement != null) {statement.close();statement = null;}if (ps != null) {ps.close();ps = null;}if (conn != null) {conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}return 0;}@Overridepublic void updateTableStatus(int tableId) {// jdbc连接数据库准备工作DBUtil util = new DBUtil(); Connection conn = util.openConnection();// 更新此桌状态操作用String updateSql = "update tabletbl set flag = 1 where id = ?";PreparedStatement ps = null;try {// 此桌已订出, table表中flag置位ps = conn.prepareStatement(updateSql);ps.setInt(1, tableId);ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {try {if (ps != null) {ps.close();ps = null;}if (conn != null) {conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}}@Overridepublic void updateTableStatusEx(int orderId) {// 此处暂时不做操作 }}
然后写StartTableServlet处理请求与响应:


public class StartTableServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html");// 获取输出打印流PrintWriter pw = new PrintWriter(resp.getOutputStream());// 读取请求中的order数据String orderTime = req.getParameter("orderTime");String userId = req.getParameter("userId");String tableId = req.getParameter("tableId");String personNum = req.getParameter("personNum");// 将他们放入实例化的Order对象封装起来Order order = new Order();order.setOrderTime(orderTime);order.setUserId(Integer.parseInt(userId));order.setTableId(Integer.parseInt(tableId));order.setPersonNum(Integer.parseInt(personNum));// 定单数据存入MySQL端,更新对应桌号是否有人的状态,并获得返回的订单号传回客户端OrderDao orderDao = new OrderDaoImpl();int orderId = orderDao.saveOrder(order);orderDao.updateTableStatus(Integer.parseInt(tableId));pw.print(orderId);pw.flush();pw.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}
最后注册新的servlet:
<servlet><servlet-name>StartTableServlet</servlet-name><servlet-class>com.moka.servlet.StartTableServlet</servlet-class></servlet><servlet-mapping><servlet-name>StartTableServlet</servlet-name><url-pattern>/servlet/StartTableServlet</url-pattern></servlet-mapping>
至此服务器端搭建完毕