完整动物商店小项目实现
整体项目要求:
- 实现前后端数据的交互
- 实现用户的登录和注册
- 能够实现宠物库的内容的查询和展示
- 能够完成宠物的添加、修改、删除、排序操作
涉及知识
掌握Maven项目的创建配置、mybatis的配置使用、前端基础知识、servlet请求等
整个项目构成
第一步 创建Maven项目
选择javaweb项目
第二步 导入依赖项
在项目 pom.xml中进行配置
第三步 创建相对应的数据创建对应的表并创建对应的实体类
注意:驼峰是命名法与数据库的属性名的命名规则
ej:实体属性 uName ==> 数据库属性名 u_name
创建实体类
第四步 编辑mapper接口 配置mybatis实现数据库的增删改查
可以参考上篇博文
编辑mybatis-configs.xml 配置文件 添加到resources目录中
-
编辑mybatis-configs.xml 配置文件 添加到resources目录中
目的:连接数据源(对应的数据库)、配置命名规则、配置映射文件的位置
-
创建对应的接口 mapper 文件 定义操作方法
-
创建对应接口的mapper.xml配置文件 实现具体的接口方法。(见博客)
第五步 创建数据库工具类 dao类
调用mapper中的方法,进一步连接前端实现数据与数据库的互动
调用接口方法 步骤:
创建会话工厂、创建会话、获得映射接口对象、调用接口方法 (如下)
//实现用户的登录查找
//创建会话工厂创建器
static SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
public static boolean userLink(String user, String password){
//创建工厂
try {
SqlSessionFactory factory = builder.build(Resources.getResourceAsStream("mybatis-configs.xml"));
//创建会话
SqlSession sqlSession = factory.openSession();
//获得映射接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用接口
List<User> users= mapper.selectUserExist(user,password);
//提交语句
sqlSession.commit();
return !users.isEmpty();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
第六步 创建servlet类 实现前后端数据的交互
例用户登录的实现 具体步骤
- 创建servlet类 继承 父类 HttpServlet
- 实现父类的 doGet doPost方法
- HttpServletRequest , HttpServletResponse 请求响应页面内容
- 读取内容,传入到需要的参数
- 调用dao类方法 实现具体功能
/**
* 用户登录 交互类
*/
// 注册对应的页面
@WebServlet("/login.do")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//设置相应数据的内
resp.setContentType("text/html;charset=utf-8");
// 获取用户请求的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
req.setAttribute("username","3030");
// 调用接口方法 实现用户的查询 返回一个boolean型参数
if( UserDao.userLink(username,password)){
// 跳转主界面
req.getRequestDispatcher("success.do").forward(req,resp);
}else{
// 跳转失败界面
req.getRequestDispatcher("faile.jsp").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
前端方面注意事项
servlet页面注册 一定一定 要对应jsp页面(见下图)
否则基本报错 404 某个页面没有访问…之类的问题(本次实践中出现最多的问题)
在前端利用table实现数据库的信息的展示方法
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
要是用内嵌标签 需要提前声明
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
jsp的page指令的isELIgnored属性(是否忽略EL表达式)没有设置导致的,在没有设置的情况下默认为true,也就是忽略El表达式,EL表达式的内容将作为字符串.
<table align="center" border="1" style="margin: 0px auto;width: 500px; height: auto">
<tr>
<td>姓名</td>
<td>性别</td>
<td>类型</td>
<td>年龄</td>
<td>价格</td>
</tr>
<c:forEach var = "pet" items="${pets}">
<tr>
<td>${pet.petName}</td>
<td>${pet.petSex}</td>
<td>${pet.petType}</td>
<td>${pet.petAge}</td>
<td>${pet.petPrice}</td>
</tr>
</c:forEach>
</table>
结果展示:
登录界面 实现 进入到宠物商店主页 可以进行具体的操作
查询全部宠物 并 在前段展示 部分源码展示:
Servlet类
@WebServlet("/success.do")
public class PetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 将集合保存到request中
List<Pet> pets = PetDao.showAll();
req.setAttribute("pets",pets);
req.getRequestDispatcher("success.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
前端实现
<form action="/success.do" method="post">
<table align="center" border="1" style="margin: 0px auto;width: 500px; height: auto">
<tr>
<td>姓名</td>
<td>性别</td>
<td>类型</td>
<td>年龄</td>
<td>价格</td>
</tr>
<c:forEach var = "pet" items="${pets}">
<tr>
<td>${pet.petName}</td>
<td>${pet.petSex}</td>
<td>${pet.petType}</td>
<td>${pet.petAge}</td>
<td>${pet.petPrice}</td>
</tr>
</c:forEach>
</table>
</form>
数据库工具类(包含 接口及配置)
接口
List<Pet> showAllPets();
接口配置
<!--遍历-->
<select id="showAllPets" resultType="com.strive.entity.Pet">
select * from school.tb_pets
</select>
工具类
/**
* 展示全部宠物
*/
public static List<Pet> showAll(){
List<Pet> list = new ArrayList<>();
try {
//获得映射接口对象
PetMapper mapper = returnSqlSession().getMapper(PetMapper.class);
//调用接口
list = mapper.showAllPets();;
//提交语句
returnSqlSession().commit();
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}