MyBatis能力提升——航班机场练习

需求:

实体类:

package com.tao.pojo;
/**
 * 飞机类
 *
 */
public class AirPlane {
	private int id;		
	private String airNo;	//飞机编号
	private int time;		//航行时间
	private double price;	//航班价格
	private Airport takePort;	//起飞机场对象
	private Airport landPort;	//降落机场对象
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getAirNo() {
		return airNo;
	}
	public void setAirNo(String airNo) {
		this.airNo = airNo;
	}
	public int getTime() {
		return time;
	}
	public void setTime(int time) {
		this.time = time;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public Airport getTakePort() {
		return takePort;
	}
	public void setTakePort(Airport takePort) {
		this.takePort = takePort;
	}
	public Airport getLandPort() {
		return landPort;
	}
	public void setLandPort(Airport landPort) {
		this.landPort = landPort;
	}
}
package com.tao.pojo;
/**
 * 机场信息类
 *
 */
public class Airport {
	private int id;
	private String portName;	//机场名称
	private String cityName;	//机场城市名称
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getPortName() {
		return portName;
	}
	public void setPortName(String portName) {
		this.portName = portName;
	}
	public String getCityName() {
		return cityName;
	}
	public void setCityName(String cityName) {
		this.cityName = cityName;
	}
}

Mapper接口:

package com.tao.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;

import com.tao.pojo.Airport;

public interface AirportMapper {
	
	/*
	 * 起飞机场信息查询
	 */
	@Select("select * from airport where id in (select distinct takeid from airplane)")
	List<Airport> selTakePort();
	
	/*
	 * 降落机场信息查询
	 */
	@Select("select * from airport where id in (select distinct landid from airplane)")
	List<Airport> selLandPort();

}
package com.tao.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.tao.pojo.AirPlane;

public interface AirPlaneMapper {
	
	List<AirPlane> selByTakeidLandid(@Param("takeid")int takeid,@Param("landid")int landid);

}

映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tao.mapper.AirPlaneMapper">
	<resultMap type="AirPlane" id="airPlaneMap">
		<id column="id" property="id" />
		<result column="airno" property="airNo"/>
		<result column="time" property="time" />
		<result column="price" property="price" />
		<association property="takePort" javaType="Airport" >
			<id column="takeid" property="id"/>
			<result column="takeportname" property="portName"/>
			<result column="takecityname" property="cityName"/>
		</association>
		<association property="landPort" javaType="Airport" >
			<id column="landid" property="id"/>
			<result column="landcityname" property="cityName"/>
			<result column="landportname" property="portName"/>
		</association>
	</resultMap>

	<select id="selByTakeidLandid" resultMap="airPlaneMap">
		select a.*,b.id takeid,b.portname takeportname,b.cityname takecityname,c.id landid,c.cityname landcityname,c.portName landportname
	    from airplane a 
		left join airport b on a.takeid = b.id 
		left join airport c on a.landid = c.id
		<where>
			<if test="takeid>0">
				and takeid =#{takeid}
			</if>
			<if test="landid>0">
				and landid =#{landid}
			</if>
		</where>
	</select>
</mapper>

业务层:

package com.tao.service;

import java.util.List;

import com.tao.pojo.Airport;

public interface AirportService {
	
	/**
	 * 显示所有起飞机场
	 * @return
	 */
	List<Airport> showTakePort();
	/**
	 * 显示所有降落机场
	 * @return
	 */
	List<Airport> showLandPort();
}
package com.tao.service;

import java.util.List;

import com.tao.pojo.AirPlane;

public interface AirplaneService {
	/*
	 * 航班信息
	 */
	List<AirPlane> show(int takeid,int landid);
}

业务实现类:

package com.tao.service.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.tao.mapper.AirPlaneMapper;
import com.tao.pojo.AirPlane;
import com.tao.service.AirplaneService;
import com.tao.util.MyBatisUtil;

public class AirPlaneServiceImpl implements AirplaneService{

	@Override
	public List<AirPlane> show(int takeid, int landid) {
		SqlSession session = MyBatisUtil.getSqlSession();
		AirPlaneMapper airPlaneMapper = session.getMapper(AirPlaneMapper.class);
		List<AirPlane> list = airPlaneMapper.selByTakeidLandid(takeid, landid);
		return list;
	}

}
package com.tao.service.impl;

import java.util.List;

import com.tao.mapper.AirportMapper;
import com.tao.pojo.Airport;
import com.tao.service.AirportService;
import com.tao.util.MyBatisUtil;

public class AirportServiceImpl implements AirportService{

	@Override
	public List<Airport> showTakePort() {
		return MyBatisUtil.getSqlSession().getMapper(AirportMapper.class).selTakePort();
	}

