OA项目之用户登录首页展示

news2024/11/16 11:50:01

目录

本章节目标:完成OA项目用户登录及首页展示

一.用户登录

User.java

UserDao.java

IUserDao.java

UserAction.java

login.jsp(登录界面)

userManage.jsp (数据绑定,修改,删除)

userEdit.jsp(用户新增)

效果展示

登录界面

 绑定数据

 新增界面 ​编辑

 删除界面

 修改界面


本章节目标:
完成OA项目用户登录及首页展示

一.用户登录

        用户查询

        用户角色case when后台处理

        用户新增

        用户修改

        用户删除

        重置密码

        安全退出

1.用户查询SQL语句

2.后台增删改查方法及测试

3.web层的编写

4.增删改查需要用到的所有组件-来自于官网

如搜索框,数据表格,工具栏,弹出层,form数据回显,父子页面传参

5.完全依葫芦画瓢,copy完成相对应功能

6.将使用一个MVC自定义框架

User.java

package com.zking.oa.model;

import java.io.Serializable;

import org.lisen.mvc.util.AutoIncrement;
import org.lisen.mvc.util.Ignore;
import org.lisen.mvc.util.Key;
import org.lisen.mvc.util.Table;

@Table("t_oa_user")
public class User implements Serializable{
	
	@AutoIncrement
	@Key
	private Integer id;
	
	private String name;
	
	private String loginName;
	
	private String pwd;
	
	private long rid;
	
	//忽略字段
	@Ignore 
	private String roleName;
	
	public String getRoleName() {
		if(this.rid == 1) return "管理员";
		if(this.rid == 2) return "发起者";
		if(this.rid == 3) return "审批者";
		if(this.rid == 4) return "参与者";
		if(this.rid == 5) return "会议管理员";
		return "";
	}
	

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getLoginName() {
		return loginName;
	}

	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public long getRid() {
		return rid;
	}

	public void setRid(long rid) {
		this.rid = rid;
	}
	
	public User() {
		// TODO Auto-generated constructor stub
	}

	public User(int id, String name, String loginName, String pwd, long rid) {
		this.id = id;
		this.name = name;
		this.loginName = loginName;
		this.pwd = pwd;
		this.rid = rid;
	}
	
	public User(String name, String loginName, String pwd, long rid) {
		this.name = name;
		this.loginName = loginName;
		this.pwd = pwd;
		this.rid = rid;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", loginName=" + loginName + ", pwd=" + pwd + ", rid=" + rid + "]";
	}
	
	

}

UserDao.java

package com.zking.oa.dao;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.lisen.mvc.util.DbTemplate;
import org.lisen.mvc.util.PageBean;

import com.zking.oa.model.User;
import com.zking.oa.util.MD5;


public class UserDao implements IUserDao {
	
	@Override
	public User loadUser(String loginName) {
		
		String sql  = "select * from t_oa_user where loginName = ?";
		
		if(loginName == null || "".equals(loginName)) return null;
		
		List<User> users = DbTemplate.query(sql, new Object[] {loginName}, User.class);
		
		return users == null || users.size() == 0 ? null : users.get(0);
	}
	
	
	@Override
	public List<User> listUser(User user,PageBean pageBean){
	
		String sql="select * from t_oa_user ";
		//用来保存参数
		List<Object> param = new ArrayList<>();
		if(user !=null && !"".equals(user.getName())) {
			sql+="where name like ?";
			param.add(user.getName()+"%");
		}
		return DbTemplate.query(sql, param.toArray(), pageBean,User.class);
	}
	
	@Test
	public void testListUser() {
		User u = new User();
		u.setName("瑶");
		List<User> listuser = listUser(u, PageBean());
		//System.out.println(listuser);
	}
	
	@Override
	public void addUser(User user) {
		DbTemplate.save(user);
	}
	
	
	@Override
	public void updateUser(User user) {
		String sql="update t_oa_user set loginName=?,rid=? where id=?";
		DbTemplate.update(sql, new Object[] {user.getLoginName(),user.getRid(),user.getId()});
	}
	
	@Override
	public void deleteUser(User user) {
		String sql="delete from t_oa_user where id=?";
		DbTemplate.update(sql, new Object[] {
				user.getId()
		});
	}
	
