参考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj
IDEA 2020.1
JDK 11
Maven 3.6.3
MySQL 5.7.30
Tomcat 9.0.35
这些表自己建一下就行,想要建表语句在本篇博客最后附有csdn下载链接,该系列博客最后一篇附有github地址。
考虑使不使用Maven?
把pom.xml文件删除至如下图所示
把原来的web.xml里的内容替换掉
替换代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
替换成如图所示
在main下新建java和resources两个文件夹
idea2020.1版本会有提示,直接双击就可以,版本较低没有提示的解决方法详见博客https://blog.csdn.net/qq_43594119/article/details/106199248中的标记文件夹
建好后目录结构如下
成功之后可以看到出现了index.jsp页面
然后启动项目测试能否跑起来
访问成功
导入以下5个包
jsp,Servlet,mysql驱动,jstl,stand…
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- JSTL表达式的依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard标签库的依赖 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
选中smbms数据库(没有就先去建一个)
连接成功后如下图:(注意,这里数据库smbms和里面的表我提前建好的,没有就自己建一下,前面有相关的表结构,照着建立就行,想要建表语句在本篇博客最后附有csdn下载链接,该系列博客最后一篇附有github地址。)
连接MySQL出现问题详见博客https://blog.csdn.net/qq_43594119/article/details/106061275
ORM映射:表-类映射
对照表建立相关的实体类,实体类放在pojo包下。
只需要建立4个实体类User、Bill、Provider、Role即可
先对照user表建立,多了age为了显示可以不写,userRoleName,方便联表查询
如图所示,get、set方法自动生成即可。不会生成,详见博客https://blog.csdn.net/qq_43594119/article/details/105619222中生成构造方法、get、set方法等
package com.ylw.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 properties = new Properties();
//反射,通过类加载器读取对应的资源
InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");//把资源变成流
try {
properties.load(is); //使用properties加载流
} catch (IOException e) {
e.printStackTrace();
}
//获取数据库配置文件里对应的值
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
}
//获取数据库的链接
public static Connection getConnection(){
Connection connection = null;
try {
Class.forName(driver); //将mysql驱动注册到DriverManager中去
connection = DriverManager.getConnection(url, username, password); //传入参数,获取数据库连接
} catch (Exception e) {
e.printStackTrace();
}
return connection;//返回连接
}
//查询公共方法
/**
* @param connection sql连接
* @param sql sql语句
* @param params sql参数
* @param resultSet 查询结果集
* @param preparedStatement PreparedStatement对象可以防止sql注入
* @return
* @throws SQLException
*/
public static ResultSet execute(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet,String sql,Object[] params) throws SQLException {
preparedStatement = connection.prepareStatement(sql); //预编译SQL语句
//向SQL语句中传入参数,即替换占位符?
for (int i = 0; i < params.length; i++) {
//setObject,数组从0开始,但是占位符从1开始
preparedStatement.setObject(i+1,params[i]);
}
resultSet = preparedStatement.executeQuery(); //执行查询语句
return resultSet;
}
//增删改公共方法
public static int execute(Connection connection,String sql,Object[] params,PreparedStatement preparedStatement) throws SQLException {
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
//setObject,数组从0开始,但是占位符从1开始
preparedStatement.setObject(i+1,params[i]);
}
int updataRows = preparedStatement.executeUpdate();
return updataRows;//返回更新的行数
}
//关闭连接,释放资源
public static boolean closeResource(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){
boolean flag = true;
if (resultSet!=null){
try {
resultSet.close();
//关闭成功后设置为null,让垃圾回收器回收
resultSet = null;
} catch (SQLException e) {
e.printStackTrace();
flag = false; //没有释放成功
}
}
if (preparedStatement!=null){
try {
preparedStatement.close();
//关闭成功后设置为null,让垃圾回收器回收
preparedStatement = null;
} catch (SQLException e) {
e.printStackTrace();
flag = false; //没有释放成功
}
}
if (connection!=null){
try {
connection.close();
//关闭成功后设置为null,让垃圾回收器回收
connection = null;
} catch (SQLException e) {
e.printStackTrace();
flag = false; //没有释放成功
}
}
return flag; //只要有一个资源没有释放成功就会返回false
}
}
package com.ylw.filter;
import javax.servlet.*;
import java.io.IOException;
//字符编码过滤器
public class CharacterEncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//设置请求和相应的编码
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest,servletResponse); //让过滤器继续放行
}
public void destroy() {
}
}
<!--字符编码过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.ylw.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!-- 设置所有请求都被过滤 -->
<url-pattern>/*
csdn下载链接:SMBMS超市订单管理系统数据库建表语句
csdn下载链接:SMBMS超市订单管理系统网站静态资源
bug改了一天没改出来,暂时不更本系列的下一篇了༼༎ຶᴗ༎ຶ༽(;´༎ຶД༎ຶ`)