数据库:
项目如何搭建? 考虑是不是用maven? jar包,依赖
搭建一个maven web 项目
配置Tomcat
测试项目是否能够跑起来
导入项目中需要的jar包; jsp,Servlet,mysql驱动jstl,stand…
构建项目包结构
编写实体类 ROM映射:表-类映射
ORM:对象关系映射
实体类中的属性与数据库表中的字段一一对应
注意:由于Address表存放的是地址,没有实际含义,因此不编写对应实体类
1、用户类
private Integer id; // 用户ID private String userCode; // 用户编码 private String userName; // 用户名 private String userPassword; // 用户密码 private Integer gender; // 性别 private Date birthday; // 出生日期 private String phone; // 电话 private String address; // 地址 private Integer userRole; // 用户角色ID private Integer createdBy; // 创建者ID private Date creationDate;// 创建时间 private Integer modifyBy; // 修改者ID private Date modifyDate; // 修改时间 private Integer age; // 年龄,通过当前时间-出生年份得出 private String userRoleBane; // 用户角色名称
2、角色类
属性
private Integer id; // 角色ID private String roleCode; // 角色编码 private String roleName; // 角色名 private Integer createdBy; // 创建者ID private Date creationDate;// 创建时间 private Integer modifyBy; // 修改者ID private Date modifyDate; // 修改时间
3、账单类
属性
private Integer id; // 账单ID private String billCode; // 账单编码 private String productName; // 商品名 private String productDesc; // 商品描述 private String productUnit; // 商品单价 private BigDecimal productCount; // 商品数量 private BigDecimal totalPrice; // 总金额 private Integer isPayment; // 是否支付 private Integer createdBy; // 创建者ID private Date creationDate;// 创建时间 private Integer modifyBy; // 修改者ID private Date modifyDate; // 修改时间 private Integer providerId; // 供应商ID private String providerName; //供应商名称
4、供应商类
属性
private Integer id; // 供应商ID private String proCode; // 供应商编码 private String proName; // 供应商名称 private String proDesc; // 供应商描述 private String proContact; // 联系人名称 private String proPhone; // 供应商电话 private String proAddress; // 供应商地址 private String proFax; // 供应商传真 private Integer createdBy; // 创建者ID private Date creationDate;// 创建时间 private Integer modifyBy; // 修改者ID private Date modifyDate; // 修改时间
7.编写基础公共类 : 编写BaseDAO
数据库配置文件(mysql5.xx和8.xx的编写有差异)
创建数据库配置文件:db.properties
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf8&userSSL=false&serverTimezone=GMT%2B8 username=root password=1111
编写公共DAO类
编写公共DAO类,便于其他DAO直接调用。
加载驱动
获取服务器连接
获取SQL执行对象
执行SQL语句
释放连接
BaseDao.java
package com.study.dao; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * 操作数据库的基类--静态类 */ public class BaseDao { private static String driver; private static String url; private static String username; private static String password; //静态代码块,在类加载的时候执行 static { Properties params = new Properties(); String configFile = "db.properties"; InputStream is = BaseDao.class.getClassLoader().getResourceAsStream(configFile); try { params.load(is); } catch (IOException e) { e.printStackTrace(); } driver = params.getProperty("driver"); url = params.getProperty("url"); username = params.getProperty("username"); password = params.getProperty("password"); } /** * 获取数据库连接 * * @return */ public static Connection getConnection() { Connection connection = null; try { Class.forName(driver); connection = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return connection; } /** * 查询数据库的公共操作 * * @param connection * @param pstm * @param rs * @param sql * @param params * @return */ public static ResultSet execute(Connection connection, PreparedStatement pstm, ResultSet rs, String sql, Object[] params) { try { pstm = connection.prepareStatement(sql); for (int i = 0; i < params.length; i++) { pstm.setObject(i + 1, params[i]); } rs = pstm.executeQuery(); } catch (SQLException throwables) { throwables.printStackTrace(); } return rs; } /** * 更新数据库的公共操作 * * @param connection * @param pstm * @param sql * @param params * @return * @throws Exception */ public static int execute(Connection connection, PreparedStatement pstm, String sql, Object[] params) { int updateRows = 0; try { pstm = connection.prepareStatement(sql); for (int i = 0; i < params.length; i++) { pstm.setObject(i + 1, params[i]); } updateRows = pstm.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); } return updateRows; } /** * 释放资源 * * @param connection * @param pstm * @param rs * @return */ public static boolean closeResource(Connection connection, PreparedStatement pstm, ResultSet rs) { boolean flag = true; if (rs != null) { try { rs.close(); rs = null;//GC回收 } catch (SQLException e) { e.printStackTrace(); flag = false; } } if (pstm != null) { try { pstm.close(); pstm = null;//GC回收 } catch (SQLException e) { e.printStackTrace(); flag = false; } } if (connection != null) { try { connection.close(); connection = null;//GC回收 } catch (SQLException e) { e.printStackTrace(); flag = false; } } return flag; } }
编写字符编码过滤器
CharacterEncodingFilter.java
public class CharacterEncodingFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding( "utf-8" ); response.setCharacterEncoding( "utf-8" ); chain.doFilter( request,response ); } public void destroy() { } }
xml
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.study.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
导入静态资源