时间:2023-08-30 01:06:01 | 来源:网站运营
时间:2023-08-30 01:06:01 来源:网站运营
大数据从入门到深入:JavaEE 之 动态网页开发基础 JSP实战优化:使用分层技术处理业务:import java.io.File;/** * 自动创建包工具类 * @author My * */public class AutoCreatePackage { /** * 自动创建包 * * @param args */ public static void main(String[] args) { // 获取src目录 String srcdir = System.getProperty("user.dir") + "//src"; // 创建com包 File file = new File(srcdir + "//com"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy包 file = new File(srcdir + "//com//hnxy"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy.entity file = new File(srcdir + "//com//hnxy//entity"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy.utils file = new File(srcdir + "//com//hnxy//utils"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy.dao file = new File(srcdir + "//com//hnxy//dao"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy.service file = new File(srcdir + "//com//hnxy//service"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy.web file = new File(srcdir + "//com//hnxy//web"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy.dao.impl file = new File(srcdir + "//com//hnxy//dao//impl"); // 判断 if (!file.exists()) { file.mkdir(); } // 创建com.hnxy.service.impl file = new File(srcdir + "//com//hnxy//service//impl"); // 判断 if (!file.exists()) { file.mkdir(); } System.out.println("所有包创建完毕,请选中src包按F5键!"); }}
有的同学会问没有放在默认包下的话就会出现下面的报错package com.hnxy.dao;import java.util.List;import com.hnxy.entity.Person;/** * 人员表的数据库操作接口 意义 定义我们现在的思想 * @author My * */public interface PersonDAO { /** * 添加方法 * @param person 要添加的对象 * @return 返回1 代表添加成功 返回0 代表添加失败 * @throws Exception 声明一个我也不知道会报什么错的异常 */ public int insertPerson(Person person)throws Exception; /** * 更新方法 * @param person 要更新的对象 * @return 返回1 代表更新成功 返回0 代表更新失败 * @throws Exception 声明一个我也不知道会报什么错的异常 */ public int updatePerson(Person person)throws Exception; /** * 删除方法 * @param person 要删除的对象 * @return 返回1 删除成功 返回0 删除失败 * @throws Exception 声明一个我也不知道会报什么错的异常 */ public int deletePerson(Person person)throws Exception; /** * 根据主键ID查询信息 * @param id 要查询的数据ID * @return 查询到了 返回对象 没有查询到 返回null * @throws Exception 声明一个我也不知道会报什么错的异常 */ public Person findPersonByID(Integer id)throws Exception; /** * 查询全部 * @return 查询到了返回对象list 没有查询到返回null * @throws Exception 声明一个我也不知道会报什么错的异常 */ public List<Person> findAllPersons()throws Exception;}
定义好结构之后我们再想办法去实现,对于接口的实现类,一般我们也会放到一个特定的包下, 如果是dao层接口的实现类 就放在dao包下的impl包下 package com.hnxy.dao.impl;import java.sql.Connection;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import com.hnxy.dao.PersonDAO;import com.hnxy.entity.Person;import com.hnxy.utils.JdbcUtil;/** * 数据库操作层的实现类 * @author My * */public class PersonDAOImpl implements PersonDAO { @Override public int insertPerson(Person person) throws Exception { // 创建方法的返回值 int count = 0; // 获取数据库连接 Connection conn = JdbcUtil.getConn(); // 创建SQL执行对象 QueryRunner qr = new QueryRunner(); // 编写SQL语句 String sql = "insert into person values (null,?,?,?,?)"; // 占位符赋值 Object[] params = {person.getName(),person.getSex(),person.getAge(),person.getFrom()}; // 执行 count = qr.update(conn,sql,params); // 关闭 JdbcUtil.closeConn(conn); // 返回 return count; } @Override public int updatePerson(Person person) throws Exception { // 创建方法的返回值 int count = 0; // 获取数据库连接 Connection conn = JdbcUtil.getConn(); // 创建SQL的执行对象 QueryRunner qr = new QueryRunner(); // 编写SQL语句 String sql = "update person set `name`=?,`sex`=?,`age`=?,`from`=? where `id`=?"; // 占位符赋值 Object[] params = {person.getName(),person.getSex(),person.getAge(),person.getFrom(),person.getId()}; // 执行 count = qr.update(conn, sql,params); // 关闭 JdbcUtil.closeConn(conn); // 返回 return count; } @Override public int deletePerson(Person person) throws Exception { // 创建方法的返回值 int count = 0; // 获取数据库连接 Connection conn = JdbcUtil.getConn(); // 创建SQL的执行对象 QueryRunner qr = new QueryRunner(); // 编写SQL语句 String sql = "delete from person where `id` = ?"; // 占位符赋值 Object[] params = {person.getId()}; // 执行 count = qr.update(conn, sql, params); // 关闭 JdbcUtil.closeConn(conn); // 返回 return count; } @Override public Person findPersonByID(Integer id) throws Exception { // 创建方法的返回值 Person person = null; // 获取数据库连接 Connection conn = JdbcUtil.getConn(); // 创建SQL的执行对象 QueryRunner qr = new QueryRunner(); // 编写SQL语句 String sql = "select * from person where `id` = ?"; // 是否需要占位符赋值? Object[] params = {id}; // 执行 person = qr.query(conn, sql,new BeanHandler<Person>(Person.class),params); // 关闭连接 JdbcUtil.closeConn(conn); // 返回 return person; } @Override public List<Person> findAllPersons() throws Exception { // 创建方法的返回值 List<Person> plist = null; // 获取数据库连接 Connection conn = JdbcUtil.getConn(); // 创建SQL执行对象 QueryRunner qr = new QueryRunner(); // 编写SQL语句 String sql = "select * from person"; // 占位符赋值 // 执行 plist = qr.query(conn,sql,new BeanListHandler<Person>(Person.class)); // 关闭 spring 伟大的程序 JdbcUtil.closeConn(conn); // 返回 return plist; }}
这样DAO层开发就完成了,其实我们可以看到就是这样分层开发更加规范更加符合面向对象 思想,但是其复杂难度也随之增加,这也是分层开发不好的一点;package com.hnxy.service;import java.util.List;import com.hnxy.entity.Person;/** * 人员表的Service层接口 * @author My * */public interface PersonService { /** * 添加方法 * @param person 要添加的对象 * @return 返回1 代表添加成功 返回0 代表添加失败 * @throws Exception 声明一个我也不知道会报什么错的异常 */ public int insertPerson(Person person)throws Exception; /** * 更新方法 * @param person 要更新的对象 * @return 返回1 代表更新成功 返回0 代表更新失败 * @throws Exception 声明一个我也不知道会报什么错的异常 */ public int updatePerson(Person person)throws Exception; /** * 删除方法 * @param person 要删除的对象 * @return 返回1 删除成功 返回0 删除失败 * @throws Exception 声明一个我也不知道会报什么错的异常 */ public int deletePerson(Person person)throws Exception; /** * 根据主键ID查询信息 * @param id 要查询的数据ID * @return 查询到了 返回对象 没有查询到 返回null * @throws Exception 声明一个我也不知道会报什么错的异常 */ public Person findPersonByID(Integer id)throws Exception; /** * 查询全部 * @return 查询到了返回对象list 没有查询到返回null * @throws Exception 声明一个我也不知道会报什么错的异常 */ public List<Person> findAllPersons()throws Exception;}
实现类的编写: package com.hnxy.service.impl;import java.util.List;import com.hnxy.dao.PersonDAO;import com.hnxy.dao.impl.PersonDAOImpl;import com.hnxy.entity.Person;import com.hnxy.service.PersonService;/** * 业务层实现类 主要做业务操作(针对客户的不同需求,然后调用DAO层完成数据封装) * * @author My * */public class PersonServiceImpl implements PersonService { // 创建DAO层的对象 private PersonDAO personDAO = new PersonDAOImpl(); @Override public int insertPerson(Person person) throws Exception { return personDAO.insertPerson(person); } @Override public int updatePerson(Person person) throws Exception { return personDAO.updatePerson(person); } @Override public int deletePerson(Person person) throws Exception { return personDAO.deletePerson(person); } @Override public Person findPersonByID(Integer id) throws Exception { return personDAO.findPersonByID(id); } @Override public List<Person> findAllPersons() throws Exception { return personDAO.findAllPersons(); } }
3. 页面控制器整理 <%@page import="com.hnxy.entity.Person"%><%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="org.apache.commons.dbutils.handlers.BeanListHandler"%><%@page import="java.util.List"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 创建service层对象 PersonService service = new PersonServiceImpl(); // 执行 查询 肯定获取一个model List<Person> persons = service.findAllPersons(); // 保存模型 给 下一个页面展示 request.setAttribute("plist", persons); // 转发 request.getRequestDispatcher("findAll_view.jsp").forward(request, response);%>
2) 按ID查询的控制器<%@page import="com.hnxy.entity.Person"%><%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="org.apache.commons.dbutils.handlers.BeanHandler"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 删除业务 // 第一阶段 接收页面数据 // 1. 设定编码 request.setCharacterEncoding("UTF-8"); // 2. 接收数据 String pid = request.getParameter("pid"); // 第二阶段 数据库处理 PersonService service = new PersonServiceImpl(); Person person = service.findPersonByID(Integer.parseInt(pid)); // 第三阶段 服务器响应 // 保存要更新的信息 request.setAttribute("person", person); // 转发给下一个页面展示person request.getRequestDispatcher("update.jsp").forward(request, response);%>
3) 添加的控制器 <%@page import="com.hnxy.entity.Person"%><%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 添加业务 // 第一阶段 接收数据 // 1. 设定页面请求字符流的编码 request.setCharacterEncoding("UTF-8"); // 2. 接收页面数据 String pname = request.getParameter("pname"); String psex = request.getParameter("psex"); String age = request.getParameter("age"); String pfrom = request.getParameter("pfrom"); // 第二阶段数据库处理阶段 // 封装数据 Person person = new Person(); person.setAge(Integer.parseInt(age)); person.setName(pname); person.setFrom(pfrom); person.setSex(psex); // 创建业务层对象 PersonService service = new PersonServiceImpl(); int count = service.insertPerson(person); // 第三阶段 根据数据库的处理结果 进行相应结果处理 if(count > 0){ // 添加成功 // 重新定向到查询全部的页面 response.sendRedirect("findAll_server.jsp"); }else{ // 添加失败 response 响应流 String msg = "<script type='text/javascript'>history.go(-1);alert('添加失败!');</script>"; // 服务器想给客户端发送一段代码 让客户端知道添加失败了 // 你这段文字到底是什么类型的? text/html 那么浏览器就把你的这段话当做是HTML文本进行解析 response.setContentType("text/html; charset=UTF-8"); // 服务端给客户端发送的数据类型是什么 // 打印回去 out.print(msg); }%>
4) 更新的控制器<%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="com.hnxy.entity.Person"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 添加业务 // 第一阶段 接收数据 // 1. 设定页面请求字符流的编码 request.setCharacterEncoding("UTF-8"); // 2. 接收页面数据 String pname = request.getParameter("pname"); String psex = request.getParameter("psex"); String age = request.getParameter("age"); String pfrom = request.getParameter("pfrom"); String pid = request.getParameter("pid"); // 第二阶段数据库处理阶段 // 封装数据 // 创建业务层对象 PersonService service = new PersonServiceImpl(); Person person = service.findPersonByID(Integer.parseInt(pid)); if (null != person) { person.setAge(Integer.parseInt(age)); person.setFrom(pfrom); person.setId(Integer.parseInt(pid)); person.setName(pname); person.setSex(psex); int count = service.updatePerson(person); // 第三阶段 根据数据库的处理结果 进行相应结果处理 if (count > 0) { // 添加成功 // 重新定向到查询全部的页面 response.sendRedirect("findAll_server.jsp"); } else { // 添加失败 response 响应流 String msg = "<script type='text/javascript'>history.go(-1);alert('更新失败!');</script>"; // 服务器想给客户端发送一段代码 让客户端知道添加失败了 // 你这段文字到底是什么类型的? text/html 那么浏览器就把你的这段话当做是HTML文本进行解析 response.setContentType("text/html; charset=UTF-8"); // 服务端给客户端发送的数据类型是什么 // 打印回去 out.print(msg); } } else { // 添加失败 response 响应流 String msg = "<script type='text/javascript'>history.go(-1);alert('没有查询到要更新的数据!');</script>"; // 服务器想给客户端发送一段代码 让客户端知道添加失败了 // 你这段文字到底是什么类型的? text/html 那么浏览器就把你的这段话当做是HTML文本进行解析 response.setContentType("text/html; charset=UTF-8"); // 服务端给客户端发送的数据类型是什么 // 打印回去 out.print(msg); }%>
5) 删除的控制器 <%@page import="com.hnxy.service.impl.PersonServiceImpl"%><%@page import="com.hnxy.service.PersonService"%><%@page import="com.hnxy.entity.Person"%><%@page import="org.apache.commons.dbutils.QueryRunner"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% // 添加业务 // 第一阶段 接收数据 // 1. 设定页面请求字符流的编码 request.setCharacterEncoding("UTF-8"); // 2. 接收页面数据 String pid = request.getParameter("pid"); // 第二阶段数据库处理阶段 // 封装数据 // 创建业务层对象 PersonService service = new PersonServiceImpl(); Person person = service.findPersonByID(Integer.parseInt(pid)); if (null != person) { int count = service.deletePerson(person); // 第三阶段 根据数据库的处理结果 进行相应结果处理 if (count > 0) { // 添加成功 // 重新定向到查询全部的页面 response.sendRedirect("findAll_server.jsp"); } else { // 添加失败 response 响应流 String msg = "<script type='text/javascript'>history.go(-1);alert('删除失败!');</script>"; // 服务器想给客户端发送一段代码 让客户端知道添加失败了 // 你这段文字到底是什么类型的? text/html 那么浏览器就把你的这段话当做是HTML文本进行解析 response.setContentType("text/html; charset=UTF-8"); // 服务端给客户端发送的数据类型是什么 // 打印回去 out.print(msg); } } else { // 添加失败 response 响应流 String msg = "<script type='text/javascript'>history.go(-1);alert('没有查询到要删除的数据!');</script>"; // 服务器想给客户端发送一段代码 让客户端知道添加失败了 // 你这段文字到底是什么类型的? text/html 那么浏览器就把你的这段话当做是HTML文本进行解析 response.setContentType("text/html; charset=UTF-8"); // 服务端给客户端发送的数据类型是什么 // 打印回去 out.print(msg); }%>
关键词:实战,基础,使用,技术,入门,数据,深入,动态