自定义MVC增删改查

 

目录

 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 注意架包 我是已经打包好的

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis缓存预热

说明&#xff1a;项目中使用到Redis&#xff0c;正常情况&#xff0c;我们会在用户首次查询数据的同时把该数据按照一定命名规则&#xff0c;存储到Redis中&#xff0c;称为冷启动&#xff08;如下图&#xff09;&#xff0c;这种方式在一些情况下可能会给数据库带来较大的压力…

C++ 结构体和联合体

1.结构体 结构体是一种特殊形态的类&#xff0c;它和类一样&#xff0c;可以有自己的数据成员和函数成员&#xff0c;可以有自己的构造函数和析构函数&#xff0c;可以控制访问权限&#xff0c;可以继承&#xff0c;支持包含多态&#xff0c;结构体定义的语法和类的定义语法几…

【ChatGPT】ChatGPT是如何训练得到的?

前言 ChatGPT是一种基于语言模型的聊天机器人&#xff0c;它使用了GPT&#xff08;Generative Pre-trained Transformer&#xff09;的深度学习架构来生成与用户的对话。GPT是一种使用Transformer编码器和解码器的预训练模型&#xff0c;它已被广泛用于生成自然语言文本的各种…

ubuntu远程控制小车 运行rviz时报错

我买的是wheeltec的小车&#xff0c;测试rgbd相机时想在ubuntu上的rviz中显示小车的姿态和看到的rgb和depth图&#xff0c;但是ubuntu中rostopic list和rviz都找不到小车发布的话题信息&#xff0c;运行rqt_image_view时可以显示图片信息。 最终wheeltec的技术人员lucas帮我找了…

MIT 6.S081 Lab Ten -- mmap

MIT 6.S081 Lab Ten -- mmap 引言mmap(hard)代码解析 引言 本文为 MIT 6.S081 2020 操作系统 实验十解析。 MIT 6.S081课程前置基础参考: 基于RISC-V搭建操作系统系列 mmap(hard) map和munmap系统调用允许UNIX程序对其地址空间进行详细控制。它们可用于在进程之间共享内存&a…

基于springboot+mybatis+vue进销存管理信息系统

基于springbootmybatisvue进销存管理信息系统 一、系统介绍二、功能展示1.个人中心2.企业信息管理3.商品信息管理4.客户信息管理5.入库记录管理6.出库记录管理7.出库记录管理8.操作日志管理9.库存盘点管理 四、获取源码 一、系统介绍 系统主要功能&#xff1a; 普通用户&#…

华为OD机试真题 Java 实现【简单的自动曝光】【2023Q1 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、备注五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明4、再输入5、输出6、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff…

css中flex后文本溢出的问题

原因&#xff1a; 为了给flex item提供一个合理的默认最小尺寸&#xff0c;flex将flex item的min-width 和 min-height属性设置为了auto flex item的默认设置为&#xff1a; min-width&#xff1a; auto 水平flex布局 min-height&#xff1a;auto 垂直flex布局 解决办法&…

PHP8的变量-PHP8知识详解

昨天我们讲解了PHP8的常量&#xff0c;今天讲解PHP8的变量。常量有定义常量和预定义常量&#xff0c;变量呢&#xff1f;那就没有定义变量了&#xff0c;那叫给变量赋值&#xff0c;但是还是有预定义变量的。下面就给大家讲解什么是变量、变量赋值及使用及预定义变量。 一、什么…

zookeeper基础

安装 https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/ 命令 bin/zkServer.sh start bin/zkServer.sh stop bin/zkServer.sh status bin/zkCli.sh ll / quit 各个配置项的含义&#xff1a; tickTime&#xff1a;每个时钟周期的毫秒数。ZooKeeper使用一个内部…

DevOps系列文章之 java调用python脚本

在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件&#xff08;推荐&#xff09; 调用python脚本中的函数 简单介绍 官网地址 首页 | (jython.org) Jython项目提供了Java中的Python实现&#xff0c; 为Python提供了…

功能测试也可以发现数据库相关的性能问题

很多同学认为功能测试和性能测试是严格分开的&#xff0c;功能测试人员无法发现性能问题。其实不是这样的&#xff0c;功能测试人员在验证功能时也可以发现性能问题&#xff1b;一些功能反而在功能测试环境不好验证&#xff0c;需要在性能环境上测试。 今天咱们就说一下测试涉及…

【Redis】内存数据库Redis进阶(搭建各种集群)

目录 单机安装Redis搭建Redis主从集群搭建Redis哨兵集群 基于 CentOS 7 的 Redis 集群 单机安装Redis 安装 Redis 所需要的依赖&#xff1a; yum install -y gcc tcl将 Redis 安装包&#xff08;redis-6.2.4.tar.gz&#xff09;上传到任意目录 解压缩&#xff1a; tar -xzf …

【数据结构】图文并茂,通过逻辑图带你轻松拿捏链表,实现各种接口功能

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我们接着之前讲过的顺序表来继续介绍初阶数据结构的内容&#xff0c;今天给大家带来的是有关链表的基本知识和各种接口功能的实现 好了&#xff0c;废话不多说&#x…

【uniapp】实现买定离手小游戏

前言 最近玩了一个小游戏&#xff0c;感觉挺有意思&#xff0c;打算放进我的小程序【自动化小助手】里面&#xff0c;“三张押一张&#xff0c;专押花姑娘&#xff01;”&#xff0c;从三张卡牌&#xff0c;挑选一张&#xff0c;中奖后将奖励进行发放&#xff0c;并且创建下一…

Github-Copilot初体验-Pycharm插件的安装与测试

引言&#xff1a; 80%代码秒生成&#xff01;AI神器Copilot大升级 最近copilot又在众多独角兽公司的合力下&#xff0c;取得了重大升级。GitHub Copilot发布还不到两年&#xff0c; 就已经为100多万的开发者&#xff0c;编写了46%的代码&#xff0c;并提高了55%的编码速度。 …

AMEYA详解松下Panasonic HF SSOP 1 Form A AQY PhotoMOS继电器

Panasonic HF SSOP 1 Form A AQY PhotoMOS继电器采用微型SSOP封装&#xff0c;具有600V的负载电压和1500Vrms 的I/O隔离电压 这些继电器具有8Ω的低导通电阻和高速运行的特点&#xff0c;SSOP封装旨在实现高密度安装。Panasonic HF SSOP AQY PhotoMOS继电器适用于从测试和测量设…

【HDFS】Block、BlockInfo、BlockInfoContiguous、BlockInfoStriped的分析记录

本文主要介绍如下内容: 关于几个Block类之间的继承、实现关系;针对文章标题中的每个类,细化到每个成员去注释分析列出、并详细分析BlockInfo抽象类提供的抽象方法、非抽象方法的功能针对几个跟块组织结构的方法再进行分析。moveBlockToHead、listInsert、listRemove等。一、…

从引入并集成多LLM到发布自研模型,RPA与LLM的融合进度怎样了?

RPA厂商对于大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;的应用&#xff0c;比大家想象的还要早一些。 毕竟&#xff0c;2019年兴起的这一波RPA热&#xff0c;背后都是因为AI技术。没有AI技术与RPA的融合&#xff0c;也就没有现在的RPA。 为了全力…

flutter开发实战-旋转loading指示器

flutter开发实战-旋转loading指示器。 一、交织动画 有些时候我们可能会需要一些复杂的动画&#xff0c;这些动画可能由一个动画序列或重叠的动画组成。一个动画组合在不同阶段包含了多种动画&#xff0c;要实现这种效果&#xff0c;需要使用交织动画&#xff08;Stagger Anim…