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效果图

猜你喜欢

转载自blog.csdn.net/lz17267861157/article/details/131525727