前言
这是JavaEE课设连载的第二篇,上一篇在这里:【从零开始JavaEE课设】《影院系统》(一) 需求分析 数据库设计 后端model类
上一篇分析了项目所需的数据库表和基础的model类。这一篇,就来创建久层的Mapper接口,预先设定一些可能会用到的crud。完成后,我们就用mybatis完成sql的编写和ORM映射。
有兴趣观看下去的朋友,墙裂推荐去上一篇博客了解一下项目需求。实在不行,收藏一下先?
根据上一节设计六个的model类:
- 影厅
- 电影
- 放映计划
- 记录
- 员工
- vip
以及项目需求,共设计了六个Mapper接口。内置一些CRUD方法的原型。等待后面使用mybatis代理。
这些接口中的方法不是不变的,开发的过程中,如果遇到了新的需求需要用到新的sql,那么还是得回来修修补补 (甚至回来把某个接口给它扬了也说不定)
值得注意的问题
传参问题
- 单个参数传递直接写就好,在配置mapper文件时需指明参数类型,使用
#{value}
- 传递对象也是直接写就好,在配置Mapper文件时需要指明对象的类型,取值使用
#{属性名}
- 多个参数传递可使用
@Param
注解进行映射,取值时使用#{映射名}
- 多个参数传递还可以传递一个
map
对象,这个操作有些费劲,博主就不用了嗷。 - 多个参数传递也可以不适用注解或者
map
,但是在mapper文件中只能使用#{param1},#{param2}...
等访问 - 传递集合时可以使用@Param注解映射,也可以直接传递,主要问题在于mapper文件的编写上,下一节再做讨论。
影厅
- 影厅提供基础的增删改方法。
- 查询方法提供根据名称查询和根据房间类型查询,二者都是模糊查询
package com.none.mapper;
import com.none.model.Room;
import java.util.List;
public interface RoomMapper {
/*新增一个房间*/
public void insertRoom(Room room);
/*更新一个房间*/
public void updateRoom(Room room);
/*删除一个房间*/
public void deleteById(int id);
/*获取所有房间*/
public List<Room> selectAll();
/*根据名称获取房间*/
public List<Room> selectByName(String name);
/*根据房间类型获取房间*/
public List<Room> selectByType(String type);
}
电影
- 提供基础的增删改方法
- 查询操作可能会有些多,考虑到前端可能会使用条件筛选
- 查询方法可根据国家查询,根据名称查询,二者都是模糊查询
- 查询正在上映的电影,用于排片
- 查询某日有放映计划的电影,用于基于用户购票提示
- 查询一段时间内的票房topk,用于后台统计和前台显示
package com.none.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.none.model.Film;
public interface FilmMapper {
/*根据名称选择电影*/
public List<Film> selectByName(String name);
/*获取上映的电影(获取所有可放映的电影)*/
public List<Film> selectOnLine(String timeNow);
/*获取某国家的电影*/
public List<Film> selectByCountry(String country);
/*获取某日有放映计划的电影,超过当日时间的不要*/
public List<Film> selectFilmPlaned(@Param("date")String date,@Param("time")String time);
/*统计时间段内电影票房排名(前k名)*/
public List<Film> selectTopK(@Param("begin") String begin,@Param("end") String end,int k);
/*插入一个新的电影*/
public void insertFilm(Film film);
/*根据id删除一个电影*/
public void deleteById(int id);
/*修改一个电影*/
public void updateFilm(Film film);
}
放映计划
- 提供基础的增删改方法
- 查询即将放映的电影场次,用于首页提示用户
- 查询某日某电影剩余场次的放映计划,用于用户购票选择电影后显示
package com.none.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.none.model.Film;
import com.none.model.ScreeningPlan;
public interface ScreeningPlanMapper {
/*添加一个放映计划*/
public void insertPlan(ScreeningPlan plan);
/*更新一个放映计划*/
public void updatePlan(ScreeningPlan plan);
/*删除一个放映计划*/
public void deleteById(int id);
/*查询即将放映的电影(time时间内)*/
public List<ScreeningPlan> selectNearby(@Param("nowTime") String nowTime,@Param("endTime") String endTime,@Param("nowDate") String nowDate,@Param("endDate") String endDate);
/*查询某电影在某日剩余的放映计划*/
public List<ScreeningPlan> selectPlans(@Param("film")Film film,@Param("date")String date,@Param("time")String time);
}
记录
购票记录承载着统计等若干功能的实现,因此它的方法可能会多一些
- 提供基础的增删改方法
- 查询所有记录,用于统计显示
- 根据用户查询所有记录,用于统计显示
- 查询一段时间的记录,用于统计显示
- 查询影片记录,用于统计显示
- 查询影厅记录,用于统计显示
- 查询影厅影片记录,用于统计显示
package com.none.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.none.model.Film;
import com.none.model.Record;
import com.none.model.Room;
public interface RecordMapper {
/*新增一条记录*/
public void insertRecord(Record record);
/*根据ID删除一条记录*/
public void deleteById(int id);
/*更新一条记录(很可能不会用上)*/
public void updateRecord(Record record);
/*查询所有记录*/
public List<Record> selectAll();
/*根据用户查询所有数据*/
public List<Record> selectByphone(String phone);
/*查询一段时间内的记录*/
public List<Record> selectByTime(@Param("begin") String begin,@Param("end") String end);
/*查询影片记录*/
public List<Record> selectByFilms(@Param("films") List<Film> films);
/*查询某影厅的记录*/
public List<Record> selectByRooms(@Param("rooms") List<Room> rooms);
/*根据影厅影片查询*/
public List<Record> selectByRoomsAndFilms(@Param("rooms") List<Room> rooms,@Param("films")List<Film> films);
}
员工
员工类设计偷个懒,仅用于登录校验
- 查询某身份证号码对应的员工
package com.none.mapper;
import com.none.model.Staff;
public interface StaffMapper {
/*查询一个员工,用于登录校验*/
public Staff selectByIdCard(String idCard);
}
vip
vip主要业务需求是办理、登录、修改、注销
- 提供基础的增删改方法
- 根据身份证,电话号,会员卡其中一个获取vip,用于校验用户
package com.none.mapper;
import com.none.model.Vip;
public interface VipMapper {
/*通过身份证号、电话号码、会员卡号获得Vip*/
public void selectVip(String code);
/*新加一个Vip*/
public void insertVip(Vip vip);
/*更新一个Vip*/
public void updateVip(Vip vip);
/*删除一个Vip*/
public void deleteById(int id);
}
海报类
海报类主要聚合在电影类中,但是由于需要对海报进行简单的添加删除操作,所以还是映射一个海报类
- 提供基础的增删方法
package com.none.mapper;
import com.none.model.FilmPost;
public interface FilmPostMapper {
/*插入一个海报*/
public void insertPost(FilmPost post);
/*根据Id删除一个海报*/
public void deleteById(int id);
}
OK,基本的mapper配置完辽,后面就该搭建mybatis框架,编写SQL了。
续集火速赶制中~~
20.6.24更新:新增了海报类的mapper