目录
一、我们应该做哪些准备工作呢?
二、MVC模式代码
三、JSP部分(组件导入的部分)
前言:本文内容有关于的是有网页基础(HTML+Css+Js)jQuery、Oracle、javaweb(servlet)、Map集合、List集合以及网页无刷新技术Ajax、EasyUI等基础知识。
综合性知识较强,属于开发思维。
一、我们应该做哪些准备工作呢?
实现效果:
jQuery EasyUI效果展示
需要安装的:
安装JDK和Eclipse 安装Oracle 安装和配置Tomcat
1.首先编写sql语句(本文我们用的Oracle数据库)
/*权限表(菜单表)*/
--作用:显示菜单(本文中包含:一级菜单、二级菜单)
--创建表
create table tb_promission
(
--唯一的编号
id number primary key,--权限id
text varchar2(100) not null,--权限名称
--一级菜单
pid number not null,--权限父级id
--图标文件的路径
icon varchar2(100),--菜单显示的icon
--jsp界面
url varchar2(100),--权限资源路径
state number,--状态;该记录是否有效1:有效、0:无效
--用于排序
sort number--排序码
)
--提交 作用:由于我们项目在通过Oracle数据库显示数据时,
--由于Oracle数据是在创好项目后面的增加数据或者修改删除数据的时候,可能会导致没有更新数据的情况,这种情况下需要运行commit
commit;
--为表格中插入数据
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(1,'店铺管理',-1,'','',1,1);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(2,'图书分类管理',-1,'','',1,2);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(3,'图书管理',-1,'','',1,3);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(4,'订单管理',-1,'','',1,4);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(5,'系统设置',-1,'','',1,5);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(6,'店铺添加',1,'','/addshop.jsp',1,6);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(7,'店铺列表',1,'','/shopList.jsp',1,7);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(8,'图书分类添加',2,'','/addBookType.jsp',1,8);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(9,'图书分类列表',2,'','/addBookTypeList.jsp',1,9);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(10,'图书添加',3,'','/addBook.jsp',1,10);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(11,'图书列表',3,'','',1,11);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(12,'所有图书',11,'','/BookList.jsp',1,12);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(13,'未上架',11,'','/notAvailableBook.jsp',1,13);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(14,'已上架',11,'','/listedBook.jsp',1,14);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(15,'已下架',11,'','/removedBook.jsp',1,15);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(16,'所有订单',4,'','/orderList.jsp',1,16);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(17,'未付款订单',4,'','/UnpaidOrder.jsp',1,17);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(18,'已付款订单',4,'','/PaidOrder.jsp',1,18);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(19,'未收货订单',4,'','/UnconscionedOrder.jsp',1,19);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(20,'已完成订单',4,'','/DoneOrder.jsp',1,20);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(21,'系统设置',5,'','/SystemSettings.jsp',1,21);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(22,'菜单管理',5,'','/MenuManagement.jsp',1,22);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(23,'权限管理',5,'','/PermissionManagement.jsp',1,23);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(24,'用户管理',5,'','/UserManagement.jsp',1,24);
commit;
commit
--查询权限表所有的内容
select * from tb_promission;
-----------------------------------------------接下来创建书籍表(插入数据)
--创建书籍表
create table tb_book
(
bid number primary key,--书籍id
bname varchar2(100),--书籍名称
bprice number(5,2),--书籍价格
btype varchar2(100)--书籍类型
)
commit;
--插入数据
insert into tb_book(bid,bname,bprice,btype) values (1,'我爱Java',99,'都市');
insert into tb_book(bid,bname,bprice,btype) values (2,'圣墟',55,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (3,'斗罗大陆',29,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (4,'韩湘子传奇',54,'悬疑');
insert into tb_book(bid,bname,bprice,btype) values (5,'带着老婆去打妖',65,'悬疑');
insert into tb_book(bid,bname,bprice,btype) values (6,'豪门联姻之夫来收妖',123,'言情');
insert into tb_book(bid,bname,bprice,btype) values (7,'深宫有朵黑莲花',54,'言情');
insert into tb_book(bid,bname,bprice,btype) values (8,'武动乾坤',229,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (9,'金瓶梅',33,'历史');
insert into tb_book(bid,bname,bprice,btype) values (10,'我在亮剑当战狼',33,'军事');
insert into tb_book(bid,bname,bprice,btype) values (11,'菁华记之千山暮雪',33,'武侠');
insert into tb_book(bid,bname,bprice,btype) values (12,'江湖传奇传',44,'武侠');
insert into tb_book(bid,bname,bprice,btype) values (13,'大秦:不装了,你爹我是秦始皇',33,'历史');
insert into tb_book(bid,bname,bprice,btype) values (14,'西游记',33,'历史');
insert into tb_book(bid,bname,bprice,btype) values (15,'神墓',259,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (16,'我的26岁女房客',99,'都市');
insert into tb_book(bid,bname,bprice,btype) values (17,'我的校花贴身高手',12,'都市');
insert into tb_book(bid,bname,bprice,btype) values (18,'坏蛋是怎样炼成的',29,'都市');
insert into tb_book(bid,bname,bprice,btype) values (19,'很纯很暧昧',2,'都市');
insert into tb_book(bid,bname,bprice,btype) values (20,'领家有女初长成',23,'都市');
insert into tb_book(bid,bname,bprice,btype) values (21,'最强弃少',88,'都市');
insert into tb_book(bid,bname,bprice,btype) values (22,'邪气凌然',219,'都市');
insert into tb_book(bid,bname,bprice,btype) values (23,'黄金瞳',265,'都市');
insert into tb_book(bid,bname,bprice,btype) values (24,'天才相师',65,'都市');
insert into tb_book(bid,bname,bprice,btype) values (25,'陈二狗的妖孽人生',63,'都市');
insert into tb_book(bid,bname,bprice,btype) values (26,'都市奇妖谈',93,'都市');
insert into tb_book(bid,bname,bprice,btype) values (27,'白狐天下',54,'都市');
insert into tb_book(bid,bname,bprice,btype) values (28,'都市圣医',18,'都市');
insert into tb_book(bid,bname,bprice,btype) values (29,'家里养个狐狸精',438,'都市');
insert into tb_book(bid,bname,bprice,btype) values (30,'神龙至尊',22,'都市');
insert into tb_book(bid,bname,bprice,btype) values (31,'我的28岁女房东',432,'都市');
insert into tb_book(bid,bname,bprice,btype) values (32,'最强狂兵',11,'都市');
insert into tb_book(bid,bname,bprice,btype) values (33,'道诡异仙',22.99,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (34,'万古神帝',19,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (35,'万相之王',16,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (36,'最初进化',22,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (37,'核动力剑仙',33,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (38,'斗破苍穹',55,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (39,'烛龙以左',90,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (40,'遮天',1,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (41,'人族镇守使',33,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (42,'一世之尊',55,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (43,'长夜余火',229,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (44,'完美世界',5,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (45,'十方武圣',7,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (46,'神印王座',89,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (47,'牧神记',88,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (48,'奥术神座',123,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (49,'儒道至圣',45,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (50,'极品老公太难缠',54,'言情');
insert into tb_book(bid,bname,bprice,btype) values (51,'这个道士不好惹',54,'悬疑');
insert into tb_book(bid,bname,bprice,btype) values (52,'食梦貘手记',22,'悬疑');
insert into tb_book(bid,bname,bprice,btype) values (53,'修仙玩家',65,'武侠');
insert into tb_book(bid,bname,bprice,btype) values (54,'春秋煮酒',22,'武侠');
insert into tb_book(bid,bname,bprice,btype) values (55,'绝世仙缘',55,'武侠');
insert into tb_book(bid,bname,bprice,btype) values (56,'我的谍战岁月',55,'军事');
insert into tb_book(bid,bname,bprice,btype) values (57,'三国演义',33,'历史');
insert into tb_book(bid,bname,bprice,btype) values (58,'水浒传',33,'历史');
insert into tb_book(bid,bname,bprice,btype) values (59,'红楼梦',33,'历史');
insert into tb_book(bid,bname,bprice,btype) values (60,'凡人修仙传',33,'玄幻');
insert into tb_book(bid,bname,bprice,btype) values (61,'女总裁的贴身兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (62,'逍遥兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (63,'近身兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (64,'最强兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (65,'至尊兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (66,'美女总裁的特种兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (67,'御用兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (68,'超强兵王在都市',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (69,'医武兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (70,'绝世兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (71,'特种兵王在都市',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (72,'超级兵王在都市',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (73,'超级兵王的美女军团',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (74,'抗战之最强兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (75,'桃运兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (76,'山村透视兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (77,'特种兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (78,'龙牙兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (79,'特种兵王在山村',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (80,'功夫兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (81,'超级兵王俏总裁',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (82,'校花的贴身兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (83,'女神的布衣兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (84,'校花的透视兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (85,'贴身兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (86,'兵王之王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (87,'妖孽兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (88,'超级兵王在校园',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (89,'邪气兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (90,'火爆兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (91,'超品兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (92,'都市之无敌兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (93,'抗日之兵王传说',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (94,'水浒之特种兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (95,'护花兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (96,'至强兵王',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (97,'万族之劫',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (98,'明天下',33,'都市');
insert into tb_book(bid,bname,bprice,btype) values (99,'逆天邪神',33,'都市');
由于一整个项目完成代码较多,所以给大家展示书籍模块所使用的技术与操作,当然,当我们学会了这个模块,其它的也可以按照一样的模式来做。
当我们创建表插入数据,并且提交之后。
2.打开Eclipse,进行我们创建一个JavaWeb项目(EasyUi)在src中创建以下包 utils、entity、dao、dao.impl、biz、biz.impl、servlet(MVC模式)
我们先编写MVC架构模式:
在编写 MVC 模式我们需要导入一下 jar 包
我们需要导入
① JSON工具包(fastJSON)目的:用于转换格式(使用Ajax)
② Oracle工具包 目的:用于JavaWeb项目中与数据库的交互
需要到 Oracle 官方网站去下载。
像以上的 jar 包,大家都可以在浏览器搜索找到官方网站下载
当我们已经导入以上 jar 包之后,我们就可以编写MVC模式了。
二、MVC模式代码
2.1 util包 (数据库帮助包)
① DBHelper(数据库帮助类,用于连接数据库) java类(DBHelper.java)
//包的路径 关键词 package:包
package com.java.easyui.utils;
//导包部分 关键词 import:导入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* 数据库帮助实现类
*
* @author Administrator
*
*/
public class DBHelper {
// 加载驱动
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接对象
*
* @return con 连接对象
*/
public static Connection getCon() {
Connection con = null;
try {
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123");
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
/**
* 关闭服务
*
* @param con
* 连接对象
* @param ps
* 执行对象
* @param rs
* 结果集对象
*/
public static void myClose(Connection con, PreparedStatement ps, ResultSet rs) {
try {
if (null != rs) {
rs.close();
}
if (null != ps) {
ps.close();
}
if (null != con && !con.isClosed()) {
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
②BaseDao(通用增删改查方法类) java类(BaseDao.java)
package com.java.easyui.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.List;
import com.java.easyui.entity.Promission;
public class BaseDao {
//数据库对象
protected Connection con = null;
protected PreparedStatement ps = null;
protected ResultSet rs = null;
//影响行数
protected int n;
//实体对象
protected Promission promission = null;
//实体对象集合
protected List
//表格总记录数
protected int count;
/**
* 通用增删改方法
* @param sql sql语句
* @param obj 传入的可变参数(可有可无)
* @return n 影响的行数
*/
public int executeUpdate(String sql, Object...obj) {
con = DBHelper.getCon();
try {
ps = con.prepareStatement(sql);
if(null != obj) {
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1, obj[i]);
}
}
n = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
return n;
}
/**
* 通用查询
* @param sql sql语句
* @param obj 可变参数
* @return rs 结果集对象
*/
public ResultSet executeQuery(String sql, Object...obj) {
con = DBHelper.getCon();
try {
ps = con.prepareStatement(sql);
if(null != obj) {
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1, obj[i]);
}
}
rs = ps.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
/**
* 获取表格的记录数
* @param tableName 表格名
* @param colName 表字段
* @param strName 关键词
* @return count 影响的行数
*/
public int getTableCount(String tableName, String colName, String strName) {
String sql = "select count(*) from "+tableName+" where "+colName+" like '%"+strName+"%'";
//通过此种方式可以直接跳过ps执行对象,前提是要保证sql语句语句中没有占位符
rs = this.executeQuery(sql);
try {
if(rs.next()) {
count = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return count;
}
public static void main(String[] args) {
//测试代码是否能够成功执行
int a = new BaseDao().getTableCount("tb_goods", "gname", "mp3");
System.out.println(a);
}
}
2.2 entity(实体包) 作用:实体MVC模式与数据库交流的桥梁
注意:实体类的所有属性最好与数据库定义的字段一致,并且数据类型要对应。
①Promission(菜单类) java类(class)(Promission.java)
package com.java.easyui.entity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 权限类(类/对象)
* @author Administrator
*实现Serializable接口(目的:唯一,标识)(标准格式)
*/
public class Promission implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;//权限id
private String text;//权限名称
private Integer pid;//权限父级id
private String icon;//菜单显示的icon
private String url;//权限资源路径
private Integer state;//状态;该记录是否有效1:有效、0:无效
private Integer sort;//排序码
//用来保存子节点(建立两张表的联系)
private List
/**
* 无参数构造方法
*/
public Promission() {
}
/**
* 少集合全参数构造方法
* @param id
* @param text
* @param pid
* @param icon
* @param url
* @param state
* @param sort
*/
public Promission(Integer id, String text, Integer pid, String icon, String url, Integer state, Integer sort) {
super();
this.id = id;
this.text = text;
this.pid = pid;
this.icon = icon;
this.url = url;
this.state = state;
this.sort = sort;
}
/**
* 少编号全参数构造方法
* @param text
* @param pid
* @param icon
* @param url
* @param state
* @param sort
* @param children
*/
public Promission(String text, Integer pid, String icon, String url, Integer state, Integer sort,
List
super();
this.text = text;
this.pid = pid;
this.icon = icon;
this.url = url;
this.state = state;
this.sort = sort;
this.children = children;
}
/**
* 少编号和集合全参数构造方法
* @param text
* @param pid
* @param icon
* @param url
* @param state
* @param sort
*/
public Promission(String text, Integer pid, String icon, String url, Integer state, Integer sort) {
super();
this.text = text;
this.pid = pid;
this.icon = icon;
this.url = url;
this.state = state;
this.sort = sort;
}
/**
* 全参数构造方法
* @param id
* @param text
* @param pid
* @param icon
* @param url
* @param state
* @param sort
* @param children
*/
public Promission(Integer id, String text, Integer pid, String icon, String url, Integer state, Integer sort,
List
super();
this.id = id;
this.text = text;
this.pid = pid;
this.icon = icon;
this.url = url;
this.state = state;
this.sort = sort;
this.children = children;
}
//get方法(得到私有化属性值)
public Integer getId() {
return id;
}
public String getText() {
return text;
}
public Integer getPid() {
return pid;
}
public String getIcon() {
return icon;
}
public String getUrl() {
return url;
}
public Integer getState() {
return state;
}
public Integer getSort() {
return sort;
}
public List
return children;
}
//set方法(设置私有化属性值)
public void setId(Integer id) {
this.id = id;
}
public void setText(String text) {
this.text = text;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public void setIcon(String icon) {
this.icon = icon;
}
public void setUrl(String url) {
this.url = url;
}
public void setState(Integer state) {
this.state = state;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public void setchildren(List
this.children = children;
}
//toString方法(打印实体对象的所有属性)
@Override
public String toString() {
return "Promission [id=" + id + ", text=" + text + ", pid=" + pid + ", icon=" + icon + ", url=" + url
+ ", state=" + state + ", sort=" + sort + ", children=" + children + "]";
}
}
②Book(书籍部分实体类/二级菜单内容) java类(Book.java)
package com.java.easyui.entity;
import java.io.Serializable;
/**
* 书籍实体类
*
* @author Administrator
*
*/
public class Book implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer bid;// 书籍编号
private String bname;// 书籍名称
private double bprice;// 书籍价格
private String btype;// 书籍类型
public Book() {
// TODO Auto-generated constructor stub
}
public Book(Integer bid, String bname, double bprice, String btype) {
super();
this.bid = bid;
this.bname = bname;
this.bprice = bprice;
this.btype = btype;
}
public Book(String bname, double bprice, String btype) {
super();
this.bname = bname;
this.bprice = bprice;
this.btype = btype;
}
public Integer getBid() {
return bid;
}
public String getBname() {
return bname;
}
public double getBprice() {
return bprice;
}
public String getbtype() {
return btype;
}
public void setBid(Integer bid) {
this.bid = bid;
}
public void setBname(String bname) {
this.bname = bname;
}
public void setBprice(double bprice) {
this.bprice = bprice;
}
public void setbtype(String btype) {
this.btype = btype;
}
@Override
public String toString() {
return "Book [bid=" + bid + ", bname=" + bname + ", bprice=" + bprice + ", btype=" + btype + "]";
}
}
2.3 dao包(方法定义 接口+实现 包)
接口与类的区别:接口(定义方法)(interface) | 类(实现方法、定义对像(class)
接口:命名一般以I开头,接口的方法需要类来定义 实现:implements
①IPromissionDao(权限方法定义接口) java接口(IPromissionDao.java)
package com.java.easyui.dao;
import java.util.List;
import com.java.easyui.entity.Promission;
/**
* 权限方法定义类
*
* @author Administrator
*
*/
public interface IPromissionDao {
/**
* 根据父节点编号进行查询
*
* @param pid
* 父节点编号
* @return list 集合
*/
public List
}
②IBookDao(书籍类方法实现接口) java接口(IBookDao.java)
package com.java.easyui.dao;
import java.util.List;
import com.java.easyui.entity.Book;
/**
* 书籍方法实现接口
*
* @author Administrator
*
*/
public interface IBookDao {
/**
* 增加书籍的方法
*
* @param book
* 书籍实体
*/
void addBook(Book book);
/**
* 删除书籍的方法
*
* @param bid
* 书籍编号
*/
void delBook(int bid);
/**
* 修改书籍的方法
*
* @param bid
* 书籍编号
* @param book
* 书籍实体
*/
void updataBook(int bid, Book book);
/**
* 根据关键词模糊查询获取所有的书籍
*
* @param pageIndex
* 页码
* @param pageSize
* 每页条数
* @param strName
* 关键词
* @return list 集合
*/
List
/**
* 获取表格的总记录数
*
* @param strName
* 关键词
* @return Integer 总记录数
*/
Integer queryBookByCount(String strName);
}
2.4 dao.Impl包(dao方法实现包)
①PromissionDaoImpl(权限方法接口实现类) java类(PromissionDaoImpl.java)
package com.java.easyui.dao.impl;
import java.util.ArrayList;
import java.util.List;
import com.java.easyui.dao.IPromissionDao;
import com.java.easyui.entity.Promission;
import com.java.easyui.utils.BaseDao;
import com.java.easyui.utils.DBHelper;
/**
* 权限类方法定义接口实现类
* @author Administrator
*
*/
public class PromissionDaoImpl extends BaseDao implements IPromissionDao {
@Override
public List
list = new ArrayList
rs = this.executeQuery("select id,text,pid,icon,url,state,sort from tb_promission where pid = ? order by sort asc",new Object[] {
pid
});
try {
while(rs.next()) {
promission = new Promission(rs.getInt(1),rs.getString(2),
rs.getInt(3),rs.getString(4),
rs.getString(5),rs.getInt(6),
rs.getInt(7));
list.add(promission);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return list;
}
public static void main(String[] args) {
//测试
List
for (Promission promission : list) {
System.out.println(promission);
}
}
}
②BookDaoImpl(书籍方法接口实现类) java类(BookDaoImpl.java)
package com.java.easyui.dao.impl;
import java.util.ArrayList;
import java.util.List;
import com.java.easyui.dao.IBookDao;
import com.java.easyui.entity.Book;
import com.java.easyui.utils.BaseDao;
import com.java.easyui.utils.DBHelper;
/**
* 书籍方法接口实现类
* @author Administrator
*
*/
public class BookDaoImpl extends BaseDao implements IBookDao {
private List
private Integer count = 0;
private Book book = new Book();
@Override
public List
Integer start = (pageIndex-1)*pageSize+1;
Integer end = pageIndex*pageSize;
list = new ArrayList
rs = this.executeQuery("select a.* from(select b.*,rownum as rid from (select bid,bname,bprice,btype from tb_book where bname like '%"+strName+"%')b)a where a.rid between "+start+" and "+end+" ");
try {
while(rs.next()) {
book =new Book(rs.getInt(1),rs.getString(2),
rs.getDouble(3),rs.getString(4));
list.add(book);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return list;
}
@Override
public Integer queryBookByCount(String strName) {
rs = this.executeQuery("select count(0) from tb_book where bname like '%"+strName+"%'");
try {
if(rs.next()) {
count = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return count;
}
@Override
public void addBook(Book book) {
con = DBHelper.getCon();
try {
ps = con.prepareStatement("insert into tb_book select nvl(max(bid),0)+1,?,?,? from tb_book");
ps.setString(1, book.getBname());
ps.setDouble(2, book.getBprice());
ps.setString(3, book.getbtype());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
}
@Override
public void delBook(int bid) {
con = DBHelper.getCon();
try {
ps = con.prepareStatement("delete from tb_book where bid = "+bid);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
}
@Override
public void updataBook(int bid, Book book) {
con = DBHelper.getCon();
try {
ps = con.prepareStatement("update tb_book set bname = ?, bprice = ?, btype = ? where bid = "+bid);
//给占位符赋值
ps.setString(1, book.getBname());
ps.setDouble(2, book.getBprice());
ps.setString(3, book.getbtype());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, null);
}
}
public static void main(String[] args) {
// List
// for (Book book : queryBookDim) {
// System.out.println(book);
// }
// Integer n = new BookDaoImpl().queryBookByCount("");
// System.out.println(n);
//new BookDaoImpl().addBook(new Book("范德萨",32,"的覅万"));
}
}
2.5 biz包 (业务逻辑层)
①IPromissionBiz(权限方法定义接口) java接口(IPromissionBiz.java)
package com.java.easyui.biz;
import java.util.List;
import com.java.easyui.entity.Promission;
/**
* 权限方法定义类
*
* @author Administrator
*
*/
public interface IPromissionBiz {
/**
* 根据父节点编号进行查询
*
* @param pid
* 父节点编号
* @return list 集合
*/
public List
}
②IBookBiz(书籍类方法实现接口) java接口(IBookDao.java)
package com.java.easyui.biz;
import java.util.List;
import com.java.easyui.entity.Book;
/**
* 书籍方法实现接口
*
* @author Administrator
*
*/
public interface IBookBiz {
/**
* 增加书籍的方法
*
* @param book
* 书籍实体
*/
void addBook(Book book);
/**
* 删除书籍的方法
*
* @param bid
*/
void delBook(int bid);
/**
* 修改书籍的方法
*
* @param bid
* 书籍编号
* @param book
* 书籍实体
*/
void updataBook(int bid, Book book);
/**
* 根据关键词模糊查询获取所有的书籍
*
* @param pageIndex
* 页码
* @param pageSize
* 每页条数
* @param strName
* 关键词
* @return list 集合
*/
List
/**
* 获取表格的总记录数
*
* @param strName
* 关键词
* @return Integer 总记录数
*/
Integer queryBookByCount(String strName);
}
2.6 biz.impl包(biz方法实现接口)
①PromissionBizImpl(权限方法接口实现类) java类(PromissionBizImpl.java)
package com.java.easyui.biz.impl;
import java.util.List;
import com.java.easyui.biz.IPromissionBiz;
import com.java.easyui.dao.IPromissionDao;
import com.java.easyui.dao.impl.PromissionDaoImpl;
import com.java.easyui.entity.Promission;
/**
* 权限类的业务逻辑层
* @author Administrator
*
*/
public class PromissionBizImpl implements IPromissionBiz {
//示例化dao层
IPromissionDao ipd = new PromissionDaoImpl();
@Override
public List
//拿到所有的一级菜单
List
//进行遍历
for (Promission promission : list) {
//进行内容上的显示(排除掉非一级菜单)
if(promission.getUrl() == null || "".equals(promission.getUrl().trim())) {
//将二级菜单的内容添加
//System.out.println(ipd.queryPromissionByPid(promission.getId()));
promission.setchildren(queryPromissionByPid(promission.getId()));
}
}
return list;
}
public static void main(String[] args) {
//List
/*System.out.println(list);
for (Promission promission : list) {
System.out.println(promission);
}*/
}
}
②BookBizImpl(书籍方法接口实现类) java类(BookBizImpl.java)
package com.java.easyui.biz.impl;
import java.util.List;
import com.java.easyui.biz.IBookBiz;
import com.java.easyui.dao.IBookDao;
import com.java.easyui.dao.impl.BookDaoImpl;
import com.java.easyui.entity.Book;
import com.java.easyui.utils.BaseDao;
import com.java.easyui.utils.DBHelper;
/**
* 书籍类的业务逻辑层
* @author Administrator
*
*/
public class BookBizImpl extends BaseDao implements IBookBiz {
//实例化dao层
IBookDao ibd = new BookDaoImpl();
@Override
public List
// TODO Auto-generated method stub
return ibd.queryBookDim(pageIndex, pageSize, strName);
}
@Override
public Integer queryBookByCount(String strName) {
// TODO Auto-generated method stub
return ibd.queryBookByCount(strName);
}
@Override
public void addBook(Book book) {
ibd.addBook(book);
}
@Override
public void delBook(int bid) {
ibd.delBook(bid);
}
@Override
public void updataBook(int bid, Book book) {
ibd.updataBook(bid, book);
}
}
2.7 servlet包 (拿到数据,将数据反馈给客户端)
①PromissionServelt(拿到所有的菜单) servlet
package com.java.easyui.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.java.easyui.biz.IPromissionBiz;
import com.java.easyui.biz.impl.PromissionBizImpl;
import com.java.easyui.entity.Promission;
/**
* 拿到所有的菜单
* @author Administrator
*
*/
@WebServlet("/promissionServelt.do")//servlet注释配置
public class PromissionServelt extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
//获取内容
//String id = request.getParameter("pid");
int pid = -1;
//判断非空
// if(null!=id) {
// pid = Integer.parseInt(id);
// }
//一级菜单
IPromissionBiz ipb = new PromissionBizImpl();
List
//进行格式的转换
ObjectMapper mapper = new ObjectMapper();
String promissionList = mapper.writeValueAsString(list);
//获取out对象,利用out对象进行传输
PrintWriter out = response.getWriter();
out.write(promissionList);
//刷新
out.flush();
//关闭
out.close();
}
}
②BookListServlet(实现书籍分页显示数据效果)
package com.java.easyui.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.java.easyui.biz.IBookBiz;
import com.java.easyui.biz.impl.BookBizImpl;
import com.java.easyui.entity.Book;
/**
* 实现书籍分页显示数据效果
* @author Administrator
*
*/
@WebServlet("/bookList.do")
public class BookListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
//2.获取信息
//页码(开始默认为1)
Integer pageIndex = 1;
//用户点击了上下页
String pIndex = request.getParameter("page");//不能随便写,EasyUI已经定义好了
//非空判断
if(null!=pIndex) {
//重新给页码赋值
pageIndex = Integer.parseInt(pIndex);
}
//条数
Integer pageSize = 10;
String pSize = request.getParameter("rows");//不能随便写,EasyUI已经定义好了
//判断
if(null!=pSize) {
pageSize = Integer.parseInt(pSize);
}
//搜索内容
String searchName = request.getParameter("searchName");
System.out.println(searchName);
//非空判断
if(null==searchName) {
searchName = "";
}
//3.调用biz层的方法
IBookBiz ibb = new BookBizImpl();
//条数
Integer total = ibb.queryBookByCount(searchName);
//System.out.println(total);
//获取所有的书籍信息
List
//System.out.println(list);
//将以上内容保存到map集合中
Map
//"total":7,"rows":
maps.put("total", total);
maps.put("rows", list);
//把maps转换成JSON格式内容
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(maps);
//实例化out对象
PrintWriter out = response.getWriter();
//将字符串map集合传入进去
out.write(writeValueAsString);
//刷新
out.flush();
//关闭
out.close();
}
}
③ DelBookServlet(删除指定的书籍)
package com.java.easyui.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.java.easyui.biz.IBookBiz;
import com.java.easyui.biz.impl.BookBizImpl;
import com.java.easyui.entity.Book;
/**
* 删除书籍的servlet
* @author Administrator
*
*/
@WebServlet("/delBook.do")//配置
public class DelBookServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
//2.获取信息
Integer bid = request.getParameter("bid")!=null? Integer.parseInt(request.getParameter("bid")):0;
//3.调用biz层的删除方法
IBookBiz ibb = new BookBizImpl();
//定一个一个maps集合保存结果
Map
try {
//可能出现异常
ibb.delBook(bid);
//给出反馈
maps.put("success",true);
} catch (Exception e) {
maps.put("success",false);
}
//4.将内容转换String格式,在使用out对象传入
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(maps);
//删除内容到map集合中
PrintWriter out = response.getWriter();
out.write(writeValueAsString);
//刷新流
out.flush();
//关闭流
out.close();
}
}
④EditAddBookServlet(增删改一体化servlet(节省资源))
package com.java.easyui.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.java.easyui.biz.IBookBiz;
import com.java.easyui.biz.impl.BookBizImpl;
import com.java.easyui.entity.Book;
/**
* 增加修改一体化servlet
*
* @author Administrator
*
*/
@WebServlet("/editaddBook.do") // 配置
public class EditAddBookServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.设置编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
// 书籍名称
String bname = request.getParameter("bname");
// System.out.println(bname);
// 书籍价格
Double bprice = Double.valueOf(request.getParameter("bprice"));
// System.out.println(bprice);
// 书籍类型
String btype = request.getParameter("btype");
// System.out.println(btype);
// 2.将内容封装到实体中去
Book book = new Book(bname, bprice, btype);
// 2.获取信息
// 根据不同类型调用不同biz层的增加方法或删除方法
IBookBiz ibb = new BookBizImpl();
// 定一个一个maps集合保存结果
Map
// 获取类型进行相对应的判断
String type = request.getParameter("type");
if (type.equals("edit")) {
//获取编号
Integer bid = request.getParameter("bid")!=null? Integer.parseInt(request.getParameter("bid")):0;
try {
// 可能出现异常
ibb.updataBook(bid, book);
// 给出反馈
maps.put("success", true);
} catch (Exception e) {
maps.put("success", false);
}
} else if (type.equals("add")) {
try {
// 可能出现异常
ibb.addBook(book);
// 给出反馈
maps.put("success", true);
} catch (Exception e) {
maps.put("success", false);
}
}
// 5.将内容转换String格式,在使用out对象传入
ObjectMapper mapper = new ObjectMapper();
String writeValueAsString = mapper.writeValueAsString(maps);
// 增加内容到map集合中
PrintWriter out = response.getWriter();
out.write(writeValueAsString);
// 刷新流
out.flush();
// 关闭流
out.close();
}
}
三、JSP部分(组件导入的部分)
实现完了以上的步骤,我们进行下一步
创这么多文件夹得目的:项目的规范。
因为我们需要使用EasyUI技术完成该项目,所以必须导入相对应的组件(jquery-easyui),可以从EasyUI官网: https://www.jeasyui.net/plugins 上下载您需要的 jQuery EasyUI 版本。
如果不会弄得话,可观看如下文章的组件下载部分https://blog.csdn.net/m0_60786924/article/details/124580379?spm=1001.2014.3001.5501
1.下载进行解压,解压完毕后,将 下载好的 Jquery EasyUI 组件 复制到我们已经创建好的文件夹js中,当我们已经完成了这些。
2.在common 编写一个公共导入JQuery EasyUI 组件的 NewFile1.jsp 页面 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
href="static/js/jquery-easyui-1.5.5.2/themes/icon.css" charset="UTF-8" />
let xPath = "${pageContext.request.servletContext.contextPath}";
3.在WebContent文件夹下方编写 (如果有不理解的可以参考官方:EasyUI 文档,亦或者上方博客内容)
①NewFile.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- <%@ include file="static/common/NewFile1.jsp" %> --%>
<%@ include file="static/common/NewFile1.jsp" %>
$(function(){
//console.log(xPath);
});
欢迎来到:AJF商城!
©©所有版权归《余生所爱公司》所有! 仿冒必究!本条消息来源于@3302059064qq.com
//加载函数
$(function(){
$('#menuTree').tree({
url: xPath+"/promissionServelt.do",
//设置点击事件
onClick:function(node){//node指的是节点对象(JSON文件中的对象)
//console.log(node);
addMyTabs(node);
}
});
//封住新增选项卡的方法
function addMyTabs(node){
//当单击一级菜单无选项卡出现(通过id)
//console.log(node.id);
if(node.id === '1'){
return;
}
//解决问题:重复的选项卡
//通过exists判断选项是否存在
let flag = $("#myTabs").tabs('exists',node.text);
//console.log(flag);
if(flag){
//当存在第二次点击的情况的就直接进行选中
$("#myTabs").tabs('select',node.text);
return;
}
$('#myTabs').tabs('add',{
title:node.text, //选项卡标题
content:"
closable:true //选项卡能否关闭
});
}
});
②BookList.jsp
<%@page import="com.fasterxml.jackson.annotation.JsonInclude.Include"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="static/common/NewFile1.jsp" %>
//jQuery的入口函数
$(function(){
$('#bookListID').datagrid({
//servlet界面
url:xPath+'/bookList.do',
//表格标题
columns:[[
{field:'bid',title:'书籍编号',width:'25%',align:'center'},
{field:'bname',title:'书籍名称',width:'25%',align:'center'},
{field:'bprice',title:'书籍价格',width:'25%',align:'center'},
{field:'btype',title:'书籍类型',width:'25%',align:'center'}
]],
//表格中分页工具显示
pagination:true,
//分页下拉框显示的条数
pageList:[10,30,50,60,90],
//发送请求时携带的参数
queryParams: {
searchName: $("#strName").val()
},
//调整图标组建的方位
toolbar: '#tb',
//设置每一次选中行时,只能选中一个
singleSelect:true
});
//模糊查询的点击事件
$("#bookQry").click(function(){
//alert(123);
mydemo();
});
//默认调方法
mydemo();
//封装一个方法实现自动加载第一页的所有行
function mydemo(){
$("#bookListID").datagrid('load',{
searchName: $("#strName").val()
});
}
let type = "";
let mytitle = "";
let determine = "";
let row;
function editaddbullet(type,row){
if(type === 'edit'){
mytitle="修改界面";
determine = "修改";
}else{
mytitle="增加界面";
determine = "增加";
}
$('#bookDialog').dialog({
title: mytitle,
width: 400,
height: 255,
closed: false,
cache: false,
href: xPath+'/editBook.jsp',
modal: true,
buttons:[{
text:'保存',
handler:function(){
//alert('保存')
//获取表单中的数据,调用方法, 传递到servlet中
$.ajax({
url:xPath+"/editaddBook.do?type="+type,
//参数传递,jQuery选择器传递
data:$("#bookForm").serialize(),
datatype:"JSON",
success:function(data){
//alert(data);
if(data.success){
//给出提示
$.messager.alert('消息',determine+'成功');
//进行关闭
$("#bookDialog").dialog('close');
//增加成功进行刷新
mydemo();
}else{
$.messager.alert('消息',determine+'失败');
}
}
});
}
},{
text:'关闭',
handler:function(){
//alert('关闭')
//调用关闭弹窗的方法 //参数方法来源于panpal
$("#bookDialog").dialog('close');
}
}],
//点击事件弹出Dialog窗口触发的是加载事件
onLoad:function(){
if(row){
//alert("触发了");
//清空
$("#bookForm").form("reset");
//加载
$("#bookForm").form("load",row);
}
}
});
}
//为设置点击事件
$("#addBookId").click(function(){
//alert(123);
type = 'add'
//调用Dialag弹窗
editaddbullet(type);
});
//删除的点击事件
$("#delBookId").click(function(){
//判断行是否选中
let row = $("#bookListID").datagrid("getSelected");
//判断非空
if(!row){
//给出提示
$.messager.alert('消息','请选中行在操作');
return;
}
//假设没有非空
//调用删除的servlet,使用post
$.post(xPath+"/delBook.do",{"bid":row.bid},
function(data){
//alert(data);
if(data){
//给出提示
$.messager.alert('消息','删除成功');
//更新数据
mydemo();
}else{
//给出提示
$.messager.alert('消息','删除失败');
}
});
});
//修改的点击事件
$("#editBookId").click(function(){
//判断行是否选中
let row = $("#bookListID").datagrid("getSelected");
//判断非空
if(!row){
//给出提示
$.messager.alert('消息','请选中行在操作');
return;
}
console.log(row);
//判断条件
type = 'edit';
//调用弹窗
editaddbullet(type,row);
});
});
③editBook.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="static/common/NewFile1.jsp" %>
当我们完成了以上全部步骤,我们就可以直接运行 NewFile.jsp 界面,看到效果了。
后言:
以上内容为显示的效果图,本文章实现增删改查,分页效果、选项卡、列表等等,本文章只实现了单个图书区域,如需要完善其它的版块,大家可以根据这种模式继续完善。
相关文章
发表评论