自定义MVC增删改查

news2024/12/25 2:47:49

 

目录

 mymvcdemo是自定义mvc框架的使用示例

1.1 实体类

1.2  dao方法

1.3 写Service / biz 三层架构

1.4 建action 相当于selvert

1.5 con连接MySQL 8.0 版本

1.6 配置文件 XML

1.7 主界面布局

1.8 增加界面布局

1.9 写tld配置文件

2.0 注意架包 我是已经打包好的


mymvcdemo是自定义mvc框架的使用示例

1.1 实体类

package com.zking.mymvc.entity;

import java.io.Serializable;

public class Book implements Serializable {
	
	private Integer bookid;
	
	private String bookname;
	
	private String bookname_pinyin;
	
	private Float price;
	
	private String booktype;
	
	public Integer getBookid() {
		return bookid;
	}
	public void setBookid(Integer bookid) {
		this.bookid = bookid;
	}
	public String getBookname() {
		return bookname;
	}
	public void setBookname(String bookname) {
		this.bookname = bookname;
	}
	public String getBookname_pinyin() {
		return bookname_pinyin;
	}
	public void setBookname_pinyin(String bookname_pinyin) {
		this.bookname_pinyin = bookname_pinyin;
	}
	public Float getPrice() {
		return price;
	}
	public void setPrice(Float price) {
		this.price = price;
	}
	public String getBooktype() {
		return booktype;
	}
	public void setBooktype(String booktype) {
		this.booktype = booktype;
	}
	
	public Book() {
		// TODO Auto-generated constructor stub
	}
	public Book(Integer bookid, String bookname, String bookname_pinyin, Float price, String booktype) {
		super();
		this.bookid = bookid;
		this.bookname = bookname;
		this.bookname_pinyin = bookname_pinyin;
		this.price = price;
		this.booktype = booktype;
	}
	
	public Book( String bookname, String bookname_pinyin, Float price, String booktype) {
		this.bookname = bookname;
		this.bookname_pinyin = bookname_pinyin;
		this.price = price;
		this.booktype = booktype;
	}
	@Override
	public String toString() {
		return "Book [bookid=" + bookid + ", bookname=" + bookname + ", bookname_pinyin=" + bookname_pinyin + ", price="
				+ price + ", booktype=" + booktype + "]";
	}
	
	

}

1.2  dao方法

package com.zking.mymvc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.zking.dao.BaseDao02;
import com.zking.dao.BaseDao02.ICovent;
import com.zking.mymvc.entity.Book;


import com.zking.util.DBHelper;
import com.zking.util.PageBean;
import com.zking.util.PinYinUtil;


public class BookDao implements IBookDao {
	
	Connection con = null;
	PreparedStatement ps = null;
	ResultSet rs = null;

	@Override
	public List<Book> getBooks(Book book, PageBean pageBean) {
		String sql="select * from tb_book where 1=1";
		
		
		List<Object> ls = new ArrayList<>();
		if(book != null && book.getBookname() !=null && !"".equals(book.getBookname())) {
			sql +=" and bookname like ?";
			ls.add("%"+book.getBookname()+"%") ;
		}
		
		 return BaseDao02.query(sql, ls.toArray(), pageBean, new ICovent<Book>() {

			@Override
			public List<Book> convent(ResultSet rs) throws SQLException {
				List<Book> list = new ArrayList<>();
				while(rs.next()) {
					Book book = new Book();
					book.setBookid(rs.getInt("bookid"));
					book.setBookname(rs.getString("bookname"));
					book.setBookname_pinyin(rs.getString("bookname_pinyin"));
					book.setPrice(rs.getFloat("price"));
					book.setBooktype(rs.getString("booktype"));
					list.add(book);
				}
				return list;
			}
			
		});
	}

	
	@Override
	public void addBook(Book book) {
		System.out.println(book);
		try {
			//创建连接
			con=DBHelper.getConnection();
			//SQL语句
			String sql="insert into tb_book(bookname,bookname_pinyin,price,booktype) values(?,?,?,?)";
			//执行语句
			ps=con.prepareStatement(sql);
			//赋值ֵ
			ps.setString(1,book.getBookname());
			ps.setString(2,PinYinUtil.toPinyin(book.getBookname().toLowerCase()));
			ps.setFloat(3, book.getPrice());
			ps.setString(4, book.getBooktype());
			
			ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.close(con, ps, null);
		}
		
	}
	