	@Override
	public void resetPwd(User user) {
		String sql="update t_oa_user set pwd=? where id=?";
		DbTemplate.update(sql, new Object[] {
				new MD5().getMD5ofStr("1234"),
				user.getId()
		});
	}
	
	
	
	private PageBean PageBean() {
		// TODO Auto-generated method stub
		return null;
	}


	public static void main(String[] args) {
		UserDao userDao = new UserDao();
		User loadUser = userDao.loadUser("dg");
		System.out.println(loadUser);
	}
}

IUserDao.java

package com.zking.oa.dao;

import java.util.List;

import org.lisen.mvc.util.PageBean;

import com.zking.oa.model.User;

public interface IUserDao {

	/**
	 * 通过登录名获取用户信息
	 * @param loginName 登录名
	 * @return User
	 */
	User loadUser(String loginName);

	/**
	 * 通过用户查询
	 * @param user
	 * @param pageBean
	 * @return
	 */
	List<User> listUser(User user, PageBean pageBean);

	/**
	 * 增加用户
	 * @param user
	 */
	void addUser(User user);

	/**
	 * 修改用户
	 * @param user
	 */
	void updateUser(User user);

	/**
	 * 删除用户
	 * @param user
	 */
	void deleteUser(User user);

	/**
	 * 重置密码
	 * @param user
	 */
	void resetPwd(User user);

}

UserAction.java

package com.zking.oa.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.lisen.mvc.framework.AbstractDispatchAction;
import org.lisen.mvc.framework.ModelDrive;
import org.lisen.mvc.util.PageBean;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.zking.oa.model.User;
import com.zking.oa.service.IUserService;
import com.zking.oa.service.UserService;
import com.zking.oa.util.CommonUtil;
import com.zking.oa.util.MD5;

public class UserAction extends AbstractDispatchAction implements ModelDrive {

	private User user  = new User();
	
	@Override
	public Object getModel() {
		return user;
	}
	
	private IUserService service = new UserService();
	
	public void login(HttpServletRequest req, HttpServletResponse resp) {
		
		User db_user = service.loadUser(user.getLoginName());
		
		if(db_user != null && user.getLoginName().equals(db_user.getLoginName())) {
			
			if(user.getPwd() != null)  {
				
				//得到前台传过来的密码,然后进行MD5计算,在和数据库中的配置进行比较
				String tmp = user.getPwd();
				MD5 md5 = new MD5();
				String _pwd = md5.getMD5ofStr(tmp);
				
				if(_pwd.equals(db_user.getPwd())) {
					CommonUtil.sendResponse(1, "用户名密码正确", resp);
					
					//登录成功,则将用户放入session中
					req.getSession().setAttribute("user", db_user);
				}else {
					CommonUtil.sendResponse(-1,  "密码不正确", resp);
				}
			}
			
		} else {
			
			CommonUtil.sendResponse(-1,  "用户名不存在", resp);
		}
	}
	
