自定义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;}@Overridepublic 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;@Overridepublic 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>() {@Overridepublic 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;}});}@Overridepublic 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);}}@Overridepublic 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;}@Testpublic 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);}@Testpublic 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();@Overridepublic List<Book> getBooks(Book book,PageBean pageBean) {return dao.getBooks(book, pageBean);}@Overridepublic void addBook(Book book) {dao.addBook(book);}@Overridepublic 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();@Overridepublic 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 actionpath CDATA #REQUIREDtype CDATA #REQUIRED><!ATTLIST forwardname CDATA #REQUIREDpath CDATA #REQUIREDredirect (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 taglibPUBLIC "-//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 注意架包 我是已经打包好的

相关文章:
自定义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 注意架包 我是已经打包好的 mymv…...
RabbitMQ 教程 | 第2章 RabbitMQ 入门
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...
双网卡如何配置DNS?我是一个仅主机模式配置静态(static)IP、一个NET或桥接(dhcp获取)
目录 一、所有主机初始化 二、135、136服务器,部署DNS调度服务器 1、更改主机主从DNS服务器的主机名称 2、安装bind软件、修改主配置文件 3、修改区域配置文件 4、修改数据文件 5、启动named服务、修改网卡信息 6、解析 7、双网卡的话记得注释以下内容、注…...
Android10: 动态隐藏导航栏和状态栏总结
(1)全屏相关设置 //(1)主题添加 <item name"android:windowFullscreen">true</item>//(2)setContentView之前添加 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCRE…...
roop 视频换脸
roop: one click face swap. 只用一张人脸图片,就能完成视频换脸。 项目地址: https://github.com/s0md3v/roopColab 部署: https://github.com/dream80/roop_colab 本文是本地部署的实践记录。 环境基础 OS: Ubuntu 22.04.2 LTSKernel: 5…...
Java类集框架(一)
目录 1.Collection集合接口 2.List 接口 (常用子类 ArrayList ,LinkedList,Vector) 3.Set 集合 接口(常用子类 HashSet LinkedHashSet,TreeSet) 4.集合输出(iterator , Enumeration) 1.Collection集合接口 Collection是集合中最大父接口,在接口中定义了核心的…...
Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统项目源码附带视频指导运行教程
由jspssh(springstruts2mysql)实现的企业物资信息管理系统,系统功能比较简单,实现了基本的管理员、操作员等用户管理、物品分类管理、物品管理、入库管理、出库管理、库存预警、客户管理、供应商管理等基本功能需要的可以联系我分…...
【Spring】深究SpringBoot自动装配原理
文章目录 前言1、main入口2、SpringBootApplication3、EnableAutoConfiguration4、AutoConfigurationImportSelector4.1、selectImports()4.2、getAutoConfigurationEntry()4.3、getCandidateConfigurations()4.4、loadFactoryNames() 5、META-INF/spring.factories6、总结 前言…...
阿里云负载均衡SLB网络型NLB负载均衡架构性能详解
阿里云网络型负载均衡NLB是阿里云推出的新一代四层负载均衡,支持超高性能和自动弹性能力,单实例可以达到1亿并发连接,帮您轻松应对高并发业务。网络型负载均衡NLB具有超强性能、自动弹性伸缩、高可用、TCPSSL卸载、多场景流量分发和丰富的高级…...
JavaScript学习 -- SM4算法应用实例
SM4算法,也被称为国密算法,是中国公布的一种高效且安全的对称加密算法。在JavaScript中,我们可以通过使用CryptoJS库来实现SM4算法的加密和解密。本篇博客将为您介绍如何在JavaScript中使用SM4算法,并提供一个实际的案例。 首先&…...
【JVM】什么是双亲委派机制
文章目录 1、类加载机制2、双亲委派模型2.1、介绍2.2、为什么需要双亲委派2.3、源码解析 3、破坏双亲委派3.1、介绍3.2、破坏实现3.3、破坏双亲委派的例子 4、线程上下文类加载器 1、类加载机制 类加载阶段分为加载、连接、初始化三个阶段,而加载阶段需要通过类的全…...
网络安全 Day24-select高级用法和多表连接
select高级用法和多表连接 1. select 多子句单表高级实践1.1 select 多子句高级语法1.2 聚合函数1.3 group by 实践1.4 having 筛选1.5 order by 排序1.6 limit 2. 多表连接 1. select 多子句单表高级实践 1.1 select 多子句高级语法 where 和 having 区别是后者是分组后进行…...
JUC并发编程之volatile详解
目录 1. volatile 1.1 volatile关键字的作用 1.1.1 变量可见性 1.1.2 禁止指令重排序 1.2 volatile可见性案例 1.3 volatile非原子性案例 1.4 volatile 禁止重排序 1.5 volatile 日常使用场景 送书活动 1. volatile 在并发编程中,多线程操作共享的变量时&a…...
swing布局详解
1. 布局管理器接口 (1)说明 布局管理器接口为LayoutManager和LayoutManager2,LayoutManager2是LayoutManager的子类。 (2)常用方法 方法描述LayoutManageraddLayoutComponent(String name, Component comp) removeL…...
el-table某一列嵌套使用el-popover,使用click触发,导致页面下拉框组件无法触发弹框关闭(解决办法)
在弹框触发的方法里加上document.body.click() 即可 尝试了很多其他的方法都没用,只有这个解决了 完整代码: <el-select change"sourceChange" clearable ><el-optionv-for"option in list1":key"option.code":…...
正泰电力携手图扑:VR 变电站事故追忆反演
VR(Virtual Reality,虚拟现实)技术作为近年来快速发展的一项新技术,具有广泛的应用前景,支持融合人工智能、机器学习、大数据等技术,实现更加智能化、个性化的应用。在电力能源领域,VR 技术在高性能计算机和专有设备支…...
报错 -bash: wget: command not found
1、报错 -bash: wget: command not found 可以重装 wget 工具: 卸载 wget 工具 yum remove wget下载 wget 工具 yum -y install wget最后尝试 wget “url” 又OK了,一般是原来的wget初始化有文件损坏造成的。...
HashMap扩容和Redis中Dict 扩容
扩容时机: Hash Map:要在某个临界点进行扩容处理,该临界点就是HashMap中元素的数量在数值上等于threshold(table数组长度*加载因子) Dict: 当每次新增键值对的时 , 会检测 负载因子(LoadFactor) , 判断以…...
【Redis】内存数据库Redis进阶(Redis持久化)
目录 分布式缓存 Redis 四大问题Redis 持久化RDB (Redis DataBase)RDB执行时机RDB启动方式——save指令save指令相关配置save指令工作原理save配置自动执行 RDB启动方式——bgsave指令bgsave指令相关配置bgsave指令工作原理 RDB三种启动方式对比RDB特殊启动形式RDB优点与缺点 A…...
在PHP8中检测数据类型-PHP8知识详解
在PHP 8中,可以使用多种方法来检测数据类型。以下是常用的四种方法:使用 gettype() 函数、使用 is_* 系列函数、使用 get_debug_type() 函数、使用 get_class() 函数。 一、使用 gettype() 函数 gettype() 函数返回给定变量的数据类型。例如:…...
5个简单步骤掌握GanttProject:免费开源的项目管理工具终极指南
5个简单步骤掌握GanttProject:免费开源的项目管理工具终极指南 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject GanttProject是一款功能强大的免费开源项目管理软件,…...
抖音批量下载神器:douyin-downloader开源工具完整使用指南
抖音批量下载神器:douyin-downloader开源工具完整使用指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...
RWKV vs Llama2:在论文审稿任务上,我们为什么第一版选了它?(附长上下文模型选型避坑指南)
RWKV与Llama2在论文审稿任务中的技术选型思考 当面对论文审稿这一知识密集型任务时,模型选型往往成为项目成败的关键。2023年第三季度,我们在构建首个论文审稿GPT系统时,曾在RWKV与Llama2之间面临艰难抉择。本文将深入剖析两种架构的核心差异…...
5分钟上手TegraRcmGUI:Windows平台最简单的Switch注入工具终极指南
5分钟上手TegraRcmGUI:Windows平台最简单的Switch注入工具终极指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是专为Nintendo S…...
蓝牙、Wi-Fi、5G、NB-IoT四大无线技术核心差异与选型指南
1. 无线通信技术全景概览:从身边到万物每天一睁眼,我们就被各种看不见的“波”包围着。手机自动连上家里的Wi-Fi,耳机里传来蓝牙音箱的音乐,出门后手机信号满格,甚至街边的智能路灯、家里的智能电表,都在悄…...
Perplexity词组搭配查询深度解析(工业级语料验证版):基于127万条真实英文语境的搭配强度阈值模型首次公开
更多请点击: https://codechina.net 第一章:Perplexity词组搭配查询深度解析(工业级语料验证版):基于127万条真实英文语境的搭配强度阈值模型首次公开 Perplexity 不仅是语言模型评估的核心指标,更可转化为…...
大模型上下文窗口管理技巧:突破长度限制的艺术
大模型上下文窗口管理技巧:突破长度限制的艺术 前言 大模型的上下文窗口(Context Window)是指模型能够处理的最大输入长度。目前主流模型的上下文窗口从 4K 到 128K 不等,GPT-4 Turbo 甚至达到了 128K tokens。然而,随…...
千川素材外包月烧3万,转易元AI自产省70%成本,跑量还更猛——真实账单对比
很多商家做千川投放时,最开始以为最贵的是投流预算,后来才发现,真正长期烧钱的其实是素材。计划每天要新视频,爆款跑起来要裂变,素材疲劳了要补货,全域推广还要不同场景、不同卖点、不同人群的素材矩阵。外…...
【设计模式 10】抽象工厂:整体换季
这一课讲抽象工厂模式。什么在变:整个产品族要一起换,不能一个一个换。怎么挡:定义完整的体系标准,切换等于整个体系一起换。 凌晨三点四十七分,林衍站在婴儿床边,觉得自己在打一场没有作战方案的仗。 小家…...
Windows 11/10下VMware Workstation 17开机自启虚拟机完整配置流程(含权限修复与延迟启动设置)
Windows 11/10下VMware Workstation 17虚拟机开机自启全攻略 每次重启开发机都要手动启动一堆虚拟机?数据库服务、测试环境、持续集成节点需要724小时待命?VMware Workstation 17的自动启动功能能让你彻底告别重复劳动。作为在本地搭建服务环境的开发者&…...