	@Override
	public int deleteBook(int bookid) {
		int n = 0;
		try {
			//创建连接
			con=DBHelper.getConnection();
			//定义SQL语句
			String sql="delete from tb_book where bookid=?";
			//获得执行语句
			ps=con.prepareStatement(sql);
			//赋值
			ps.setInt(1, bookid);
			n=ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.close(con, ps, rs);
		}
		return n;
		
	}
	
	
	

	@Test
	public void testGetBook() {
		Book book = new Book();
		book.setBookname("西");
		PageBean pageBean = new PageBean();
		pageBean.setRows(5);
		pageBean.setPage(2);
		List<Book> list = getBooks(book, pageBean);
		list.forEach(System.out::println);
	}
	@Test
	public void testAddBook() {
		Book book = new Book("哈哈哈", "hhh", 34.33f, "小说");
		BookDao bd = new BookDao();
		bd.addBook(book);
	}
	
	

}

package com.zking.mymvc.dao;

import java.util.List;

import com.zking.mymvc.entity.Book;
import com.zking.util.PageBean;

public interface IBookDao {
	
	/**
	 * 查询方法
	 * @param book
	 * @param pageBean
	 * @return
	 */
	List<Book> getBooks(Book book, PageBean pageBean);

	/**
	 * 增加方法
	 * @param book
	 */
	void addBook(Book book);

	/**
	 * 删除方法
	 * @param bookid
	 * @return
	 */
	int deleteBook(int bookid);

}

1.3 写Service / biz 三层架构

package com.zking.mymvc.service;

import java.util.List;

import com.zking.mymvc.dao.BookDao;
import com.zking.mymvc.dao.IBookDao;
import com.zking.mymvc.entity.Book;
import com.zking.util.PageBean;

/**
 * @author PC
 *
 */
public class BookService implements IBookService {

	private IBookDao dao = new BookDao();
	

	@Override
	public List<Book> getBooks(Book book,PageBean pageBean) {
		
		return dao.getBooks(book, pageBean);
	}
	
	@Override
	public void addBook(Book book) {
		dao.addBook(book);
	}

	@Override
	public void deleteBook(int bookid) {
		dao.deleteBook(bookid);
		
	}

}
package com.zking.mymvc.service;

import java.util.List;

import com.zking.mymvc.entity.Book;
import com.zking.util.PageBean;

public interface IBookService {
	
	List<Book> getBooks(Book book,PageBean pageBean);

	void addBook(Book book);
	
	void deleteBook(int bookid);

}

1.4 建action 相当于selvert

package com.zking.mymvc.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.framework.AbstractDispatchAction;
import com.zking.framework.ModelDrive;
import com.zking.mymvc.entity.Book;
import com.zking.mymvc.service.BookService;
import com.zking.mymvc.service.IBookService;
import com.zking.util.PageBean;

public class BookAction extends AbstractDispatchAction implements ModelDrive {

	private Book book = new Book();
	
	@Override
	public Object getModel() {
		return book;
	}
	
	//查询
	private IBookService service = new BookService();
	
	public String getBooks(HttpServletRequest req,HttpServletResponse resp) {
		PageBean pageBean = new PageBean();
		pageBean.setRequest(req);
		
		pageBean.setRows(5);
		List<Book> bookPager = service.getBooks(book, pageBean);
		req.setAttribute("bookPager", bookPager);
		
		return "book";
	}
	
