能力提升-飞机起降系统案例

能力提升-飞机起降系统案例

image.png
  1. 数据库设计
    1.1 根据要求,需要设计两个表(机场表和机场信息表)
    1.1.1 机场表


    airport表

    1.1.2机场信息表


    airplane表
  2. 搭建开发环境
    2.1 导jar包


    jar包

    2.2 全局配置文件

<?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>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <package name="cn.uaichn.pojo"/>
    </typeAliases>
    <environments default="default">
        <environment id="default">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/java505"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="cn.uaichn.mapper"/>
    </mappers>
</configuration>
  1. 实体类
public class Airport {
    private int id;
    private String portName;
    private String cityName;
    /**setter and getter**/
}
public class Airplane {
    private int id;
    private String airNo;
    private int time;
    private double price;
    private Airport takePort;
    private Airport landPort;
    /**setter and getter**/
}
  1. 工具类
public class MapperUtil {
    //factory实例化过程是一个非常耗费性能的过程
    //保证有且只有一个factory
    private static SqlSessionFactory factory;
    private static ThreadLocal<SqlSession> tl = new ThreadLocal<>();
    static{
        try {
            InputStream is = Resources.getResourceAsStream("mybatis.xml");
            factory = new SqlSessionFactoryBuilder().build(is); 
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    /**
     * 获取SqlSession的方法
     */
    public static SqlSession getSession(){
        SqlSession session = tl.get();
        if(session==null){
            tl.set(factory.openSession());
        }
        return tl.get();
    }
    /**
     * 关闭SqlSession的方法
     */
    public static void closeSession(){
        SqlSession session = tl.get();
        if(session!=null){
            session.close();
        }
        tl.set(null);
    }
}
  1. mapper
public interface AirportMapper {
    /**
     * 查询所有起飞机场
     * @return
     */
    public List<Airport> selTakePort();

    public List<Airport> selLandPort();
}
------
<?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="cn.uaichn.mapper.AirportMapper">
    <select id="selTakePort" resultType="airport">
        select * from airport where id in(select takeid from airplane);
    </select>
    <select id="selLandPort" resultType="airport">
        select * from airport where id in(select landid from airplane);
    </select>
</mapper>
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="cn.uaichn.mapper.AirplaneMapper">
    <resultMap type="airplane" id="selmap">
        <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="landportname" property="portName"/>
        <result column="landcityname" property="cityName"/>
        </association>
    </resultMap>
    <select id="selByTakeIdLandId" resultMap="selmap">
        select a.*,p.id takeid,p.portname takeportname,p.cityname takecityname,
        t.id landid,t.portname landportname,t.cityname landcityname
        from airplane a 
        left join airport p on a.takeid = p.id 
        left join airport t on a.landid = t.id
        <where>
            <if test="takeid>0">
                and takeid=#{takeid}
            </if>
            <if test="landid>0">
                and landid=#{landid}
            </if>
        </where>
    </select>   
</mapper>
  1. service层
public interface AirTakeService {
    public List<Airport> showTake();
}
-----
public class AirTakeServiceImpl implements AirTakeService{
    @Override
    public List<Airport> showTake() {
        SqlSession session = MapperUtil.getSession();
        AirportMapper airportMapper = session.getMapper(AirportMapper.class);
        return airportMapper.selTakePort();
    }
}
public interface AirLandService {
    public List<Airport> showLand();
}
-----
public class AirLandServiceImpl implements AirLandService{
    @Override
    public List<Airport> showLand() {
        SqlSession session = MapperUtil.getSession();
        AirportMapper airportMapper = session.getMapper(AirportMapper.class);
        return airportMapper.selLandPort();
    }
}
public interface AirplaneService {
    List<Airplane> showAirplane(int takeId,int landId);
}
-----
public class AirplaneServiceImpl implements AirplaneService{
    @Override
    public List<Airplane> showAirplane(int takeId, int landId) {
        
         SqlSession session = MapperUtil.getSession();
         AirplaneMapper airplaneMapper = session.getMapper(AirplaneMapper.class);
         return airplaneMapper.selByTakeIdLandId(takeId, landId);
    }   
}
  1. servlet层
@WebServlet("/showtake")
public class ShowTakeServlet extends HttpServlet{
    AirTakeService ats = new AirTakeServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Airport> showTake = ats.showTake();
        req.setAttribute("showtake", showTake);
        req.getRequestDispatcher("/showland").forward(req, resp);
        return;
    }
}
-----
@WebServlet("/showland")
public class ShowLandServlet extends HttpServlet {
    AirLandService als = new AirLandServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Airport> showLand = als.showLand();
        req.setAttribute("showland", showLand);
        req.getRequestDispatcher("/showAirplane").forward(req, resp);
        return;
    }
}
-----
@WebServlet("/showAirplane")
public class ShowAirplaneServlet extends HttpServlet{
    private AirplaneService as = new AirplaneServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        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&&!landIdStr.equals("")){
            landId = Integer.parseInt(landIdStr);
        }
        req.setAttribute("airplane", as.showAirplane(takeId, landId));
        req.getRequestDispatcher("/index.jsp").forward(req, resp);
        return;
    }
}
  1. filter
@WebFilter("/*")
public class OpenSessionInView implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub  
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        SqlSession session = MapperUtil.getSession();
        try{
            chain.doFilter(request, response);
            session.commit();
        }catch(Exception e){
            session.rollback();
            e.printStackTrace();
        }finally{
            MapperUtil.closeSession();
        }   
    }
    @Override
    public void destroy() {
        // TODO Auto-generated method stub  
    }
}
  1. 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 = "${showtake}" var="take">
    <option value="${take.id}">${take.portName}</option>
    </c:forEach>

</select>
&nbsp;&nbsp;&nbsp;&nbsp;
降落机场:
<select name = "landid">
    <option value="0">请选择</option>
    <c:forEach items = "${showland}" 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="${airplane}" 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>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • wyun_guest需要添加的地方 1: oauth_clients需要添加一条记录image.png INSER...
    EddieZhang阅读 667评论 0 0
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 806评论 0 0
  • 一. Java基础部分.................................................
    wy_sure阅读 3,805评论 0 11
  • ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用...
    SkTj阅读 3,971评论 0 2
  • 传统坐月子讲究卧床休息,避免下地,原因是产妇需要静养避免下地着凉。这种老观念在医院并没有得到支持,医生都建议妈妈们...
    喜乐妈读书阅读 932评论 0 0