# Java-zzgc
**Repository Path**: whales-s/java-zzgc
## Basic Information
- **Project Name**: Java-zzgc
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-09-24
- **Last Updated**: 2021-09-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 一、创建工程
File--->New Project-->Java Enterprise--->Next...
# 二、后台代码
## 2、创建包
```xml
dao-----------操作数据库
entity--------与表对应的实体类
service-------业务逻辑包
servlet-------servlet包
utils---------工具类
```
## 3、引入依赖的jar包
```xml
javax.servlet
javax.servlet-api
4.0.1
provided
mysql
mysql-connector-java
8.0.26
org.junit.jupiter
junit-jupiter-api
${junit.version}
test
org.projectlombok
lombok
1.18.20
log4j
log4j
1.2.17
com.alibaba
fastjson
1.2.76
```
## 4、创建数据库
```sql
DROP TABLE IF EXISTS user_info;
CREATE TABLE IF NOT EXISTS user_info
(
user_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
user_name VARCHAR(255) NOT NULL COMMENT '用户名',
user_pwd VARCHAR(255) NOT NULL COMMENT '密码',
user_age INT DEFAULT 0 COMMENT '年龄',
user_sex VARCHAR(4) DEFAULT '男' COMMENT '性别',
create_time DATETIME DEFAULT NOW() COMMENT '创建时间',
update_time DATETIME DEFAULT NOW() ON UPDATE NOW() COMMENT '更新时间',
del_status INT DEFAULT 1 COMMENT '删除状态 1:未删除 0:删除'
);
-- 栏目
CREATE TABLE IF NOT EXISTS column_info
(
column_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '栏目ID',
column_name VARCHAR(255) NOT NULL COMMENT '栏目名称',
create_time DATETIME DEFAULT NOW() COMMENT '创建时间',
update_time DATETIME DEFAULT NOW() ON UPDATE NOW() COMMENT '更新时间',
del_status INT DEFAULT 1 COMMENT '1:未删除;0:删除'
)COMMENT '栏目信息表';
-- 新闻
CREATE TABLE IF NOT EXISTS news_info
(
news_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '新闻ID',
column_id INT COMMENT '栏目ID',
news_title VARCHAR(255) NOT NULL COMMENT '新闻标题',
news_content TEXT NOT NULL COMMENT '新闻内容',
create_time DATETIME DEFAULT NOW() COMMENT '创建时间',
update_time DATETIME DEFAULT NOW() ON UPDATE NOW() COMMENT '更新时间',
del_status INT DEFAULT 1 COMMENT '1:未删除;0:删除',
is_top INT DEFAULT 0 COMMENT '0:不置顶;1:置顶'
)comment '新闻信息表'
```
## 5、连接数据库
5.1 db.propertis
```properties
user=root
password=123456
url=jdbc:mysql://localhost:3306/shopping?characterEncoding=UTF-8&rewriteBatchedStatements=true
driver=com.mysql.cj.jdbc.Driver
```
5.2 DbConn.java
```java
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class DbConn {
public static Connection openConn() throws Exception {
//加载配置文件
//加载资源的两种方式
//1、当前类.class.getClassLoader().getResourceAsStream("资源文件路径"); 从根路径找 此时java与resources为根路径
//2、当前类.class.getResourceAsStream("db.properties"); 此时从当前类所在的路径向下找
//3、此处使用到了java中的I/O流
InputStream inputStream = DbConn.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(inputStream);
//读取信息
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driver = properties.getProperty("driver");
//加载驱动
Class.forName(driver);
//获取连接
Connection connection = DriverManager.getConnection(url,user,password);
return connection;
}
}
```
## 6、创建`UserInfo.java`
```java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class UserInfo {
private int userId;
private String userName;
private String userPwd;
private int userAge;
private String userSex;
private Date createTime;
private Date updateTime;
private int delStatus;
}
```
## 7、操作UserInfo `UserInfoDao`
```java
import com.newcapec.entity.UserInfo;
import com.newcapec.utils.DbConn;
import com.sun.org.apache.regexp.internal.RE;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class UserInfoDao {
public static UserInfo login(String userName,String userPwd) throws Exception {
UserInfo userInfo = null;
Connection connection = DbConn.openConn();
String sql = "select * from user_info where user_name = ? and user_pwd = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,userName);
statement.setString(2,userPwd);
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){
int userId = resultSet.getInt("user_id");
// String userName = resultSet.getString("user_name");
// String userPwd = resultSet.getString("user_pwd");
int userAge = resultSet.getInt("user_age");
String userSex = resultSet.getString("user_sex");
Date createTime = resultSet.getTimestamp("create_time");
Date updateTime = resultSet.getTimestamp("update_time");
int delStatus = resultSet.getInt("del_status");
userInfo = new UserInfo(userId,userName,userPwd,userAge,userSex,createTime,updateTime,delStatus);
}
resultSet.close();
statement.close();
connection.close();
return userInfo;
}
public static List selectAll() throws Exception {
List userInfos = new ArrayList<>();
Connection connection = DbConn.openConn();
String sql = "select * from user_info";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){
int userId = resultSet.getInt("user_id");
String userName = resultSet.getString("user_name");
String userPwd = resultSet.getString("user_pwd");
int userAge = resultSet.getInt("user_age");
String userSex = resultSet.getString("user_sex");
Date createTime = resultSet.getTimestamp("create_time");
Date updateTime = resultSet.getTimestamp("update_time");
int delStatus = resultSet.getInt("del_status");
UserInfo userInfo = new UserInfo(userId,userName,userPwd,userAge,userSex,createTime,updateTime,delStatus);
userInfos.add(userInfo);
}
resultSet.close();
statement.close();
connection.close();
return userInfos;
}
public static boolean insert(UserInfo userInfo) throws Exception {
boolean flag = false;
Connection connection = DbConn.openConn();
String sql = "insert into user_info (user_name,user_pwd,user_sex,user_age) values (?,?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,userInfo.getUserName());
statement.setString(2,userInfo.getUserPwd());
statement.setString(3,userInfo.getUserSex());
statement.setInt(4,userInfo.getUserAge());
int count = statement.executeUpdate();
if(count>0){
flag = true;
}
statement.close();
connection.close();
return flag;
}
}
```
## 8、统一数据返回格式
```java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Result{
private int code; //200表示成功
private String msg; //结果信息
private T data; //结果数据
}
```
## 9、JSON讲解
分为简单数据与键值对
```
"张三"
20
```
对象
```json
{
//一个个的键值对
name:"张三",
age:20,
teacher:{
name:"teacher1",
sex:"男"
}
}
```
数组
```json
[
//一个个的键值对
name:"张三",
children:[
{name:"张三"}
]
]
```
# 三、前端
1、引入layui
2、
## 3、添加流程
1、点击添加按钮,展示添加模态框,如果是更新按钮,会增加自动填充数据的步骤
```js
function showEditModel() {
//判断是否有被选中的项,并且只能有一项被选中
var checkStatus = layui.table.checkStatus('userInfoTable'); //idTest 即为基础参数 id 对应的值
console.log(checkStatus.data) //获取选中行的数据
console.log(checkStatus.data.length) //获取选中行数量,可作为是否有选中行的条件
var length = checkStatus.data.length;
if (length == 0) {
//layui.layer.alert('请选择要编辑的条目');
layui.layer.msg("请选择要编辑的条目");
}
if (length > 0) {
//layui.layer.alert('请选择一条数据');
layui.layer.msg("请选择一条数据");
}
if (length == 1) {
//layui.layer.alert('准备编辑');
layui.layer.msg("准备编辑");
//编辑和添加可以复用一个模态框
showAddModel();
//数据填充进去
var userInfoData = checkStatus.data[0];
//layui.$("input[name='userName']").val(userInfoData.userName);
inutEditModel(userInfoData);
}
}
function inutEditModel(data){
layui.$("#userId").val(data.userId);
layui.$("input[name='userName']").val(data.userName);
layui.$("input[name='userPwd']").val(data.userPwd);
layui.$("input[name='userAge']").val(data.userAge);
if(data.userSex == '男'){
layui.$("input[value='男']").prop("checked","true");
}
if(data.userSex == "女"){
layui.$("input[value='女']").prop("checked","true");
}
if(data.delStatus == 1){
layui.$("input[title='不删除']").prop("checked","true");
}
if(data.delStatus == 0){
layui.$("input[title='删除']").prop("checked","true");
}
layui.form.render();
//layui.$("input[name='userName']").val(userInfoData.username);
}
```
2、填写数据
3、点击提交按钮
3.1 首先验证表单数据是否符合要求
```js
layui.form.verify({
username: function(value, item) { //value:表单的值、item:表单的DOM对象
if (value.length < 5) {
return '用户名长度不能小于5';
}
},
password: function(value, item) { //value:表单的值、item:表单的DOM对象
if (value.length <= 0) {
return '密码不能为空';
}
}
});
```
3.2 验证完成后表单拦截异步提交,在异步提交时根据userId是否为空判断是应该添加还是更新
```js
/*拦截表单提交,改为异步*/
layui.form.on('submit(submitUser)', function(data) {
//手动发起异步请求 ajax
console.log(data.field);
if(data.field.userId != ""){
posturl = "../updateUser";
}else{
posturl = "../useradd";
}
//ajax是jquery中的异步请求框架
//layui中已经集成的有jquery框架
//layui.$去使用
layui.$.ajax({
type: "POST",
url: posturl,
data: data.field,
success: function(result) {
if(result.code == 200){
layui.layer.alert(result.msg, {icon: 1});
//重新加载数据
layui.table.reload("userInfoTable");
}
if(result.code == 500){
layui.layer.alert(result.msg, {icon: 2});
}
}
});
closeAddModel();
return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
});
```
3.3 提交后自动出发清除表单事件
```js
function clearAddModelInfo() {
layui.$("#userId").val();
layui.$("input[name='userName']").val("");
layui.$("input[name='userPwd']").val("");
layui.$("input[name='verify']").val("");
layui.$("input[name='userAge']").val("");
layui.$("input[value='男']").prop("checked","true");
//让表单重新渲染,才能使 layui.$("input[value='男']").prop("checked","true");生效
layui.form.render();
}
```
3.4 根据返回的json数据的Code值做判断
```js
$.ajax({
url: "/xxx",
type: "GET",
data: {
"boxIds": boxIds,
"boxType": 0,
"time": new Date().getTime()
},
traditional: true,//这里设置为true
success: function(data) {
//do sth...
}
});
```
## AJAX异步请求
>Http协议
>
***可以提高页面响应效率***