	/**
	 * 增加
	 * @param req
	 * @param resp
	 * @return
	 */
	public String addBook(HttpServletRequest req,HttpServletResponse resp) {
		service.addBook(book);
		return "success";
	}
	
	/**
	 * 删除
	 * @param req
	 * @param resp
	 * @return
	 */
	public String deleteBook(HttpServletRequest req,HttpServletResponse resp) {
		service.deleteBook(book.getBookid());
		return "ok";
		
	}
	

}

1.5 con连接MySQL 8.0 版本

#oracle9i
#driver=oracle.jdbc.driver.OracleDriver
#url=jdbc:oracle:thin:@localhost:1521:orcl
#user=scott
#pwd=123


#sql2005
#driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#url=jdbc:sqlserver://localhost:1433;DatabaseName=test1
#user=sa
#pwd=123


#sql2000
#driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#url=jdbc:microsoft:sqlserver://localhost:1433;databaseName=unit6DB
#user=sa
#pwd=888888


#mysql
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/tb_books?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
#url=jdbc:mysql://119.23.46.143:3306/db_s2_easyui?useUnicode=true&characterEncoding=UTF-8&useSSL=false
user=root
pwd=123456



1.6 配置文件 XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[
	<!ELEMENT config (action*)>
	<!ELEMENT action (forward*)>
	<!ELEMENT forward EMPTY>
	<!ATTLIST action
	  path CDATA #REQUIRED
	  type CDATA #REQUIRED
	>
	<!ATTLIST forward
	  name CDATA #REQUIRED
	  path CDATA #REQUIRED
	  redirect (true|false) "false"
	>
]>
<config>
	<action path="/bookAction" type="com.zking.mymvc.action.BookAction">
		<forward name="book" path="/bookList.jsp" redirect="false"/>
		<forward name="success" path="http://localhost:8080/J2EE_mymvcdemo/bookAction.action?methodName=getBooks" redirect="true"/>
		<forward name="ok" path="http://localhost:8080/J2EE_mymvcdemo/bookAction.action?methodName=getBooks" redirect="true"/>
	</action>
</config>

1.7 主界面布局

<%@page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="z" uri="/zking"%>
<!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>
	<h1>书本信息</h1>
	<form action="<%=request.getContextPath()%>/bookAction.action?methodName=getBooks" method="post">
		<input type="text" name="bookname" value="<%=request.getParameter("bookname")==null ? "" : request.getParameter("bookname")%>"/> 
		<input type="submit" value="查询">
		
		
	</form>

	<table width="100%" border="1" cellpadding="0" cellspacing="0">
		<thead>
			<tr>
			<td>书本编号</td>
			<td>书本名字</td>
			<td>书本拼音</td>
			<td>书本价格</td>
			<td>书本类型</td>
			<td>操作<a href="<%=request.getContextPath()%>/addBook.jsp">增加</a></td>
			
		</tr>
		</thead>
		
			<c:forEach items="${bookPager}" var="b">
			<tr>
				<td>${b.bookid}</td>
				<td>${b.bookname}</td>
				<td>${b.bookname_pinyin}</td>
				<td>${b.price}</td>
				<td>${b.booktype}</td>
				<td><a href="<%=request.getContextPath()%>/bookAction.action?methodName=deleteBook&bookid=${b.bookid}">删除</a></td>
			</tr>
		</c:forEach>
	</table>
	
	<z:paging pageBean="${pageBean}"/>
	
</body>
</html>

1.8 增加界面布局

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
	<h1>增加</h1>

	<form action="<%=request.getContextPath()%>/bookAction.action?methodName=addBook" method="post">
	
		书本名字: <input type="text" name="bookname"><br>
		书本价格: <input type="text" name="price"><br>
		书本类型: <input type="text" name="booktype"><br>
		
		
		<input type="submit" value="提交">
	
	
	
	
	
	</form>
