# 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协议 > ***可以提高页面响应效率***