【从零开始JavaEE课设】《影院系统》(二)编写持久层Mapper接口

前言

这是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

你可能感兴趣的:(JavaWeb)