一、搭建自定义mvc框架环境
1、将上一次写的框架导出成为jar包——>选择JAR file——>在JAR file这可以输入你想导出的位置——>最后点击finish就可以了
2、将导出的jar包导入到现在所要使用的项目中并且将所有要用到的jar包导入——>将之前写的tag标签导入——>引入通用分页所写的代码
二、通用增删改查
1.通用类BaseDao
package com.dgl.util;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BaseDao {
public List executeQuery( String sql,PageBean pagebean,CallBack callBack) throws Exception{
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
if(pagebean!=null&&pagebean.isPagination()) {
String countsql = getCountsql(sql);
con = DBAccess.getConnection();
ps = con.prepareStatement(countsql);
rs = ps.executeQuery();
if(rs.next()) {
pagebean.setTotal(rs.getString("n"));
}
String pageSql= getpageSql(sql,pagebean);
con = DBAccess.getConnection();
ps = con.prepareStatement(pageSql);
rs = ps.executeQuery();
}else {
con = DBAccess.getConnection();
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
}
//查询不同的表必然要处理不同的结果集
return callBack.foreach(rs);
}
private String getpageSql(String sql, PageBean pagebean) {
return sql +" limit "+pagebean.getStartIndex()+" , "+pagebean.getRows();
}
private String getCountsql(String sql) {
// TODO Auto-generated method stub
return " select count(1) as n from ("+sql+") t";
}
public int executeUpdate(String sql,T t,String[] strings) throws Exception {
Connection con = DBAccess.getConnection();
PreparedStatement ps = con.prepareStatement(sql);
//将t的某一个对应值加到ps对象中
for (int i = 0; i < strings.length; i++) {
Field f = t.getClass().getDeclaredField(strings[i] );
f.setAccessible(true);
f.get(t);
ps.setObject(i+1, f.get(t));//下标从0开始
}
return ps.executeUpdate();
}
}
2.BookDao
根据方法的不同,sql语句和参数也不同
package com.dgl.dao;
import java.util.ArrayList;
import java.util.List;
import com.dgl.entity.Book;
import com.dgl.util.BaseDao;
import com.dgl.util.PageBean;
import com.dgl.util.StringUtils;
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("bid"), rs.getString("bname"), rs.getFloat("price")));
}
} 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 delete(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"});
}
3、在BookAction中写好对应的方法
遵循先继承后实现的规则,分别调用父类和接口的方法
public class BookAction extends ActionSupport implements ModelDriven{
private Book book = new Book();
private BookDao bd = new BookDao();
@Override
public Book getModel() {
// TODO Auto-generated method stub
return null;
}
//增加
public String add(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.add(book);
} catch (Exception e) {
e.printStackTrace();
}
return "toList";
}
//删除
public String delete(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.delete(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=new PageBean();
pageBean.setRequest(req);
List list=bd.list(book, pageBean);
req.setAttribute("books", list);
req.setAttribute("pageBean", pageBean);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "list";
}
public String toEdit(HttpServletRequest req,HttpServletResponse resp) {
try {
if(book.getBid()!=0) {
List list=bd.list(book, null);
req.setAttribute("b", list.get(0));
}
} catch (Exception e) {
e.printStackTrace();
}
return "toEdit";
4、在Junit中测试
package com.dgl.dao;
import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.dgl.entity.Book;
class BookDaoTest {
private BookDao bookDao=new BookDao();
@Test
public void testList() {
try {
List list = bookDao.list(new Book(), null);
for (Book book : list) {
System.out.println(book);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//增加
@Test
public void testAdd() {
Book book = new Book(123, "小朱", 9999);
try {
bookDao.add(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//修改
@Test
public void testEdit() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.edit(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//删除
@Test
public void testDelete() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.delete(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三、前端Jsp界面
1、主界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.zhujiayin.dgl" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
书籍列表
package com.dgl.util; import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class BaseDao{ public List executeQuery( String sql,PageBean pagebean,CallBack callBack) throws Exception{ Connection con = null; PreparedStatement ps = null; ResultSet rs = null; if(pagebean!=null&&pagebean.isPagination()) { String countsql = getCountsql(sql); con = DBAccess.getConnection(); ps = con.prepareStatement(countsql); rs = ps.executeQuery(); if(rs.next()) { pagebean.setTotal(rs.getString("n")); } String pageSql= getpageSql(sql,pagebean); con = DBAccess.getConnection(); ps = con.prepareStatement(pageSql); rs = ps.executeQuery(); }else { con = DBAccess.getConnection(); ps = con.prepareStatement(sql); rs = ps.executeQuery(); } //查询不同的表必然要处理不同的结果集 return callBack.foreach(rs); } private String getpageSql(String sql, PageBean pagebean) { return sql +" limit "+pagebean.getStartIndex()+" , "+pagebean.getRows(); } private String getCountsql(String sql) { // TODO Auto-generated method stub return " select count(1) as n from ("+sql+") t"; } public int executeUpdate(String sql,T t,String[] strings) throws Exception { Connection con = DBAccess.getConnection(); PreparedStatement ps = con.prepareStatement(sql); //将t的某一个对应值加到ps对象中 for (int i = 0; i < strings.length; i++) { Field f = t.getClass().getDeclaredField(strings[i] ); f.setAccessible(true); f.get(t); ps.setObject(i+1, f.get(t));//下标从0开始 } return ps.executeUpdate(); } }
2.BookDao
根据方法的不同,sql语句和参数也不同
package com.dgl.dao;
import java.util.ArrayList;
import java.util.List;
import com.dgl.entity.Book;
import com.dgl.util.BaseDao;
import com.dgl.util.PageBean;
import com.dgl.util.StringUtils;
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("bid"), rs.getString("bname"), rs.getFloat("price")));
}
} 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 delete(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"});
}
3、在BookAction中写好对应的方法
遵循先继承后实现的规则,分别调用父类和接口的方法
public class BookAction extends ActionSupport implements ModelDriven{
private Book book = new Book();
private BookDao bd = new BookDao();
@Override
public Book getModel() {
// TODO Auto-generated method stub
return null;
}
//增加
public String add(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.add(book);
} catch (Exception e) {
e.printStackTrace();
}
return "toList";
}
//删除
public String delete(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.delete(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=new PageBean();
pageBean.setRequest(req);
List list=bd.list(book, pageBean);
req.setAttribute("books", list);
req.setAttribute("pageBean", pageBean);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "list";
}
public String toEdit(HttpServletRequest req,HttpServletResponse resp) {
try {
if(book.getBid()!=0) {
List list=bd.list(book, null);
req.setAttribute("b", list.get(0));
}
} catch (Exception e) {
e.printStackTrace();
}
return "toEdit";
4、在Junit中测试
package com.dgl.dao;
import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.dgl.entity.Book;
class BookDaoTest {
private BookDao bookDao=new BookDao();
@Test
public void testList() {
try {
List list = bookDao.list(new Book(), null);
for (Book book : list) {
System.out.println(book);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//增加
@Test
public void testAdd() {
Book book = new Book(123, "小朱", 9999);
try {
bookDao.add(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//修改
@Test
public void testEdit() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.edit(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//删除
@Test
public void testDelete() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.delete(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三、前端Jsp界面
1、主界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.zhujiayin.dgl" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
书籍列表
package com.dgl.dao; import java.util.ArrayList; import java.util.List; import com.dgl.entity.Book; import com.dgl.util.BaseDao; import com.dgl.util.PageBean; import com.dgl.util.StringUtils; 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("bid"), rs.getString("bname"), rs.getFloat("price"))); } } 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 delete(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"}); }
3、在BookAction中写好对应的方法
遵循先继承后实现的规则,分别调用父类和接口的方法
public class BookAction extends ActionSupport implements ModelDriven{
private Book book = new Book();
private BookDao bd = new BookDao();
@Override
public Book getModel() {
// TODO Auto-generated method stub
return null;
}
//增加
public String add(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.add(book);
} catch (Exception e) {
e.printStackTrace();
}
return "toList";
}
//删除
public String delete(HttpServletRequest req, HttpServletResponse resp) {
try {
bd.delete(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=new PageBean();
pageBean.setRequest(req);
List list=bd.list(book, pageBean);
req.setAttribute("books", list);
req.setAttribute("pageBean", pageBean);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "list";
}
public String toEdit(HttpServletRequest req,HttpServletResponse resp) {
try {
if(book.getBid()!=0) {
List list=bd.list(book, null);
req.setAttribute("b", list.get(0));
}
} catch (Exception e) {
e.printStackTrace();
}
return "toEdit";
4、在Junit中测试
package com.dgl.dao;
import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.dgl.entity.Book;
class BookDaoTest {
private BookDao bookDao=new BookDao();
@Test
public void testList() {
try {
List list = bookDao.list(new Book(), null);
for (Book book : list) {
System.out.println(book);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//增加
@Test
public void testAdd() {
Book book = new Book(123, "小朱", 9999);
try {
bookDao.add(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//修改
@Test
public void testEdit() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.edit(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//删除
@Test
public void testDelete() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.delete(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三、前端Jsp界面
1、主界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.zhujiayin.dgl" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
书籍列表
public class BookAction extends ActionSupport implements ModelDriven{ private Book book = new Book(); private BookDao bd = new BookDao(); @Override public Book getModel() { // TODO Auto-generated method stub return null; } //增加 public String add(HttpServletRequest req, HttpServletResponse resp) { try { bd.add(book); } catch (Exception e) { e.printStackTrace(); } return "toList"; } //删除 public String delete(HttpServletRequest req, HttpServletResponse resp) { try { bd.delete(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=new PageBean(); pageBean.setRequest(req); List list=bd.list(book, pageBean); req.setAttribute("books", list); req.setAttribute("pageBean", pageBean); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return "list"; } public String toEdit(HttpServletRequest req,HttpServletResponse resp) { try { if(book.getBid()!=0) { List list=bd.list(book, null); req.setAttribute("b", list.get(0)); } } catch (Exception e) { e.printStackTrace(); } return "toEdit";
4、在Junit中测试
package com.dgl.dao;
import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.dgl.entity.Book;
class BookDaoTest {
private BookDao bookDao=new BookDao();
@Test
public void testList() {
try {
List list = bookDao.list(new Book(), null);
for (Book book : list) {
System.out.println(book);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//增加
@Test
public void testAdd() {
Book book = new Book(123, "小朱", 9999);
try {
bookDao.add(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//修改
@Test
public void testEdit() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.edit(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//删除
@Test
public void testDelete() {
Book book = new Book(123, "小朱爸爸", 9999);
try {
bookDao.delete(book);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三、前端Jsp界面
1、主界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.zhujiayin.dgl" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
书籍列表
1、主界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.zhujiayin.dgl" prefix="z"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
书籍列表
| 书籍ID | 书籍名 | 价格 | 操作 |
|---|---|---|---|
| ${b.bid } | ${b.bname } | ${b.price } | 修改 删除 |
2、BookEdit(增加和修改的界面)
目录
一、搭建自定义mvc框架环境
二、通用增删改查
1.通用类BaseDao
2.BookDao
根据方法的不同,sql语句和参数也不同
3、在BookAction中写好对应的方法
遵循先继承后实现的规则,分别调用父类和接口的方法
4、在Junit中测试
三、前端Jsp界面
1、主界面
2、BookEdit(增加和修改的界面)



