Javaee技术目的总结

简介: Javaee技术目的总结

                                       一.前节回顾

在前一节中,我们了解了:

1.将中央控制器中的Action容器,变成可控制!

2.针对于反射调用业务代码,最终页面跳转

3.jsp页面参数传递后台的代码优化字段太多有影响!

 


                                  二.项目部署前期准备工作

1.项目运行环境配置

1.1.首先新建一个web项目,完成xml构建

然后命名,点击next点到底直到这个出现

将其勾选,next!

1.2加载jar

将我们的jar放在web项目的安全目录下

然后在进行 add  buth将我们的jar加入项目

1.3准备工作结束

新建一个utils包,将我们的数据连接驱动,以及过滤器,连接保护文件,分页代码,以及通用的方法basedao加入进utils包中

 

                                    三.正式启动项目

1.创建实体包

定义需要的属性,提供get,set方法;tostring,,有参,无参数方法

2.建立通用查询方法

2.1.继承BaseDao<Book>实现通用查询

public List<Book> list(Book book, PageBean pageBean) throws Exception {
    String sql = "select *from  t_mvc_book where 1=1 ";
    String bname = book.getBname();
    int bid = book.getBid();
    if (StringUtils.isNotBlank(bname)) {
      sql += "  and  bname  like  '%" + bname + "%' ";
    }
    if (bid != 0) {
      sql += "  and  bid=" + bid;
    }
    return super.executeQuery(sql, Book.class, pageBean);
  }

3.老版本增删改,和新增删改

3.1老版本增删改

// 增加
   public int add(Book book) throws Exception {
   String sql = "insert into t_mvc_book values(?,?,?)";
   Connection conn = DBAccess.getConnection();
   PreparedStatement ps = conn.prepareStatement(sql);
   ps.setObject(1, book.getBid());
   ps.setObject(2, book.getBname());
   ps.setObject(3, book.getPrice());
   return ps.executeUpdate();
   }
 //删除
   public int del(Book book) throws Exception {
   String sql = "delete from t_mvc_book where bid=? ";
   Connection conn = DBAccess.getConnection();
   PreparedStatement ps = conn.prepareStatement(sql);
   ps.setObject(1, book.getBid());
   return ps.executeUpdate();
   }
 public int edit(Book book) throws Exception {
   String sql = " update t_mvc_book set bname=?,price=? where bid=?";
   Connection conn = DBAccess.getConnection();
   PreparedStatement ps = conn.prepareStatement(sql);
   ps.setObject(1, book.getBname());
   ps.setObject(2, book.getPrice());
   ps.setObject(3, book.getBid());
   return ps.executeUpdate();
   }

缺点:

重复代码:

Connection conn = DBAccess.getConnection();

PreparedStatement ps =conn.prepareStatement(sql);

重复流程:

ps.setObject(1, book.getBid());
ps.setObject(2, book.getBname());

ps.setObject(3, book.getPrice());

3.2新版本增删改

3.2.1在basedao对于重复代码进行封装

通过一个对象集合来存储实体的属性,然后再通过一个for循环其下标其目的是:根据操作来遍历出来所需要的属性,然后通过反射来操作,最后加入设置值

* 通用的增删改方法
   * @param book
   * @throws Exception
   * sql:sql语句
   * T:实体
   * attrs:实体属性
   */
  public int executeUpdate(String sql, T t, String[] attrs) throws Exception {
    Connection con = DBAccess.getConnection();
    PreparedStatement pst = con.prepareStatement(sql);
    for (int i = 0; i < attrs.length; i++) {
      Field f = t.getClass().getDeclaredField(attrs[i]);
      f.setAccessible(true);
      pst.setObject(i+1, f.get(t));
    }
     return pst.executeUpdate();
  }
3.2.2新版本

只需要调用那个方法,根据需求编写sql语句,然后在通过return返回,sql语句,实体,集中中的元素

/**
   * 通用增删改
   */
  //增加
  public int add(Book book) throws Exception {
    String sql = "insert  into   t_mvc_book values(?,?,?)";
    return super.executeUpdate(sql, book, new  String[] {"bid","bname","price"});
  }
  //删除
  public int del(Book book) throws Exception {
    String sql = "delete from t_mvc_book where bid=?  ";
    return super.executeUpdate(sql, book, new  String[] {"bid"});
  }
  //修改
  public int edit(Book book) throws Exception {
    String sql = "update t_mvc_book set bname=?,price=? where bid=?  ";
    return super.executeUpdate(sql, book, new  String[] {"bname","price","bid"});
  }

4.juin测试

选择类目,crtl+n 建立一个类Juint  test case给代码进行测试

4.1方法测试

实现思路:

1.首先在最外层:调用私有化的dao方法

2.在方法内部实例化实体

3.然后在通过dao.方法名

4.当然具体情况具体分析

package com.lz.dao;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Test;
import com.lz.entity.Book;
import com.lz.utils.PageBean;
public class BookDaoTest {
  private  BookDao  bk=new  BookDao();
  @Test
  public void testList() throws Exception {
     Book  book=new Book();
     book.setBname("圣墟");
    PageBean  pageBean=new PageBean();
    //pageBean.setPage(3);
    pageBean.setPagination(false);
          List<Book> list = bk.list(book, pageBean);
          for (Book b : list) {
        System.out.println(b);
      }
  }
  @Test
  public void testAdd() throws Exception {
     Book  book=new Book(16,"圣墟嘿嘿嘿",12f);
     bk.add(book);
  }
  @Test
  public void testDel() throws Exception {
     Book  book=new Book();
     book.setBid(16);
     bk.del(book);
  }
  @Test
  public void testEdit() throws Exception {
    Book  book=new Book(16,"圣墟嘿嘿嘿",12f);
     bk.edit(book);
  }
}