	@Override
	public List<Airport> showLandPort() {
		return MyBatisUtil.getSqlSession().getMapper(AirportMapper.class).selLandPort();
	}

}

控制层:

package com.tao.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.tao.pojo.Airport;
import com.tao.service.AirportService;
import com.tao.service.impl.AirportServiceImpl;

@WebServlet("/showtake")
public class ShowTakeServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	private AirportService airportService = new AirportServiceImpl();
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		List<Airport> takePort = airportService.showTakePort();
		req.setAttribute("takePort", takePort);
		req.getRequestDispatcher("/showland").forward(req, resp);
		
	}
	
}
package com.tao.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.tao.pojo.Airport;
import com.tao.service.AirportService;
import com.tao.service.impl.AirportServiceImpl;
@WebServlet("/showland")
public class ShowLandService extends HttpServlet{

	private static final long serialVersionUID = 1L;

	private AirportService airportService = new AirportServiceImpl();
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		List<Airport> landPort = airportService.showLandPort();
		req.setAttribute("landPort", landPort);
		req.getRequestDispatcher("/showairplane").forward(req, resp);
		
	}
	
}
package com.tao.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.tao.service.AirplaneService;
import com.tao.service.impl.AirPlaneServiceImpl;

@WebServlet("/showairplane")
public class ShowAirplaneServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;
	
	AirplaneService airplaneService = new AirPlaneServiceImpl();
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=UTF-8");
		int takeid = 0;
		String takeIdStr = req.getParameter("takeid");
		if(takeIdStr!=null&&!takeIdStr.equals("")){
			takeid=Integer.parseInt(takeIdStr);
		}
		int landid = 0;
		String landIdStr = req.getParameter("landid");
		if(landIdStr!=null&&!"".equals(landIdStr)){
			landid = Integer.parseInt(landIdStr);
		}
		
		req.setAttribute("list", airplaneService.show(takeid, landid));
		req.getRequestDispatcher("/index.jsp").forward(req, resp);
	}

}

MyBatis简化工具类及过滤器配置:

package com.tao.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	
	private static SqlSessionFactory factory;
	private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<>();
	
	static{
		try{
			InputStream is = Resources.getResourceAsStream("mybatis.xml");
			factory = new SqlSessionFactoryBuilder().build(is);
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取SqlSession的方法
	 */
	public static SqlSession getSqlSession(){
		SqlSession session = threadLocal.get();
		if(session==null){
			threadLocal.set(factory.openSession());
		}
		return threadLocal.get();
	}
	
	/**
	 * 关闭Session的方法
	 */
	public static void closeSession(){
		SqlSession session = threadLocal.get();
		if(session!=null){
			session.close();
		}
		threadLocal.set(null);
	}
}
package com.tao.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

import org.apache.ibatis.session.SqlSession;

import com.tao.util.MyBatisUtil;
/**
 * 最开始是由Spring框架提出的.整合Hibernate框架是使用的是OpenSessionInView
 * @author zhangtao
 *
 */
@WebFilter("/*")
public class openSessionViewFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		SqlSession session = MyBatisUtil.getSqlSession();
		try {
			filterChain.doFilter(servletRequest, servletResponse);
			session.commit();
		} catch (Exception e) {
			session.rollback();
			e.printStackTrace();
		}finally {
			MyBatisUtil.closeSession();
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

MyBatis核心配置文件:

<?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>
	
	<!-- mybatis 开启log4j支持功能 -->
	<settings>
		<setting name="logImpl" value="LOG4J"/>
	</settings>
	
	<!-- 给某个包下所有类起别名,别名为类名, 不区分大小写 -->
	<typeAliases>
		<package name="com.tao.pojo"/>
	</typeAliases>
	
	<environments default="dev">
		<environment id="dev">
			<!-- JDBC 原生事务管理方式 -->
			<transactionManager type="JDBC"></transactionManager>
			
			<!-- 使用数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<package name="com.tao.mapper"/>
	</mappers>

</configuration>

前台:index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="showtake" method="post">
起飞机场:<select name="takeid">
			<option value="0">请选择</option>
			<c:forEach items="${takePort}" var="take">
				<option value="${take.id }">${take.portName }</option>
			</c:forEach>
	   </select>

降落机场:<select name="landid">
			<option value="0">请选择</option>
			<c:forEach items="${landPort }" var="land">
				<option value="${land.id }">${land.portName }</option>
			</c:forEach>
       </select>
<input type="submit" value="查询" />
</form>
<table border="1">
	<tr>
		<td>飞机编号</td>
		<td>起飞机场</td>
		<td>起飞城市</td>
		<td>降落机场</td>
		<td>降落城市</td>
		<td>航行时间</td>
		<td>票价(元)</td>
	</tr>
	
	<c:forEach items="${list }" var="plane">
		<tr>
		<td>${plane.airNo }</td>
		<td>${plane.takePort.portName }</td>
			<td>${plane.takePort.cityName }</td>
			<td>${plane.landPort.portName }</td>
			<td>${plane.landPort.cityName }</td>
			<td>
				<c:if test="${plane.time/60>0}">
					<fmt:formatNumber value="${plane.time/60 }" pattern="0"></fmt:formatNumber>小时
				</c:if>
				<c:if test="${ plane.time%60>0}">
					${ plane.time%60}分钟
				</c:if>
			</td>
			<td>${plane.price }</td>
	</tr>
	</c:forEach>
</table>

</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
飞机航班管理系统 项目背景和目标 飞机航班信息管理系统主要能够查询飞机航班情况,飞行线路,票价,折扣等等情况,并能够在数据库中更新维护飞机航班的信息,对飞机航班数据库进行管理,如航班的增加,删除和修改等。我们的目标就是为该系统提供后台连接数据库程序设计以及前台用户界面设计。 系统运行环境 Java运行在eclipse软件上,数据库用mysql数据库 使用redis进行菜单缓存,mongodb进行日志管理以及webService技术调用接口。 开发与设计的总体思想 飞机航班信息管理系统主要分为用户和系统管理员2类,因此也将该系 统分为2个相应的大的功能模块。 用户可以通过服务项目选择查询相关航班情况,进行订票,退订等服务项目。系统会将数据库中相应信息反馈给顾客。 系统管理员负责管系统信息的及时更新,可以根据航空公司航班的具体的情况更新数据库。 系统的管理模块: 1.用户管理 ²订单查询 ²用户列表 ²黑名单 2.客机及保养管理 ²保养管理 3.公司人员管理 ²员工管理 4.航班信息管理 ²航班管理 5.飞机托运货物管理 ²托运须知 ²托运管理 6.用户的购票信息管理 ²购票 ²个人订单 7.整个系统的财务统计等整理 ²highcharts报表 8.客户全部订单管理 ²订单管理 9.意见管理 ²顾客回访调查 10.角色权限管理 ²角色列表 11.日志管理 ²日志记录 12.我的网盘 ²图片管理 一 用户登陆注册管理 整个系统的用户和管理员登陆和注册界面以及用户的权限和角色管理都是由李长乐负责,其中包括订单查询列表 l用户查询:查看用户信息 (包括用户里程,用户飞行次数,用户总消费,航班信息) l列表功能:批量加入黑名单,批量改变用户级别 l黑名单:批量恢复用户 l注册:接收手机验证码。账号已存在无法注册。 二 个人订单信息管理 管理系统的个人订单信息管理由郭宇成负责,其中包括查询航班信息。以及放松一下模块。三个小游戏。 l退票信息:退票直接进行退票。 改签信息: l回显购票信息,修改购票信息,当前时间到起飞时间不够2小时不能改签。满足改签条件后,管理员需同意后,方可进行改签的后续工作。 三 全部订单信息管理 管理系统的全部订单信息及公告管理由黄富强负责,其中包括查询所有用户的订单信息,和个人订单信息关联,如果用户申请改签,管理员同意后方可改签。 四 人员管理 管理系统的人员管理由张晓甜负责,其中包括航空公司的所有人的查询,新增,修改,删除 查询:编号,职位,人员名称,状态(0未飞,1在飞,2,休假,3请假) 新增:人员名称等基本信息 修改:人员名称等基本信息 删除,人员名称等基本信息 点击详情信息查询每个员工的信息:基本信息,工作经历。其中人员状态为在飞,休假,请假时都不能加入航班信息。 五 客机信息及保养管理 管理系统的客机信息及保养管理由王壮负责,其中包括客机的基本信息增删改查,根据航班信息模块中查询每架飞机的飞行次数,当到达3次后,飞机自动进入保养状态。这时,新增航班信息将查不到保养中的客机。保养完成后,飞机飞行次数自动重置成0次。此模块还有客机图片展示。 六 飞机托运货物管理 管理系统的飞机托运货物管理由张博管理,其中包括行李托运表的增删改查,新增托运货物时,身份证号和乘客的身份证号进行统一。没有身份证号无法进行托运。当已付款的托运货物进行修改时,会根据修改的托运货物的重量和物品类型对乘客进行退钱和补交。未付款的货物信息状态用红色字体显示 也是为了更好区分。 七 航班信息管理 管理系统的航班信息管理由侯俊杰负责,其中包括 l已发布航班信息的查询 l新增航班信息.添加航班班次必须是未工作状态才可新增,乘务员和机长也必须是未工作状态. l判断是否此次航班信息是否小于系统当前时间,若小于,航班失效本条航班信息置灰,也无法进行售票。 l航班开始售票后,用户才可以购买相应的航班。 l开始售票和停止售票的按钮用绿色和红色来清楚的划分。 八 统计管理 整个系统的统计管理由赵航天负责,使用了highchars技术,其中包括收入,支出和利润情况,只展示了三个字段是可以将将公司的收支情况生动形象的展示出来,使管理员可以一目了然。 九 意见管理 整个系统的意见管理由王壮负责,查询了用户的飞行次数和会员级别,从而可以更准确地发送邮件信息。发送邮件信息使用了javaMail技术。 十 角色权限管理 整个系统的角色权限管理由李长乐负责,查询了角色名称和每种角色的人数,可以赋权限。 十一 日志管理 整个系统的日志管理由张晓甜负责,利用了mongodb技术,结合aop切面,将事务控制在Service层,查询了每个方法的方法名和参数。还有时间的条件查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值