2020-07-07
完善增删改查功能
数据库:web
表:user
字段 | 类型 |
---|---|
id | int |
username | varchar |
password | varchar |
MVC分层架构
模型(model)-视图(view)-控制器(controller)
src 放后端代码,webcontent放前端代码,lib放第三方jar包
关键代码说明:
servlet起名规则一般是功能+Servlet,单词首字母大写。
这个@WebServlet()里的是这个servlet的访问路径名
@WebServlet() 对应form里的action的值。
servlet里有两个方法,一个是doGet,一个是doPost,对应form里的method。
doGet和doPost有两个参数,request是用户请求,response是服务器响应。
表单提交获取值servlet从request里获取,调用request的getParameter()方法。这个request.getParameter()里的参数对应input的name属性。这俩是对应的。
到这里,servlet就可以获取前端传递的值了。
下一步建实体类bean。
bean类名一般和表名对应,属性和字段名对应,属性要private修饰,通过public的get和set方法取值赋值,bean体现了java三大特性之一的封装。
这是生成get、set方法的步骤,eclipse可以帮我们自动生成。
util是工具类,比如连接数据库,处理中文乱码,格式化时间日期,调用api等等,DBUtil是比较常用的,一般写好一次,以后直接复制使用,注意修改数据库地址,用户名密码。java连接mysql需要一个jar包,放到lib目录下。DBUtil里一般写个测试方法,先试试能不能连,以免后面写一堆,找不出错来。
package util;
import java.sql.*;
public class DBUtil {
// 本地数据库地址
private static final String URL = "jdbc:mysql://localhost:3306/web?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=GMT";
// 本地数据库用户名
private static final String USERNAME = "root";
// 本地数据库密码
private static final String PASSWORD = "root";
// 数据库驱动
private static final String jdbcName = "com.mysql.cj.jdbc.Driver";
/**
* 获取数据库连接
*/
public static Connection getConnection() throws Exception {
Class.forName(jdbcName);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
return connection;
}
/* 测试方法 */
public static void main(String[] args) throws Exception {
Connection connection = DBUtil.getConnection();
if (connection != null) {
System.out.println("连接成功");
} else {
System.out.println("连接失败");
}
connection.close();
}
}
接下来完善Dao层。DAO(Data Access Object) 数据访问对象。dao层里面一般就写增删改查的方法,不干别的。比如现在登录,需要一个查的方法通过用户名查用户信息。
select * from user where username = ?
然后写到java里,需要注意的是参数是问号。
这个方法的返回值是User对象,所以先实例化一个。
数据类型 对象 = new 类()
User user = new User()
下一步获取数据库连接。有了数据库工具类,就不用每次都写那么多连数据库的了
获取数据库连接,报错一般放到横线上就会告诉你怎么改。这说调用这个方法需要抛出异常,点第一个就行。
下一步是执行sql语句,这里叫预编译处理,优点是传值方便,防止XSS注入。
下一步是传值,这个PreparedStatement有一些方法是设置值用的,字符串setString(),数字setInt()。那个1是第一个参数,有几个问号就是几个参数。setString(1, username)就是把调用这个方法传进来的值赋给sql的第一个?位置上
ResultSet这个类是获取查询结果的,实例化一个结果集对象。这个结果集有个游标,每从里面取一条记录,就往后走一个。
Resultset有个方法叫next(),调用next方法之后游标就往后走,发现有一条数据,就返回了true。
然后从rs里获取值,rs.getInt是获取数字类型的数据,括号里的参数是字段名,按照如图所示对应。
接下来完善servlet
实例化一个Dao层对象。使用try catch捕获异常。
在User类中重写toString方法,用来输出对象的值。
GitHub:https://github.com/wlgc1801lzh/javaweb-example
码云:https://gitee.com/wlgc1801lzh/javaweb-example