</body>
</html>

1.9 写tld配置文件

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
	<tlib-version>1.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>Simple Tags</short-name>
	<uri>/zking</uri>
	
	<tag>
		<name>paging</name>
		<tag-class>com.zking.tag.PagingTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>pageBean</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	</taglib>

2.0 注意架包 我是已经打包好的

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode-每日一题【剑指 Offer 53 - I. 在排序数组中查找数字 I】

题目 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8输出: 2 示例 2: 输入: nums [5,7,7,8,8,10], target 6输出: 0 提示&#xff1a; 0 < nums.length < 105-109 < nums[i] < 109nums 是一个非递减数组-109 < targe…

Java课题笔记~ MyBatis入门

一、ORM框架 当今企业级应用的开发环境中&#xff0c;对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象&#xff0c;在数据库中变现为关系数据。当采用面向对象的方法编写程序时&#xff0c;一旦需要访问数据库&#xff0c;就需要回到关系数据的访问方式&…

软件测评中心测试流程是怎样的?CMA、CNAS软件测试报告出具

软件测评中心是一个专门负责进行软件评估、测试和审查等工作的机构。在软件测评中心中&#xff0c;软件测试流程是按照一系列固定的步骤和流程进行的&#xff0c;以确保测试工作的全面性、系统性和规范性。 1、需求分析&#xff1a;在软件测评过程中&#xff0c;首先需要对软件…

经典病毒上线流量分析-Lokibot

一、概述 Lokibot于2015年面世&#xff0c;持续活跃至今&#xff0c;是一种高度危险且隐匿的恶意软件&#xff0c;旨在窃取受害主机的敏感信息&#xff0c;包括存储的密码、浏览器登录凭据以及加密货币钱包等&#xff0c;并将这些信息上送到远程C2服务器上。本文将重点针对Lok…

穷举深搜暴搜回溯剪枝(1)

一)全排列: 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 1)先画出决策树: 越详细越好&#xff0c;就是我们在进行暴力枚举这道题的过程中&#xff0c;如何不重不漏地将所有的情况全部枚举到&#xff0c;把这个思想历程给画下来&#xff0c;就可以了&#xff0c;把每一步…

【css】外边距margin

外边距中有一个属性值比较有意思&#xff1a;inherit 值&#xff0c;继承父类的属性。 <!DOCTYPE html> <html> <head> <style> div {border: 1px solid red;margin-left: 100px; }p.ex1 {margin-left: inherit; } </style> </head> <…

[React]生命周期

前言 学习React&#xff0c;生命周期很重要&#xff0c;我们了解完生命周期的各个组件&#xff0c;对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1、getDefaultProps() 设置默认的props&#xff0c;也可以用duf…

实验笔记之——Windows下的Android环境开发搭建

好久一段时间没有进行Android开发了&#xff0c;最新在用的电脑也没有了Android studio了。为此&#xff0c;本博文记录一下最近重新搭建Android开发的过程。本博文仅为本人学习记录用&#xff08;**别看&#xff09; 之前博客也对配置Android做过记录 Android学习笔记之——A…

Mybatis高级映射及动态加载及逆向工程

目录 1.多对一 2.一对多 3.⼀对多延迟加载 4.逆向工程 1.多对一 多种⽅式&#xff0c;常⻅的包括三种&#xff1a; 第⼀种⽅式&#xff1a;⼀条SQL语句&#xff0c;级联属性映射。第⼆种⽅式&#xff1a;⼀条SQL语句&#xff0c;association。第三种⽅式&#xff1a;两条SQ…

虹科案例 | PLC如何应用于建筑的3D打印?

客户&#xff1a;Rebuild 合作伙伴&#xff1a;ASTOR 应用&#xff1a;用于建筑的大尺寸3D打印 应用产品&#xff1a;3D混凝土打印机 &#xff08;一&#xff09;应用背景 自从20世纪80年代以来&#xff0c;增材制造技术&#xff08;即3D打印&#xff09;不断发展。大部分3D打印…

