🔥前言
书接上文,今天我们来规范书写servlet代码,分包分类的规划项目结构。我们知道一个项目靠一个人是很难完成的,那么在团队合作的时候难免会有看不懂队友写的代码的情况出现。因此按照特定的格式来书写代码无疑可以一定程度上减少这种事情发生的概率。
1、需要导入的jar包以及项目结构速览
2、工具类放在util包下,资源文件放在src目录下
工具类最终版JDBCUtils可参考我JDBC专栏里的博文,资源文件就是图中的jdbc.properties,里面存放数据库的驱动路径、访问路径、账号名和密码。
3、具体类写在实体类的包下(entity)
以此次博客要分享的项目为例:
我要做的是一个有登录和增删查询功能的网页,因此可以定义一个Person类,实现Serializable接口(形成习惯),封装姓名、密码等属性并提供对应的构造方法(不要忘了写无参构造)
具体代码如下:
package com.qj.entity; import java.io.Serializable; public class Person implements Serializable { private Integer id; private String name; private String pwd; private String QQ; private String beizhu; @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + ", QQ='" + QQ + '\'' + ", beizhu='" + beizhu + '\'' + '}'; } public Person(Integer id, String name, String pwd, String QQ, String beizhu) { this.id = id; this.name = name; this.pwd = pwd; this.QQ = QQ; this.beizhu = beizhu; } public Person() { } public Person(String name, String pwd) { this.name = name; this.pwd = pwd; } public String getQQ() { return QQ; } public void setQQ(String QQ) { this.QQ = QQ; } public String getBeizhu() { return beizhu; } public void setBeizhu(String beizhu) { this.beizhu = beizhu; } public Integer getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
4、dao层接口与接口的实现类
dao层是与数据库对接的,存放操作数据库的接口方法。而在dao包里面还有一个impl包用来存放接口的实现类,用来操作数据库,例如:增删改查。
4.1、PersonDao接口
这里提供了几种方法接口:
根据查询名字返回person对象
查询数据库中的所有人并存入list集合中
将person信息插入到数据库中
根据id删除数据库中的person
package com.qj.dao; import com.qj.entity.Person; import java.util.List; public interface PersonDao { /** * * @param name 用户输入的名字 * @return 返回数据库里的Person对象 */ Person selectByName(String name); /** * * @return 返回t_Perosn表中所有人 */ List<Person> selectAll(); /** * * @param person 插入到表格 * @return 受影响行数 */ int insertPerson(Person person); /** * * @param id 按照id删除好友 * @return 返回受影响行数 */ int deletePerson(Integer id); }
4.2、PersonDaoImpl接口实现类
这里就是针对PersonDao接口的具体实现代码,如果有看不懂的可以参考我的JDBC专栏的文章
package com.qj.dao.impl; import com.qj.dao.PersonDao; import com.qj.entity.Person; import com.qj.util.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class PersonDaoImpl implements PersonDao { @Override public Person selectByName(String name) { Connection conn = null; PreparedStatement ps=null; ResultSet rs = null; Person person = null; try { conn = JDBCUtils.getConnection(); String sql = "select *from t_Person where p_name=?"; ps = conn.prepareStatement(sql); ps.setString(1, name); rs = ps.executeQuery(); if (rs.next()) { String l_name = rs.getString("p_name"); String l_pwd = rs.getString("p_password"); person = new Person(l_name, l_pwd); } } catch (Exception e) { System.out.println("未知异常"); e.printStackTrace(); }finally { JDBCUtils.close(rs, ps, null); } return person; } @Override public List<Person> selectAll() { Connection conn = null; PreparedStatement ps=null; ResultSet rs = null; List<Person> list = new ArrayList<>(); try { conn = JDBCUtils.getConnection(); String sql = "select *from t_Person"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()) { Integer id = rs.getInt("p_id"); String name = rs.getString("p_name"); String pwd = rs.getString("p_password"); String QQ = rs.getString("p_QQ"); String beizhu = rs.getString("p_bz"); Person p = new Person(id, name, pwd, QQ,beizhu); list.add(p); } } catch (Exception e) { System.out.println("未知异常"); e.printStackTrace(); }finally { JDBCUtils.close(rs, ps, null); } return list; } @Override public int insertPerson(Person person) { Connection conn = null; PreparedStatement ps=null; int n=0; try { conn = JDBCUtils.getConnection(); String sql = "insert into t_Person value(null,?,?,?,?)"; ps = conn.prepareStatement(sql); ps.setString(1, person.getName()); ps.setString(2, person.getPwd()); ps.setString(3, person.getQQ()); ps.setString(4, person.getBeizhu()); n = ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally { JDBCUtils.close(null, ps, null); } return n; } @Override public int deletePerson(Integer id) { Connection conn = null; PreparedStatement ps=null; int n=0; try { conn = JDBCUtils.getConnection(); String sql = "delete from t_Person where p_id=?"; ps = conn.prepareStatement(sql); ps.setInt(1, id); n = ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally { JDBCUtils.close(null, ps, null); } return n; } }


