maven整合servlet的过程以及使用mybatis框架进行CRUD操作
需求效果:
1、搭建maven整合servlet(10分) 2、mybatis各种配置(创建数据库)(10分) 3、完成各层编码与联系(30分) 4、在DAO层进行编码测试(0分) 5、在servlet层创建查询GetInfo、添加AddInfo、修改SelectById,UpdateById,删除DeleteById(30分) 6、完成视图层编码,GetInfo.jsp,AddInfo.jsp(10分) 7、(编码规范与异常处理)(10分) 8、提交项目(提交正确计分,否则0分)
环境:
开发工具:【IntelliJ IDEA 2020.1.3 x64】 mysql版本:【5.6.x】 mysql工具:【Navicat Premium 15】
完成步骤以及编码:
添加各层的包
添加【tomcat】
Tomcat添加项目成功
添加Tomcat包
创建【com.item.servlet】下【GetInfoServlet.java】测试servlet接口
刷新【maven】才会出现【Create New Servlet】
代码语言:javascript复制package com.item.servlet;
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 java.io.IOException;
@WebServlet("/GetInfo")
public class GetInfoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("访问测试");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
访问成功
添加mybatis对应maven包
代码语言:javascript复制<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
在src/main/的resources内创建【mybatis-config.xml】文件
配置头部:
代码语言:javascript复制<?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">
添加图下配置编码:
代码语言:javascript复制<?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="com.item.model"/>
</typeAliases>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mytest?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/item/mapper/TbTourinfoMapper.xml"></mapper>
</mappers>
</configuration>
根据【com/item/mapper/TbTourinfoMapper.xml】在【resources】下创建包与配置文件
编码内容如下,包含【查询】【筛选查询】【添加】【删除】【修改】
代码语言:javascript复制<?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.item.mapper.TbTourinfoMapper">
<!-- 查询所有 -->
<select id="GetInfo" resultType="TbTourinfo">
select * from tb_tourinfo;
</select>
<!-- 各种查询-->
<select id="SelectByNameSexType" resultType="TbTourinfo">
select * from tb_tourinfo
<if test="name!=null or sex!=null or type!=null">
where 1=1
</if>
<if test="name!=null">
and name like "%${name}%"
</if>
<if test="sex!=null">
and sex="${sex}"
</if>
<if test="type!=null">
and type="${type}"
</if>
</select>
<insert id="AddInfo">
insert into tb_tourinfo values
(
0,
"${name}",
"${sex}",
"${id_no}",
#{age},
#{type},
NOW(),
#{visit_state},
now()
);
</insert>
<!-- 删除语句 -->
<delete id="DeleteById" parameterType="java.lang.Integer">
delete from tb_tourinfo where id=#{id}
</delete>
<!-- 修改状态在语句 -->
<update id="UpdateById">
update tb_tourinfo set visit_state=#{visit_state} where id=#{id}
</update>
</mapper>
在【resources】下创建【log4j.properties】文件
代码语言:javascript复制#全局配置
log4j.rootLogger=debug,stdout,ERROR
#MyBatis日志配直
log4j.logger.com.item.mapper=TRACE
#控制台输出配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
创建【com.item.model】内【TbTourinfo】文件
需要添加数据表对应的【属性】,并添加【Getter】与【Setter】以及【toString】方法。
代码语言:javascript复制package com.item.model;
import java.util.Date;
public class TbTourinfo {
private int id;
private String name;
private String sex;
private String id_no;
private int age;
private String type;
private Date visit_date;
private int visit_state;
private Date register_time;
@Override
public String toString() {
return "TbTourinfo{"
"id=" id
", name='" name '''
", sex='" sex '''
", id_no='" id_no '''
", age=" age
", type='" type '''
", visit_date=" visit_date
", visit_state=" visit_state
", register_time=" register_time
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getId_no() {
return id_no;
}
public void setId_no(String id_no) {
this.id_no = id_no;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Date getVisit_date() {
return visit_date;
}
public void setVisit_date(Date visit_date) {
this.visit_date = visit_date;
}
public int getVisit_state() {
return visit_state;
}
public void setVisit_state(int visit_state) {
this.visit_state = visit_state;
}
public Date getRegister_time() {
return register_time;
}
public void setRegister_time(Date register_time) {
this.register_time = register_time;
}
}
在【com.item.mapper】下创建【TbTourinfoMapper】
代码语言:javascript复制package com.item.mapper;
import com.item.model.TbTourinfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TbTourinfoMapper {
List<TbTourinfo> GetInfo();
/**
* 根据参数进行查询
* @param name (姓名)
* @param sex (性别)
* @param type (会员类型)
* @return
*/
List<TbTourinfo> SelectByNameSexType(
@Param("name") String name,
@Param("sex") String sex,
@Param("type") String type
);
int AddInfo(
@Param("name") String name,
@Param("sex") String sex,
@Param("id_no") String id_no,
@Param("age") int age,
@Param("type") int type,
@Param("visit_state") int visit_state
);
int DeleteById(@Param("id") int id);
int UpdateById(@Param("visit_state") int visit_state,
@Param("id") int id);
}
在【com.item.common】下创建JDBC用于获取数据库连接池链接
代码语言:javascript复制package com.item.common;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class JDBC {
public static SqlSessionFactory GetConn(){
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
return factory;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
System.out.println(GetConn());
}
}
在【com.item.dao】下创建【TbTourinfoDAO.java】文件
代码语言:javascript复制package com.item.dao;
import com.item.common.JDBC;
import com.item.mapper.TbTourinfoMapper;
import com.item.model.TbTourinfo;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class TbTourinfoDAO {
/**
* 查询所有
* @return
*/
public static List<TbTourinfo> GetInfo(){
SqlSessionFactory factory = JDBC.GetConn();
SqlSession session = factory.openSession();
TbTourinfoMapper db = session.getMapper(TbTourinfoMapper.class);
List<TbTourinfo> list = db.GetInfo();
session.close();
return list;
}
/**
* 综合信息查询
* @param name
* @param sex
* @param type
* @return
*/
public static List<TbTourinfo> SelectByNameSexType(String name,String sex,String type){
SqlSessionFactory factory = JDBC.GetConn();
SqlSession session = factory.openSession();
TbTourinfoMapper db = session.getMapper(TbTourinfoMapper.class);
List<TbTourinfo> list = db.SelectByNameSexType(name,sex,type);
session.close();
return list;
}
/**
* 添加
* @param name
* @param sex
* @param id_no
* @param age
* @param type
* @param visit_state
* @return
*/
public static boolean AddInfo(String name,String sex,String id_no,int age,int type,int visit_state){
SqlSessionFactory factory = JDBC.GetConn();
SqlSession session = factory.openSession();
TbTourinfoMapper db = session.getMapper(TbTourinfoMapper.class);
int rows = db.AddInfo(name, sex, id_no, age, type, visit_state);
session.commit();
session.close();
return rows>0;
}
/**
* 删除
* @param id
* @return
*/
public static boolean DeleteById(int id){
SqlSessionFactory factory = JDBC.GetConn();
SqlSession session = factory.openSession();
TbTourinfoMapper db = session.getMapper(TbTourinfoMapper.class);
int rows = db.DeleteById(id);
session.commit();
session.close();
return rows>0;
}
/**
* 修改
* @param visit_state
* @param id
* @return
*/
public static boolean UpdateById(int visit_state,int id){
SqlSessionFactory factory = JDBC.GetConn();
SqlSession session = factory.openSession();
TbTourinfoMapper db = session.getMapper(TbTourinfoMapper.class);
int rows = db.UpdateById(visit_state,id);
session.commit();
session.close();
return rows>0;
}
public static void main(String[] args) {
int oldState=1;
System.out.println(UpdateById(oldState==0?1:0,7));
}
}
在【com.item.servlet】下以此创建
【GetInfoServlet】
代码语言:javascript复制package com.item.servlet;
import com.item.dao.TbTourinfoDAO;
import com.item.model.TbTourinfo;
import sun.misc.CharacterEncoder;
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 java.io.IOException;
import java.util.List;
/**
* 本类为GetInfo查询所有的类
*/
@WebServlet("/GetInfo")
public class GetInfoServlet extends HttpServlet {
/**
* 这是DOPOST访问接口
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<TbTourinfo> list = TbTourinfoDAO.GetInfo();
request.setAttribute("lists",list);
request.getRequestDispatcher("GetInfo.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
【SelectByNameSexTypeServlet】
代码语言:javascript复制package com.item.servlet;
import com.item.dao.TbTourinfoDAO;
import com.item.model.TbTourinfo;
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 java.io.IOException;
import java.util.List;
@WebServlet("/SelectByNameSexType")
public class SelectByNameSexTypeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String type = request.getParameter("type");
List<TbTourinfo> list = TbTourinfoDAO.SelectByNameSexType(name==""?null:name, sex==""?null:sex, type==""?null:type);
request.setAttribute("lists",list);
request.getRequestDispatcher("GetInfo.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
【AddInfoServlet】
代码语言:javascript复制package com.item.servlet;
import com.item.dao.TbTourinfoDAO;
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 java.io.IOException;
@WebServlet("/AddInfo")
public class AddInfoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String id_no = request.getParameter("id_no");
String age = request.getParameter("age");
String type = request.getParameter("type");
TbTourinfoDAO.AddInfo(name,sex,id_no,Integer.parseInt(age),Integer.parseInt(type),0);
response.sendRedirect("GetInfo");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
【DeleteByIdServlet】
代码语言:javascript复制package com.item.servlet;
import com.item.dao.TbTourinfoDAO;
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 java.io.IOException;
@WebServlet("/DeleteById")
public class DeleteByIdServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
TbTourinfoDAO.DeleteById(Integer.parseInt(id));
response.sendRedirect("GetInfo");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
【UpdateByIdServlet】
代码语言:javascript复制package com.item.servlet;
import com.item.dao.TbTourinfoDAO;
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 java.io.IOException;
@WebServlet("/UpdateById")
public class UpdateByIdServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String visit_state = request.getParameter("visit_state");
String id = request.getParameter("id");
TbTourinfoDAO.UpdateById(Integer.parseInt(visit_state.equals("0")?"1":"0"),Integer.parseInt(id));
response.sendRedirect("GetInfo");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
在【webapp】下创建
【GetInfo.jsp】
代码语言:javascript复制<%@ page import="java.util.List" %>
<%@ page import="com.item.model.TbTourinfo" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2022/5/18 0018
Time: 22:58
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<h1 align="center">景区预约登记管理系统</h1>
<hr/>
<% List<TbTourinfo> list = (List<TbTourinfo>) request.getAttribute("lists");%>
<form action="/SelectByNameSexType">
游客姓名:<input type="text" name="name" placeholder="请输入搜索姓名"/>
游客性别:<input type="text" name="sex" placeholder="请输入游客性别"/>
游客类别:<select name="type">
<option value="" selected>所有</option>
<option value="0">非会员</option>
<option value="1">普通会员</option>
<option value="2">VIP会员</option>
<option value="3">钻石会员</option>
<option value="4">年卡会员</option>
</select>
<input type="submit" value="查询" class="btn btn-primary"/>
<a href="/AddInfo.jsp" class="btn btn-primary">添加</a>
</form>
<table class="table table-bordered table-hover">
<tr class="info">
<th>编号</th>
<th>名称</th>
<th>性别</th>
<th>身份证</th>
<th>年龄</th>
<th>类型</th>
<th>创建时间</th>
<th>是否使用</th>
<th>登录时间</th>
<th>操作</th>
</tr>
<%
for (TbTourinfo t : list) {
%>
<tr>
<td><%=t.getId()%>
</td>
<td><%=t.getName()%>
</td>
<td><%=t.getSex()%>
</td>
<td><%=t.getId_no()%>
</td>
<td><%=t.getAge()%>
</td>
<td><%=t.getType()%>
</td>
<td><%=t.getVisit_date()%>
</td>
<td><%=t.getVisit_state()==0?"未使用":"已使用"%>
</td>
<td><%=t.getRegister_time()%>
</td>
<td>
<a href="/UpdateById?visit_state=<%=t.getVisit_state()%>&id=<%=t.getId()%>" class="btn btn-primary">修改</a>
<a href="/DeleteById?id=<%=t.getId()%>" onclick="return confirm('是否删除此行?')" class="btn btn-primary">删除</a>
</td>
</tr>
<%
}
%>
</table>
</body>
</html>
【AddInfo.jsp】
代码语言:javascript复制<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2022/5/18 0018
Time: 22:58
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<form action="/AddInfo" method="post" style="width:50%;position: relative;left: 30%">
<p>
<input type="text" name="name" class="form-control" placeholder="请输入姓名"/>
</p>
<p>
<input type="text" name="sex" class="form-control" placeholder="请输入性别"/>
</p>
<p>
<input type="text" name="id_no" class="form-control" placeholder="请输入身份证"/>
</p>
<p>
<input type="text" name="age" class="form-control" placeholder="请输入年龄"/>
</p>
<p>
<input type="text" name="type" class="form-control" placeholder="请输入类型"/>
</p>
<p>
<input type="submit" value="提交" class="btn btn-success btn-block"/>
</p>
</form>
</body>
</html>