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

版权声明:未经本人同意,不得私自转载 https://blog.csdn.net/weixin_41866744/article/details/87799209

需求:

实体类:

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>

猜你喜欢

转载自blog.csdn.net/weixin_41866744/article/details/87799209