4.2方法调用

选择方法

当出现绿色时就代表方法没有问题


5.配置xml文件,通过反射来实现一些方法

5.1.配置mvc.xml

name属性为:我们在Bookaction中  return方法的返回值

path为:跳转路径

5.2配置tid文件

tag-class属性为:我们配置的分页代码路径

6.实现web界面

6.1数据显示界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
  <%@taglib  prefix="z"   uri="http://jsp.veryedu.cn" %>
  <%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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">
<link
  href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
  rel="stylesheet">
<script
  src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js"></script>
<title>书籍列表</title>
<style type="text/css">
.page-item input {
  padding: 0;
  width: 40px;
  height: 100%;
  text-align: center;
  margin: 0 6px;
}
.page-item input, .page-item b {
  line-height: 38px;
  float: left;
  font-weight: 400;
}
.page-item.go-input {
  margin: 0 10px;
}
</style>
</head>
<body>
  <form class="form-inline"
    action="${pageContext.request.contextPath }/book.action?methodName=list" method="post">
    <div class="form-group mb-2">
      <input type="text" class="form-control-plaintext" name="bname"
        placeholder="请输入书籍名称">
        <a  href="${pageContext.request.contextPath }/book.action?methodName=toEdit&bid=${b.bid }">增加</a>
    </div>
    <button type="submit" class="btn btn-primary mb-2">查询</button>
  </form>
  <table class="table table-striped  ">
    <thead>
      <tr>
        <th scope="col">书籍ID</th>
        <th scope="col">书籍名</th>
        <th scope="col">价格</th>
      </tr>
    </thead>
    <tbody>
       <c:forEach items="${list }"  var="b">
      <tr>
        <td>${b.bid }</td>
        <td>${b.bname }</td>
        <td>${b.price }</td>
        <td>
        <a  href="${pageContext.request.contextPath }/book.action?methodName=toEdit&bid=${b.bid }">修改</a>
        <a  href="${pageContext.request.contextPath }/book.action?methodName=tdel&bid=${b.bid }">删除</a>
        </td>
      </tr>
      </c:forEach>
    </tbody>
  </table>
  <z:page pageBean="${pageBean }"></z:page>
</body>
</html>
6.1.2效果图

6.2增加,修改

6.2.1代码

由于增加,修改共用一个jsp界面,当我们传参数时要对于参数进行一个判断,使用三元运算符,如果b为就是增加操作,不然就是修改操作

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="http://jsp.veryedu.cn"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>书籍编辑界面</title>
</head>
<body>
<form class="form-inline"
    action="${pageContext.request.contextPath }/book.action?methodName=${empty b ? 'add' : 'edit'}" method="post">
    书籍ID:<input type="text" name="bid" value="${b.bid }"><br>
    书籍名称:<input type="text" name="bname" value="${b.bname }"><br>
    书籍价格:<input type="text" name="price" value="${b.price }"><br>
    <input type="submit">
  </form>
</body>
</html>
6.2.2效果图

 

相关文章
|
3月前
|
前端开发 IDE Java
"揭秘前端转Java的秘径:SpringBoot Web极速入门,掌握分层解耦艺术,让你的后端代码飞起来,你敢来挑战吗?"
【8月更文挑战第19天】面向前端开发者介绍Spring Boot后端开发,通过简化Spring应用搭建,快速实现Web应用。本文以创建“Hello World”应用为例,展示项目基本结构与运行方式。进而深入探讨三层架构(Controller、Service、DAO)下的分层解耦概念,通过员工信息管理示例,演示各层如何协作及依赖注入的使用,以此提升代码灵活性与可维护性。
59 2
|
5月前
|
Java 数据安全/隐私保护
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(二)
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(二)
166 0
|
5月前
|
Java API 数据安全/隐私保护
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(一)
JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)(一)
125 0
|
网络协议 Java 程序员
【JavaEE】网络原理基础讲解
【JavaEE】网络原理基础讲解
java202304java学习笔记第五十八天员工管理-自动配置-自定义starter分析3
java202304java学习笔记第五十八天员工管理-自动配置-自定义starter分析3
53 0
java202304java学习笔记第五十八天员工管理-自动配置-自定义starter分析4
java202304java学习笔记第五十八天员工管理-自动配置-自定义starter分析4
45 0
java202304java学习笔记第五十八天员工管理-自动配置-自定义starter分析2
java202304java学习笔记第五十八天员工管理-自动配置-自定义starter分析2
44 0
java202304java学习笔记第五十九天员工管理-ssm-spring的体系结构
java202304java学习笔记第五十九天员工管理-ssm-spring的体系结构
47 0
|
Java 应用服务中间件 数据库
Web阶段:第十一章:JavaEE项目的三层架构
Web阶段:第十一章:JavaEE项目的三层架构
152 0
Web阶段:第十一章:JavaEE项目的三层架构
|
安全 区块链 数据安全/隐私保护
一文读懂DAO以及web3系统开发原理以及方案
Web3 之所以会出现,是因为中心化机构在管理金融和社会基础设施时无法保障安全性、公平性和透明性。Web3基于区块链和预言机等信任最小化的分布式网络建立,利用密码学、共识协议和机制设计来管理数字化基础设施,无需信任人类第三方,而是通过技术来实现保障,这就是所谓的“加密事实”。
一文读懂DAO以及web3系统开发原理以及方案

相关实验场景

更多