4.品牌管理小demo后端
分类: Java vue 专栏: 2024年ssm框架 标签: servlet开发 jdbc
2024-09-09 16:26:54 192浏览
技术要求
前端后端都要完成
前端用 vue2+elementUI+axios(要求用脚手架的方式,vue.js 的那种省略不教)
后端用 jdbc+servlet+dao 设计模式
数据库 MySQL,表也自己设计或者提供一个.sql 文件
dao 设计模式看这个文档
https://blog.csdn.net/m0_55640070/article/details/129887554
要实现的功能
一个品牌数据的增删改查,表单验证,分页带条件查询等,效果图如下
特别说明:上面效果图少了个分页功能,请自行补上
核心参考代码
DRIVER=com.mysql.cj.jdbc.Driver
URL = jdbc:mysql://localhost:3306/vue-db?serverTimezone=Asia/Shanghai&characterEncoding=utf8
USER = root
PWD = 123456
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Brand {
// id 主键
private Integer id;
// 品牌名称
private String brandName;
// 企业名称
private String companyName;
// 排序字段
private Integer ordered;
// 描述信息
private String description;
// 状态:0:禁用 1:启用
private Integer status;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageInfo {
private Integer total;//总条数
private Integer pages;//总页数
private Integer pageSize;//页面尺寸
private Integer pageNum;//第几页
private List data;//数据
public void setPages(Integer pageSize) {
if(pageSize ==null){
return ;
}
if(total % pageSize == 0){
this.pages=total/pageSize;
}else{
this.pages=total/pageSize+1;
}
}
}
package com.jf3q.vue.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.*;
// DbHelper类
public class DbHelper {
private static String DRIVER;
private static String URL;
private static String USER;
private static String PWD;
static {//执行一次,执行一次
Properties properties = new Properties();
try {
InputStream inputStream = DbHelper.class.getClassLoader().getResourceAsStream("db.properties");
properties.load(inputStream);
DRIVER = properties.getProperty("DRIVER");
URL = properties.getProperty("URL");
USER = properties.getProperty("USER");
PWD = properties.getProperty("PWD");// 根据属性名字,获取属性值
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取连接
private static Connection getConn() throws SQLException, ClassNotFoundException {
Class.forName(DRIVER);
return DriverManager.getConnection(URL,USER,PWD);
}
// 使用listMAp 进行数据操作,封装一个查询方法
public static List<Map<String,Object>> Query(String sql, Object... params){
Connection connection =null;
PreparedStatement statement = null;
ResultSet resultSet = null;
List<Map<String,Object>> list = new ArrayList<>();
try {
connection = getConn();
statement = connection.prepareStatement(sql);
setParams(statement,params);//调用方法绑定参数
resultSet = statement.executeQuery();
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
while (resultSet.next()) { //逐行读取,next():移动指针到 下一行,判断是否读到数据,一次读取一行
Map<String, Object> rowMap = new HashMap<>(); //代表一行
for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
// getColumnLabel():获取列的别名,如果没有就获取列名
rowMap.put(resultSetMetaData.getColumnLabel(i), resultSet.getObject(i) == null ? " " : resultSet.getObject(i));
}
list.add(rowMap);//填充list
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeAll(connection, statement, resultSet);//调用关闭方法
}
return list;
}
// 关闭方法
private static void closeAll(Connection connection, PreparedStatement statement, ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
// 更新操作
public static boolean update(String sql, Object... params) {
Connection connection = null;
PreparedStatement statement = null;
boolean result = false;
try {
connection = getConn();
statement = connection.prepareStatement(sql);//预编译
setParams(statement, params);//调用方法绑定参数
int n = statement.executeUpdate();
if (n > 0) {
result = true;
}
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} finally {
closeAll(connection, statement, null);
}
return result;
}
// 设置参数
private static void setParams(PreparedStatement statement,Object[] params) throws SQLException {
if (params != null) {
for (int i = 0; i < params.length; i++) {
statement.setObject(i + 1, params[i]);
}
}
}
}
// 读取请求体中的JSON字符串
BufferedReader reader = request.getReader();
String line;
StringBuffer jsonSb = new StringBuffer();
//reader.readLine()是一行一行读取 line = reader.readLine()这个的意思就是把读取的这行字符串赋值给line这个变量
while ((line = reader.readLine()) != null) {
jsonSb.append(line);//json格式的 字符串
}
// 将JSON字符串转换为Java对象
// 假设我们期望的JSON对应于以下Java类
Brand brand = JSON.parseObject(jsonSb.toString(), Brand.class);
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//由于咱们是前后分离项目了,不走jsp页面了,所以直接返回json数据就行了
response.setContentType("application/json;charset=UTF-8");
chain.doFilter(request, response);
}
作业
今天完成所有后端接口:包含:分页带条件查询接口。新增接口 删除接口 修改接口,批量删除接口并用apipost测试成功!!!
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论