flannel的三种常见模式分析

概述 大家接触flannel这种网络模式大多数可能都是从k8s中知道的&#xff0c;初始使用很少去深入了解它&#xff0c;毕竟使用它其实是很简单的。但是有时候会出现奇奇怪怪的网络问题&#xff0c;这个时候就需要我们更深入了解一下flannel这种网络模式。 Flannel是CoreOS开源的&…

【BASH】回顾与知识点梳理(四)

【BASH】回顾与知识点梳理 四 四. Bash Shell 的操作环境4.1 路径与指令搜寻顺序4.2 bash 的进站与欢迎讯息&#xff1a; /etc/issue, /etc/motd4.3 bash 的环境配置文件login与non-login shell/etc/profile (login shell 才会读)~/.bash_profile (login shell 才会读)source &…

Spark2x原理剖析(一)

一、简介 Spark是基于内存的分布式计算框架。在迭代计算的场景下&#xff0c;数据处理过程中的数据可以存储在内存中&#xff0c;提供了比MapReduce高10到100倍的计算能力。Spark可以使用HDFS作为底层存储&#xff0c;使用户能够快速地从MapReduce切换到Spark计算平台上去。Sp…

【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树

概述 二叉树&#xff08;Binary Tree&#xff09;&#xff1a;每个节点最多有两个子节点&#xff08;左子节点和右子节点&#xff09;&#xff0c;没有限制节点的顺序。特点是简单直观&#xff0c;易于实现&#xff0c;但查找效率较低。 二叉搜索树&#xff08;Binary Search…

【严重】PowerJob<=4.3.3 远程代码执行漏洞

漏洞描述 PowerJob 是一款开源的分布式任务调度框架。 由于 PowerJob 未对网关进行鉴权&#xff0c;4.3.3 及之前版本中&#xff0c;未经授权的攻击者可向 /instance/detail 端点发送恶意构造的 instanceId 参数远程执行任意代码。 漏洞名称 PowerJob<4.3.3 远程代码执行漏…

集团MySQL的酒店管理系统

酒店管理系统 概述 基于Spring Spring MVC MyBatis的酒店管理系统&#xff0c;主要实现酒店客房的预定、入住以及结账等功能。使用Maven进行包管理。 用户端主要功能包括&#xff1a; 登录注册、客房预订、客房评论&#xff08;编写评论和查看评论&#xff09; 后台管理主要…

如何理解PID?

1 理解PID 先说结论&#xff1a;调整开关量让反馈更接近目标。 这里拿水龙头打比方&#xff0c;我们想控制水龙头的出水量为一半&#xff0c;这里就涉及两个关键量&#xff0c;阀门和出水量&#xff1b;阀门&#xff0c;即上面说的开关量&#xff1b;出水量即反馈&#xff1b…

postman和jmeter的区别何在?

小伙伴们大家好呀&#xff0c;前段时间笔者做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xf…

推荐50个超实用的 Chrome 扩展,建议收藏!

今天来分享 50 个超实用的 Chrome 浏览器扩展&#xff01; JSON Viewer Pro JSON Viewer Pro 用于可视化JSON文件。其核心功能包括&#xff1a; 支持将JSON数据进行格式化&#xff0c;并使用属性或者图表进行展示&#xff1b;使用面包屑深入遍历 JSON 属性&#xff1b;在输入…

大势智慧与深信服签署战略合作协议,助推实景三维中国建设

7月28日&#xff0c;武汉大势智慧科技有限公司&#xff08;以下简称“大势智慧”&#xff09;与深信服成功签署战略合作协议&#xff0c;双方将围绕“实景三维中国建设”和测绘行业数字化领域开展深度合作&#xff0c;共同为广大测绘行业用户打造一款灵活高效的测绘数据生产和存…