web+EL+mybatis 实现简单三层架构思想
Posted 追风林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web+EL+mybatis 实现简单三层架构思想相关的知识,希望对你有一定的参考价值。
1.查询所有数据
- 获取前端的请求参数 ,去数据库 查.查了返回查询结果.
- 将数据放在 request 的请求域中 ,然后将数据请求转发 到 页面中去.
- 页面 遍历数据,展示出来
1.1 dao 查询数据库
/**
* 查询所有品牌信息
* @return
*/
@Select("select * from tb_brand")
List<Brand> selectAll();
1.2 service 处理查询结果
/**
* 查询所有品牌信息
* @return
*/
public List<Brand> selectAll()
SqlSession sqlSession = factory.openSession();
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
List<Brand> list = brandMapper.selectAll();
return list;
1.3controller 做出响应
private BrandService brandService=new BrandService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
List<Brand> list = brandService.selectAll();
request.setAttribute("brands",list);
request.getRequestDispatcher("/brand.jsp").forward(request,response);
1.4 前端页面展示数据
<c:forEach items="$brands" var="brand" varStatus="vs">
<tr align="center">
<td>$vs.count</td>
<td>$brand.brandName</td>
<td>$brand.companyName</td>
<td>$brand.ordered</td>
<td>$brand.description</td>
<td>$brand.status==1?"启用":"禁用"</td>
<td><a href="/day10-brand-demo/selectByIdServlet?id=$brand.id">修改</a> <a href="/day10-brand-demo/DeleteServlet?id=$brand.id">删除</a></td>
</tr>
</c:forEach>
2添加数据
- 前端页面 点击 增加 按钮时 ,页面跳转到添加页面。。进行一次跳转
- 添加页面 完成信息后 点击提交后,请求参数 发生送到后台 controller层 接收
- 调用service 层和dao层 完成添加方法
- 添加成功 需要 重定向到查询所有的页面
2.1 前端页面跳转到添加页面
<input type="button" value="新增" onclick="toAdd()"><br>
<script>
/*上面需要添加个 点击事件 */
function toAdd()
/*跳转到添加页面*/
location.href="/day10-brand-demo/addBrand.html"
</script>
2.2 添加页面 完成后 跳转到conrtroller层
/* 跳转到conrtroller层*/
<form action="/day10-brand-demo/addServlet" method="post">
品牌名称:<input name="brandName"><br>
企业名称:<input name="companyName"><br>
排序:<input name="ordered"><br>
描述信息:<textarea rows="5" cols="20" name="description"></textarea><br>
状态:
<input type="radio" name="status" value="0">禁用
<input type="radio" name="status" value="1">启用<br>
<input type="submit" value="提交">
</form>
2.3 conrtroller层业务 最后重定向到查询所有,可以展示新增的那条数据
private BrandService brandService =new BrandService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
//设置请求中文乱码问题
request.setCharacterEncoding("utf-8");
//2.获取请求参数 封装成brand对象
Brand brand = new Brand();
try
BeanUtils.populate(brand, request.getParameterMap());
catch (Exception e)
e.printStackTrace();
//3.调用services 的 add方法
brandService.add(brand);
//4.重定向到selectAll这个类.重新查询一下所有,刷新列表
response.sendRedirect(request.getContextPath()+"/selectAllServlet");
2.4service 和dao 代码 略
3 修改数据
3.1 需要回显数据
- 点击修改 按钮后,会跳转到 修改页面 ,修改页面具有完整的数据信息.—>数据回显
- 根据id先去数据库查询. 查询后的结果封装的到request 域中共享.请求转发到前端 修改界面
3.2 修改数据
- 根据 id修改,在界面是看不到的.需要我们在前端界面,在如隐藏属性.
- 修改的值,要动态获取,采用EL表达式来操作.
1 点击跳转到修改页面
<c:forEach items="$brands" var="brand" varStatus="vs">
<tr align="center">
<td>$vs.count</td>
<td>$brand.brandName</td>
<td>$brand.companyName</td>
<td>$brand.ordered</td>
<td>$brand.description</td>
<td>$brand.status==1?"启用":"禁用"</td>
<td><a href="/day10-brand-demo/selectByIdServlet?id=$brand.id">修改</a> <a href="/day10-brand-demo/DeleteServlet?id=$brand.id">删除</a></td>
</tr>
</c:forEach>
2 修改页面跳转到前端
<form action="/day10-brand-demo/updateServlet" method="post">
<%--id 隐藏域 加上el 的动态获取数据--%>
<input type="hidden" name="id" value="$brand.id">
品牌名称:<input name="brandName" value="$brand.brandName"><br>
企业名称:<input name="companyName" value="$brand.companyName"><br>
排序:<input name="ordered" value="$brand.ordered" ><br>
描述信息:<textarea rows="5" cols="20" name="description">
$brand.description
</textarea><br>
状态:
<input type="radio" name="status" value="0" $brand.status==0?"checked":"">禁用
<input type="radio" name="status" value="1" $brand.status==1?"checked":"">启用<br>
<input type="submit" value="提交">
</form>
3.根据id查询 请求转发到更新页面
private BrandService brandService=new BrandService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
int id = Integer.parseInt(request.getParameter("id"));
Brand brand = brandService.selectById(id );
request.setAttribute("brand",brand);
request.getRequestDispatcher("/update.jsp").forward(request,response);
4 更新完成 重定向到 查询所有方法 展示所有数据
private BrandService brandService=new BrandService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
request.setCharacterEncoding("utf-8");
//2.获取请求参数 封装成brand对象
Brand brand = new Brand();
try
BeanUtils.populate(brand, request.getParameterMap());
catch (Exception e)
e.printStackTrace();
//3.调用services 的 add方法
brandService.update(brand);
//4.请求转发到selectAll这个类.重新查询一下所有,刷新列表
request.getRequestDispatcher("/selectAllServlet").forward(request,response);
4 .删除 同增加
学习MyBatis必知必会~准备工作:了解框架三层架构ORM思想
一、框架:
1、框架,什么是框架,为什么要使用框架?
■ 框架:是一些列jar包,本质是对jdk功能的扩展。
框架是一组程序的集合,包含一系列的最佳实践,作用是为了解决某个领域的问题。
- 回顾一下java程序的运行机制:java文件(源文件) ---[编译]--》 字节码文件(class文件) ---[运行]--》 jvm
- jar包:多份java字节码文件(class文件-运行要用到的文件)---[压缩打包]--》jar(java归档文件,类似于rar)
■ 使用框架第一步:拷贝jar包.
二、三层架构:
(图片来源叩丁狼)
三、对象映射关系 ORM(Object Relational Mapping)
---为了解决面向对象与关系数据库存在的互相不匹配的问题。 [主要是:对象的属性名和表的列名不匹配的问题
]
1、回顾之前jdbc封装的dao层的模板类jdbcTemplate:
//增删改操作模板: public static update(String sql, Object...params)
//查询操作模板:public static <T> T query(String sql, IResultSetHandler rsh, Object...params)
//---------------------------------------------------------------------------------------------
//还封装了BeanHandler、BeanListHandler
BeanHandler 处理结果类[结果集只有一行数据,把一行结果集数据封装成一个对象]
BeanListHandler 处理结果类[结果集有多行数据,把每一行结果集数据封装成一个对象,存储到List集合中]
- 使用BeanHandler和BeanListHandler要注意,对象的属性名和表中的列名需要相同,不同报错。
■ jdbc--->jdbc模板(通用结果集处理器[需要保证类的属性名和表名相同])----》ORM框架(MyBatis框架)
2、ORM思想:
面向对象概念----(映射配置)-----面向关系概念
类 ----------------------------------------------表
对象----------------------------------------表的行(记录)
属性---------------------------------------表的列(字段)
3、Mapping:使用注解/xml:
❀ 属性名和列名是不同的,将两者对应起来需要使用还能某种规则【注解/xml
】
-
使用xml:
(图片来源叩丁狼)
4、ORM 框架:
遵循ORM思想实现的技术,解决持久层问题[和数据库连接,进行CRUD]。
(图片来源叩丁狼)
✿ 一个设计良好的持久层,应该保证:当持久层的实现技术发生改变时,不会影响到上一层层的代码(service层)。
■ 常见 ORM 框架:
- JPA:本身是一种 ORM 规范,不是 ORM 框架。由各大 ORM 框架提供实现。
- Hibernate:以前最流行的 ORM 框架。设计灵巧,性能优秀,文档丰富。
- MyBatis: 目前最受欢迎的持久层解决方案。
以上是关于web+EL+mybatis 实现简单三层架构思想的主要内容,如果未能解决你的问题,请参考以下文章
springboot+mybatis plus学习记录+三层架构理解
Spring——第一个Spring-Web项目(三层架构实现前后端数据交互)