	public void logout(HttpServletRequest req,HttpServletResponse resp) {
		req.getSession().invalidate();
		CommonUtil.sendResponse(1, "安全退出", resp);
	}
	
	
	public void listUser(HttpServletRequest req,HttpServletResponse resp) {
		try {
			PageBean pageBean = new PageBean();
			pageBean.setRequest(req);
			List<User> list = service.listUser(user, pageBean);
			CommonUtil.sendResponse(0, "成功",pageBean.getTotal() , list, resp);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void addUser(HttpServletRequest req,HttpServletResponse resp) {
		try {
			MD5 md5 = new MD5();
			user.setPwd(md5.getMD5ofStr(user.getPwd()));
			service.addUser(user);
			CommonUtil.sendResponse(0, "增加用户成功", resp);
		} catch (Exception e) {
			e.printStackTrace();
			CommonUtil.sendResponse(-1, "增加用户失败", resp);
		}
	
	}
	
	
	public void updateUser(HttpServletRequest req,HttpServletResponse resp) {
		try {
			service.updateUser(user);
			CommonUtil.sendResponse(0, "修改用户成功", resp);
		} catch (Exception e) {
			e.printStackTrace();
			CommonUtil.sendResponse(-1, "修改用户失败", resp);
		}
	
	}
	
	
	public void deleteUser(HttpServletRequest req,HttpServletResponse resp) {
		try {
			service.deleteUser(user);
			CommonUtil.sendResponse(0, "删除用户成功", resp);
		} catch (Exception e) {
			e.printStackTrace();
			CommonUtil.sendResponse(-1, "删除用户失败", resp);
		}
	
	}
	
	
	public void resetPwd(HttpServletRequest req,HttpServletResponse resp) {
		try {
			service.resetPwd(user);
			CommonUtil.sendResponse(0, "密码修改成功", resp);
		} catch (Exception e) {
			e.printStackTrace();
			CommonUtil.sendResponse(-1, "密码修改失败", resp);
		}
	
	}
	

}
login.jsp(登录界面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
    <head>
		<%@include file="/common/head.jsp" %>
		<style>
		body {
			color: #;
		}
		
		a {
			color: #;
		}  
		
		a:hover {
			color: #;
		}
		
		.bg-black {
			background-color: #;
		}
		
		#bg-video {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: -1;
  }
		</style>
		
		<script type="text/javascript">
		layui.use(['layer', 'jquery'], function() {
			let layer=layui.layer;
			let $=layui.jquery;
			
			$("#login").click(function() {
				$.ajax({
					url: ctx+"/userAction.action?methodName=login",
					data: {
						loginName: $("#username").val(),
						pwd: $("#password").val()
					},
					dataType: 'json',
					type: 'post',
					success: function(data) {
						if(data.code == 1) {
							layer.msg(data.msg,{icon:1},function(){
								location.href="index.jsp";
							});
						}else{
							layer.msg(data.msg,{icon:5},function(){});
						}
					} 
				})
			});
			
		});
		</script>
</head>
  <body class="tx-login-bg">
<video id="bg-video" autoplay muted loop>
  <source src="${ctx}/images/4.mp4" type="video/mp4">
</video>
        <div class="tx-login-box">
            <div class="login-avatar bg-black">
			<img alt="" src="images/壁纸3.png" style="width:100px;height:65px;border-radius:50%"> 
		</div>
				<ul class="tx-form-li row">
					<li class="col-24 col-m-24"><p><input type="text" id="username" value="yaoyao" placeholder="登录账号" class="tx-input"></p></li>
					<li class="col-24 col-m-24"><p><input type="password" id="password" value="1234" placeholder="登录密码" class="tx-input"></p></li>
					<li class="col-24 col-m-24"><p class="tx-input-full"><button id="login" class="tx-btn tx-btn-big bg-black">登录</button></p></li>
					<li class="col-12 col-m-12"><p><a href="#" class="f-12 f-gray">新用户注册</a></p></li>
					<li class="col-12 col-m-12"><p class="ta-r"><a href="#" class="f-12 f-gray">忘记密码</a></p></li>
				</ul>
            </div>
    </body>
</html>
userManage.jsp (数据绑定,修改,删除)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%@ include file="/common/head.jsp" %>
<title>数据绑定</title>
<style>
.layui-inline {
	margin-top: 20px;
}
</style>
<script>
let table=null;
let $ = null;
var row = null;

layui.use(['table','jquery'], function(){
  table = layui.table;
  $ = layui.jquery;
  
  loadUsers();
  
  $("#queryUser").click(function() {
	  loadUsers();
  });
  
  table.on('tool(userTable)', function(e) {
	 // console.log(e);
	  row = e.data;
	  //console.log(row);
	  if('edit' == e.event) {
		  layer.open({
		        type: 2,  //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
		        title: '增加用户',
		        area: ['660px', '350px'],   //宽高
		        skin: 'layui-layer-rim',    //样式类名
		        content: ctx+'/jsp/system/userEdit.jsp'
		  });
	  }
	  if('del' == e.event) {
		 // alert("del = " + row.id);
		row = e.data;
	    //console.log(row);
		 layer.confirm("亲,真的删除吗?",function(index){
			 e.del();
			 layer.close(index);
			 //发送请求到后台调用删除方法
			 $.ajax({
				 url: ctx+"/userAction.action?methodName=deleteUser",
				 data: row,
				 type: 'post',
				 dataType: 'json',
				 success: function(resp){
					 if(resp.code == 0){
						 var index = parent.layer.getFrameIndex(window.name);
						 parent.layer.close(index);
						 loadUsers();
					 }
					 else{
						 alert("no");
					 }
				 }
			 })
		 })
		  
	  }
	  if('reset'==e.event){
			row = e.data;
		    //console.log(row);
			 layer.confirm("亲,真的重置吗?",function(index){
				 layer.close(index);
				 //发送请求到后台调用删除方法
				 $.ajax({
					 url: ctx+"/userAction.action?methodName=resetPwd",
					 data: row,
					 type: 'post',
					 dataType: 'json',
					 success: function(resp){
						 if(resp.code == 0){
							 var index = parent.layer.getFrameIndex(window.name);
							 parent.layer.close(index);
							 loadUsers();
						 }
						 else{
							 alert("no");
						 }
					 }
				 })
			 })
	  }
  });
  
  $("#addUser").click(function() {
	  row = null;
	  layer.open({
	        type: 2,  //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
	        title: '增加用户',
	        area: ['660px', '350px'],   //宽高
	        skin: 'layui-layer-rim',    //样式类名
	        content: ctx+'/jsp/system/userEdit.jsp'
	    });
  }); 
  
});

function loadUsers() {
	table.render({
	    elem: '#userTable',
	    url: ctx + '/userAction.action?methodName=listUser',
	    cols: [[
	      {field:'id', width:80, title: 'ID'},
	      {field:'name', width:180, title: '姓名', sort: true},
	      {field:'loginName', width:180, title: '登录名', sort: true},
	      {field:'roleName', width:180, title: '角色'},
	      {field: '', title: '操作', width: 250, toolbar:'#toolbar'}
	    ]],
	    page: true,
	    request: {
	    	pageName: 'page',
	    	limitName: 'rows'
	    },
	    method: 'post',
	    where: {
	    	name: $("#name").val()
	    },
	    loading: true,
	  });
}
</script>

</head>
<body>
    <!-- 查询条件 -->
	<div class="layui-inline">
	  <label class="layui-form-label">姓名:</label>
	  <div class="layui-input-block">
	    <input type="text" name="name" id="name" placeholder="名称" class="layui-input">
	  </div>
	</div>
	<div class="layui-inline">
	  <button class="layui-btn" id="queryUser"><i class="layui-icon layui-icon-search"></i>查询</button>
	  <button class="layui-btn layui-btn-normal" id="addUser"><i class="layui-icon layui-icon-add-1"></i>增加</button>
	</div>
  	
	<!-- 用户信息表格 -->
	<table class="layui-hide" id="userTable" lay-filter="userTable"></table>

	<!-- 工具条 -->
	<script type="text/html" id="toolbar">
       <button class="layui-btn layui-btn-sm" lay-event="edit">编辑</button>
       <button class="layui-btn layui-btn-sm" lay-event="del">删除</button>
       <button class="layui-btn layui-btn-sm" lay-event="reset">重置密码</button>
	</script>
</body>
</html>
userEdit.jsp(用户新增)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新增用户</title>
<%@include file="/common/head.jsp" %>

<script type="text/javascript">
let layer,form,$;
layui.use(['jquery', 'layer','form'],function() {
	layer=layui.layer,form=layui.form,$=layui.jquery;
	
	debugger;
	
	//获取用户信息,并回填在表单中,同时将name属性设置为只读,将密码隐藏(不允许在此处改密码)
	if(null!=parent.row){
		form.val('user',$.extend({}, parent.row||{}));
		$('#name').attr("readonly","readonly");
		$('#password').hide();
	}
	
	form.on('submit(user)', function(data){
		  
		  let id = $("#id").val();
		  
		  //如果有id则说明是修改,否则为新增
		  if(!id) {
			  //增加
			  $.ajax({
				  url: ctx + "/userAction.action?methodName=addUser",
				  data: data.field,
				  type: 'post',
				  dataType: 'json',
				  success: function(resp) {
					  if(resp.code == 0) {
						  layer.msg(resp.msg);
						  var index = parent.layer.getFrameIndex(window.name);
						  //再执行关闭
						  parent.layer.close(index); 
						  parent.loadUsers();
					  }
				  }
			  });
		  } else {
			  //修改
			  $.ajax({
				  url: ctx + "/userAction.action?methodName=updateUser",
				  data: data.field,
				  type: 'post',
				  dataType: 'json',
				  success: function(resp) {
					  if(resp.code == 0) {
						  layer.msg(resp.msg);
						  var index = parent.layer.getFrameIndex(window.name);
						  //再执行关闭
						  parent.layer.close(index); 
						  parent.loadUsers();
					  }
				  }
			  });
		  }
		  
	});
	
});
</script>

</head>

<body>
<div style="padding:10px;">
    <form id="user" class="layui-form layui-form-pane" lay-filter="user">
        <input type="hidden" name="id" id="id"/>
        <div class="layui-form-item">
            <label class="layui-form-label">用户名称</label>
            <div class="layui-input-block">
                <input type="text" id="name" name="name" autocomplete="off" placeholder="请输入用户名" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">用户角色</label>
            <div class="layui-input-block">
                <select name="rid">
                    <option value="">---请选择---</option>
                    <option value="1">管理员</option>
                    <option value="2">发起者</option>
                    <option value="3">审批者</option>
                    <option value="4">参与者</option>
                    <option value="5">会议管理员</option>
                </select>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">登录账号</label>
            <div class="layui-input-block">
                <input type="text" name="loginName" lay-verify="required" placeholder="请输入账号" autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item" id="password">
            <label class="layui-form-label">登录密码</label>
            <div class="layui-input-block">
                <input type="password" name="pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item" style="text-align:center;">
		   <button type="button" lay-submit="" lay-filter="user" class="layui-btn layui-btn-normal">保存</button>
		   <button type="reset" class="layui-btn">重置</button>
		</div>
    </form>
</div>

</body>

</html>

效果展示

登录界面

 绑定数据

 新增界面 

 删除界面

 修改界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/958026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于相空间重构的混沌背景下微弱信号检测算法matlab仿真,对比SVM,PSO-SVM以及GA-PSO-SVM

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 SVM 4.2 PSO-SVM 4.3 GA-PSO-SVM 5.算法完整程序工程 1.算法运行效果图预览 SVM: PSO-SVM: GA-PSO-SVM: 以上仿真图参考文献《基于相空间重构的混沌背景下微弱信号检测方法研究》 2.…

AAC和ADTS音频格式解析

1.ADTS是个啥 ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。 记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠也不能播。当时崩溃了,后来通过查找资料才知道。一般…

加速关断BJT开关电路

引言&#xff1a;BJT从导通到关闭存在一定的延时&#xff0c;在特定的场景中比如BJT电平转换&#xff0c;高频信号调理&#xff0c;这种延时存在很大的隐患&#xff0c;本节简述如何消除BJT的关断延时。 €1.延时的产生机理 类似于图15-1&#xff0c;晶体管从截止状态切换到导…

干货| ICML2023:作为自适应自进化规划器的扩散模型

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 作者介绍 梁志烜 香港大学计算机系直博一年级学生&#xff0c;导师为罗平教授&#xff0c;研究兴趣是生成式机器学习&#xff0c;Embodied AI和Data-centric learning。 报告题目 作为自适应自进化规划器的扩散…

本地部署体验LISA模型(LISA≈图像分割基础模型SAM+多模态大语言模型LLaVA)

GitHub地址&#xff1a;https://github.com/dvlab-research/LISA 该项目论文paper reading&#xff1a;https://blog.csdn.net/Transfattyacids/article/details/132254770 在GitHub上下载源文件&#xff0c;进入下载的文件夹&#xff0c;打开该地址下的命令控制台&#xff0c;…

耐蚀点蚀镀铜工艺

引言 随着5G技术的推出&#xff0c;导致电子电路和IC基板在设计中要求更高的密度。由于5G应用的性质&#xff0c;这些设计中的高可靠性和出色的电气性能也越来越重要。为了满足5G应用和其他下一代设备平台的需求&#xff0c;逐渐建立了使用改良半加成加工(mSAP)制造电路板的制…

前端将UTC时间格式转化为本地时间格式~~uniapp写法

UTC时间格式是什么 首先我们先简单的了解一下&#xff1a;UTC时间&#xff08;协调世界时&#xff0c;Coordinated Universal Time&#xff09;使用24小时制&#xff0c;以小时、分钟、秒和毫秒来表示时间 HH:mm:ss.SSSHH 表示小时&#xff0c;取值范围为00到23。mm 表示分钟…

photoshop,ps自带“不规则图形”在哪

下拉箭头&#xff08;2步&#xff09;后有个“齿轮”&#xff0c;点击齿轮&#xff0c;列表里有“全部”。

大数据HBase学习圣经:一本书实现HBase学习自由

学习目标&#xff1a;三栖合一架构师 本文是《大数据HBase学习圣经》 V1版本&#xff0c;是 《尼恩 大数据 面试宝典》姊妹篇。 这里特别说明一下&#xff1a;《尼恩 大数据 面试宝典》5个专题 PDF 自首次发布以来&#xff0c; 已经汇集了 好几百题&#xff0c;大量的大厂面试…

Springboot 接口方式硬通知实现ConfigurationProperties 、@Value 动态刷新

前言 看到这个文章标题&#xff0c;也许有的看官就觉得很多余&#xff0c; 因为Nacos 可以设置 NacosValue(value "${XXX}",autoRefreshed true) 实现动态刷新&#xff1b; 又因为cloud config的RefreshScope 实现动态刷新&#xff1b; 还有阿波罗...等 这…

MAVEN利器:一文带你了解MAVEN中的依赖管理

前言&#xff1a; 强大的构建工具——Maven。作为Java生态系统中的重要组成部分&#xff0c;Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用&#xff0c;Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…

iOS 使用coreData存贮页面的模型数据中的字典

我们使用coreData时候&#xff0c;会遇到较为复杂的数据类型的存贮&#xff0c;例如&#xff0c;我们要存一个模型&#xff0c;但是一个模型里面有个字典&#xff0c;这时候&#xff0c;我们该如何存贮呢 如图所示&#xff0c;一个对象中含有一个字典 我们实现一个公共的方法…

无涯教程-Flutter - 安装步骤

本章将指导您详细在本地计算机上安装Flutter。 在Windows中安装 在本节中&#xff0c;让无涯教程看看如何在Windows系统中安装 Flutter SDK 及其要求。 第1步 - 转到URL,https: //flutter.dev/docs/get-started/install/windows并下载最新的Flutter SDK。 第2步 - 将zip归档…

(leetcode1761一个图中连通三元组的最小度数,暴力+剪枝)-------------------Java实现

&#xff08;leetcode1761一个图中连通三元组的最小度数&#xff0c;暴力剪枝&#xff09;-------------------Java实现 题目表述 给你一个无向图&#xff0c;整数 n 表示图中节点的数目&#xff0c;edges 数组表示图中的边&#xff0c;其中 edges[i] [ui, vi] &#xff0c;…

电脑锁屏怎么设置?这5个方法都管用!

“我的电脑好像没有锁屏&#xff0c;就算我很久没用电脑也不会息屏。这是为什么呢&#xff1f;有什么方法可以为电脑设置锁屏吗&#xff1f;” 电脑锁屏是保护隐私和安全的重要手段。如果我们希望在不使用电脑时电脑自动进行锁屏&#xff0c;是可以手动设置的。那么&#xff0c…

EXPLAIN的用法

一、语法 EXPLAIN SQL语句二、各字段解释 1、table ● 单表&#xff1a;显示这一行的数据是关于哪张表的。 ● 多表关联&#xff1a;t1为驱动表&#xff0c;t2为被驱动表。 注意&#xff1a; 内连接时&#xff0c;MySQL性能优化器会自动判断哪个表是驱动表&#xff0c;哪个表…

什么是HTTPS协议?与HTTP协议区别?

一、协议科普 HTTP协议&#xff08;超文本传输协议&#xff09;是一种用于在计算机网络上传输超文本的应用层协议。它是一种客户端-服务器协议&#xff0c;允许客户端通过Web浏览器等方式向服务器发送请求&#xff0c;服务器则返回响应。HTTP协议是构建万维网&#xff08;WWW&…

使用pip命令安装库,装到其他环境中的问题。

问题描述&#xff1a;我们在pycharm中创建了新的虚拟环境&#xff0c;但是在其终端使用Pip命令安装库时&#xff0c;发现库却安装到了其他conda创建的环境中。图示安装gym库&#xff0c;刚开始安装到了其他地方&#xff0c;第二次正确安装。 原因分析&#xff1a;安装库时&…

USB fastboot

1 Samsung fastboot flashing unlock 2 bootloader增加解锁密码 diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c index e4d46e4..1b4b450 100755 --- a/app/aboot/aboot.c b/app/aboot/aboot.c -2613,6 2613,20 void cmd_oem_unlock(const char *arg, void *data,…

[ES]mac安装es、kibana、ik分词器

一、安装es和kibana 1、创建一个网络&#xff0c;网络内的框架(eskibana)互联 docker network create es-net 2、下载es和kibana docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1 3、运行docker命令部署单点eskibana&#xff08;用来操作es&#xff09; doc…