一、数据表
数据包括订单,产品,游客,会员。
1.1数据说明和数据关系:
产品表说明:
订单表说明:
会员表说明
旅客表说明
数据表的ER图
表与表之间的业务关系
旅客表(traverller)、订单表(orders)、会员表(member)、产品表(product)的id都是uuid()下随机生成的
- 订单表(orders)->产品表(product)一对一的关系
- 订单表(orders)->会员表(member) 一对一的关系
- 订单表(orders)->旅客表(traverller)多对多的关系(在Mybatis时中和一对多的处理很像,只不过多对多需要一张中间表)
二、实体类建立
Product实体类:
package domain;
import org.springframework.format.annotation.DateTimeFormat;
import util.DateUtils;
import java.io.Serializable;
import java.util.Date;
public class Product implements Serializable {
private String id; // 主键
private String productNum; // 编号 唯一
private String productName; // 名称
private String cityName; // 出发城市
//这个注解的目的是用spring来帮助处理这个属性从表单提交时的数据转换
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
private Date departureTime; // 出发时间
private String departureTimeStr;//出发时间格式化数据
private double productPrice; // 产品价格
private String productDesc; // 产品描述
private Integer productStatus; // 状态 0 关闭 1 开启
private String productStatusStr;//状态格式化
//省略getter 和 setter
}
Member实体类:
package domain;
import java.io.Serializable;
public class Member implements Serializable {
private String id;
private String name;
private String nickname;
private String phoneNum;
private String email;
//省略getter 和 setter
}
Traveller实体类:
package domain;
import java.io.Serializable;
public class Traveller implements Serializable {
private String id;
private String name;
private String sex;
private String phoneNum;
private Integer credentialsType;
private String credentialsTypeStr;
private String credentialsNum;
private Integer travellerType;
private String travellerTypeStr;
//省略getter 和 setter
}
Orders实体类:
package domain;
import org.springframework.format.annotation.DateTimeFormat;
import util.DateUtils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class Orders implements Serializable {
private String id;
private String orderNum;
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
private Date orderTime;
private String orderTimeStr; //订单时间格式化
private int orderStatus;
private String orderStatusStr; //订单状态格式化
private int peopleCount;
private Product product;
private List travellers;
private Member member;
private Integer payType;
private String payTypeStr; //支付状态格式化
private String orderDesc;
//省略getter 和 setter
}
三、DAO层建立
使用Mybatis的动态代理,因此不需要自己实现DAO,因此要对DAO进行配置
IMemberDao接口:
package dao;
import domain.Member;
public interface IMemberDao {
Member findMemberById(String id);
}
IProductDao接口:
package dao;
import domain.Product;
import java.util.List;
public interface IProductDao {
//查询所有商品信息
List findAll() throws Exception;
void insert(Product product) throws Exception;
Product findById(String id);
}
ITravellerDao接口:
package dao;
import domain.Traveller;
import java.util.List;
public interface ITraveller {
/**
* 根据订单查询旅客信息
* @param id
* @return
*/
List findTravellerByOrderId(String id);
}
IOrderDao接口:
package dao;
import domain.Orders;
import java.util.List;
public interface IOrdersDao {
/**
* 嵌套查询全部信息
* 包括旅客信息,会员信息,产品信息
* @return
* @throws Exception
*/
List findAll() throws Exception;
/**
* 嵌套结果查询全部
* 包括旅客信息,会员信息,产品信息
* @return
* @throws Exception
*/
List findAll1() throws Exception;
/**
* 只查询订单
* 不包括旅客信息,会员信息,产品信息
* @return
* @throws Exception
*/
List getAll() throws Exception;
/**
* 根据ID查询订单
* 包括旅客信息,会员信息,产品信息
* @param id
* @return
* @throws Exception
*/
Orders findById(String id) throws Exception;
}
基于XML配置Mybatis
1、配置全局配置文件:
这里没有配置数据源信息的原因是已经在spring中配置了
2、将mybatis工厂对象交给Spring IOC容器管理
3、配置每个DAO接口的Mapper文件
3.1MemberMapper
3.2ProductMapper
select replace(uuid(),'-','')
insert into product(id,productNum,productName,departureTime,cityName,productPrice,productDesc,productStatus)
values (#{id},#{productNum},#{productName},#{departureTime},#{cityName},#{productPrice},#{productDesc},#{productStatus})
3.3TravellerMapper
3.4OrderMapper