目录
一、配置自定义MVC环境
二、通用增删改的编写
三、编写Dao方法层
四、编写Action接收请求并处理
五、配置框架的xml文件
六、前端代码
我们在前几篇文章一步步的搭建了属于我们自己的MVC框架,
而这篇文章就让我们一起来配置使用一下吧!
选择mvc相关的包右键--->Export--->搜索java--->选择JAR File--->Next
Browse选择自己要保存的目录并且命名--->Finish就好了
我们接着就把生成的jar包导入新的工程里--->并且把相关的依赖包也都导入--->再把我们分页标签的相关文件以及助手类导入;
--->再建一个源文件夹:Source Folder
--->在conf文件夹里面放置框架的配置文件Leaf.xml--->再把web.xml文件配置好:
J2EE_mvc_crud
mvc
com.leaf.mvc.DispatcherServlet
configLocation
/Leaf.xml
mvc
*.action
--->最后我们再把我们之前写好的那些工具类例如PageBean、BeasDao等等都导入工程;
到这一步后我们的环境配置就完成了!可以开始实体类与Dao层的编写了~~~
实体类就三个属性:bid、bname、price,编写简单,这里就不做过多解释,直接放上代码:
实体类:Book--->
package com.leaf.entity;
/**
* 实体类:图书类
* @author Leaf
*
* 2022年6月21日 下午6:39:18
*/
public class Book {
private int bid;//书籍编号
private String bname;//书籍名称
private float price;//书籍价格
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public Book() {
}
public Book(int bid, String bname, float price) {
this.bid = bid;
this.bname = bname;
this.price = price;
}
@Override
public String toString() {
return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
}
}
我们就直接开始编写一个通用的增删改的工具类吧:
/**
* 增删改
* @param sql SQL语句
* @param t 泛型,放对应的实体类。
* @param attrs 属性名
* @return 影响行数
* @throws Exception 抛出的异常
*/
public int executeUpdate(String sql,T t,String[] attrs) throws Exception {
Connection con = DBHelper.getConnection();
PreparedStatement ps = con.prepareStatement(sql);
//将t的某一个属性对应值加到ps对象中
for (int i = 0; i < attrs.length; i++) {
Field f = t.getClass().getDeclaredField(attrs[i]);
//打开访问权限
f.setAccessible(true);
ps.setObject(i + 1, f.get(t));
}
return ps.executeUpdate();
}
上面的attrs数组传就是要操作的实体类的相关属性;
通用的工具类都是封装了重复的、可以共用的代码,
极大地减少了我们后面开发的代码量、提升开发效率。
当我们的通用增删改查都封装好了后就可以开始写我们的数据库访问层啦,
关于分页查询的通用方法可以参考我的文章:通用查询&分页代码__Leaf1217的博客-CSDN博客_查询代码
我们把重复的代码封装到共用的工具类,写成通用增删改查方法后代码即简,
这里放上代码:
package com.leaf.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.leaf.entity.Book;
import com.leaf.util.BaseDao;
import com.leaf.util.DBHelper;
import com.leaf.util.PageBean;
import com.leaf.util.StringUtils;
/**
* 数据库访问层:图书表
* @author Leaf
*
* 2022年6月29日 上午8:49:08
*/
public class BookDao extends BaseDao {
//查询
public List list(Book book,PageBean pageBean) throws Exception{
String sql = "select * from t_mvc_book where 1=1 ";
String bname = book.getBname();
if(StringUtils.isNotBlank(bname)) {
sql += " and bname like '%"+bname+"%'";
}
int bid = book.getBid();
if(bid != 0) {
sql += " and bid = "+ bid;
}
return super.executeQuery(sql, pageBean, rs -> {
List list = new ArrayList<>();
try {
while(rs.next()) {
list.add(new Book(rs.getInt(1), rs.getString(2), rs.getFloat(3)));
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
});
}
//增加
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"});
}
}
这个时候我们就可以开始编写我们的处理请求的类:BookAction了
package com.leaf.web;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.leaf.dao.BookDao;
import com.leaf.entity.Book;
import com.leaf.mvc.ActionSupport;
import com.leaf.mvc.ModelDriven;
import com.leaf.util.PageBean;
public class BookAction extends ActionSupport implements ModelDriven {
private Book book = new Book();
private BookDao bd = new BookDao();
@Override
public Book getModel() {
return book;
}
//增加
public String add(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.add(book);
} catch (Exception e) {
e.printStackTrace();
}
//跳转到查询界面
return "toList";
}
//删除
public String del(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.del(book);
} catch (Exception e) {
e.printStackTrace();
}
//跳转到查询界面
return "toList";
}
//修改
public String edit(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.edit(book);
} catch (Exception e) {
e.printStackTrace();
}
//跳转到查询界面
return "toList";
}
//查询
public String list(HttpServletRequest req, HttpServletResponse resp) {
try {
//实例化PageBean
PageBean pageBean = new PageBean();
//初始化
pageBean.setRequest(req);
List list = bd.list(book, pageBean);
if(list.size()==0) {
//没有查询到内容
List list2 = bd.list(new Book(), pageBean);
//查询所有
req.setAttribute("list", list2);
}
else {
req.setAttribute("list", list);
}
req.setAttribute("pageBean", pageBean);
} catch (Exception e) {
e.printStackTrace();
}
//执行查询展示
return "list";
}
//跳转到新增或者是编辑页面
public String preEdit(HttpServletRequest req, HttpServletResponse resp) {
try {
int bid = book.getBid();
if(bid != 0) {
//传递bid到后台,有且只能查出一条数据,那也就意味着list集合中只有一条
List list = bd.list(book, null);
req.setAttribute("b", list.get(0));
}
} catch (Exception e) {
e.printStackTrace();
}
//跳转到编辑页面
return "toEdit";
}
}
当上面的类都编写好了后,我们就要配置框架的xml文件了!
到这里后台的所有代码就写好了,这里还附送前台的代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="l" uri="http://jsp.leaf.com" %>
图书主页面
书籍ID
书籍名
价格
操作
${b.bid }
${b.bname }
${b.price }
编辑
删除
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
${empty b ? "新增书籍" : "编辑书籍" }页面
注意:一定要写提交:method="post"