基于SSM+layui实现用户注册新增功能

2023-11-07

注册新增原理:判断用户名与数据表中信息是否相同,相同则返回用户新增失败,反之新增成功

注册用户密码使用md5加密方式存储到数据库

一、 实现效果

用户新增界面:

在这里插入图片描述

二、数据表—user

在这里插入图片描述

三、代码实现

1、bean层—UserInfo

@AllArgsConstructor
@NoArgsConstructor
@Data
public class UserInfo implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -6943242013517012358L;
	private Integer id;
	private String userId;
	private String userName;
	private String password;
	@JsonFormat(timezone = "GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
	private Date registerTime;
	private Boolean state;
}

2、mapper层—UserInfoMapper.java UserInfoMapper.xml

UserInfoMapper.java
public interface UserInfoMapper {
	public void insertUserInfo(UserInfo userInfo);
}
UserInfoMapper.xml
<insert id="insertUserInfo" parameterType="UserInfo">
		insert into user (user_id,user_name,password,register_time,state)
		values(#{userId},#{userName},#{password},#{registerTime},#{state})
</insert>

3、service层—UserInfoService.java UserInfoServiceImpl.java

UserInfoService.java
public interface UserInfoService {
    public void insertUserInfo(UserInfo userInfo);
    public String register(UserInfo userInfo);
}
UserInfoServiceImpl.java
@Transactional
@Service
public class UserInfoServiceImpl implements UserInfoService{
	
	@Autowired
	private UserInfoMapper userInfoMapper;
    
    @Override
	public void insertUserInfo(UserInfo userInfo) {
		userInfoMapper.insertUserInfo(userInfo);
	}
    
    @Override
	public String register(UserInfo userInfo) {
		UserInfo exitUser = userInfoMapper.findUserInfoByName(userInfo.getUserName());
		if (exitUser==null) {
			userInfoMapper.insertUserInfo(userInfo);
			return "新增成功";
		}else {
			return "新增错误:用户已存在";
		}
	}
}

4、controller层—UserInfoController.java

@Controller
public class UserInfoController {
    
    @Autowired
	private UserInfoService userInfoService;
    
    @RequestMapping("/register")
	public String register(Integer id,String userId,String userName,String password,
			Date registerTime,Boolean state,HttpSession session) {
		registerTime = new Date();
		UserInfo userInfo = new UserInfo(id,userId,userName,EncryptUtil.md5Crypt(password),registerTime,state);
		String msg = userInfoService.register(userInfo);
		if (msg.contains("成功")) {
			session.setAttribute("msg", msg);
			return "list_user";
		}else {
			return "register";
		}
	}
}

5、md5加密类—EncryptUtil.java

public class EncryptUtil {
	public final static String md5Crypt(String inputString) {
		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		try {
			byte[] input = inputString.getBytes();

			// 获得MD5摘要算法的 MessageDigest 对象
			MessageDigest md5Instance = MessageDigest.getInstance("MD5");

			// 使用指定的字节更新摘要
			md5Instance.update(input);

			// 获得密文
			byte[] md5 = md5Instance.digest();

			// 把密文转换成十六进制的字符串形式
			int j = md5.length;
			char str[] = new char[j * 2];
			int k = 0;
			for (int i = 0; i < j; i++) {
				byte byte0 = md5[i];
				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
				str[k++] = hexDigits[byte0 & 0xf];
			}
			return new String(str);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public final static String jm(String instr) {
		char[] charArray = instr.toCharArray();
		for(int i =0;i<charArray.length;i++) {
			charArray[i] = (char)(charArray[i] ^ 't');
		}
		String k = new String(charArray);
		return k;
	}

}

6、注册界面—register.jsp

<div style="padding: 30px;">
	<form class="layui-form layui-form-pane" action="register">
		<div class="layui-form-item">
			<label class="layui-form-label">用户ID</label>
			<div class="layui-input-inline">
				<input type="text" name="userId" lay-verify="required"
					placeholder="请输入用户ID" autocomplete="off" class="layui-input">
			</div>
		</div>

		<div class="layui-form-item">
			<label class="layui-form-label">用户名</label>
			<div class="layui-input-inline">
				<input type="text" name="userName" lay-verify="userName"
					placeholder="请输入用户名" autocomplete="off" class="layui-input">
			</div>
		</div>

		<div class="layui-form-item">
			<label class="layui-form-label">密码</label>
			<div class="layui-input-inline">
				<input type="password" name="password" lay-verify="pass"
					placeholder="请输入密码" autocomplete="off" class="layui-input">
			</div>
			<div class="layui-form-mid layui-word-aux">请务必填写密码</div>
		</div>

		<div class="layui-form-item">
			<label class="layui-form-label">确认密码</label>
			<div class="layui-input-inline">
				<input type="password" name="repassword" placeholder="请再次输入密码"
					autocomplete="off" class="layui-input">
			</div>
			<div class="layui-form-mid layui-word-aux">请务必填写密码</div>
		</div>

		<div class="layui-form-item" pane="" style="width: 304px">
			<label class="layui-form-label">状态</label>
			<div class="layui-input-block">
				<input type="radio" name="state" value="true" title="管理员" checked="">
				<input type="radio" name="state" value="false" title="用户">
			</div>
		</div>

		<div class="layui-form-item">
			<button class="layui-btn" lay-submit="" lay-filter="save">保存</button>
		</div>
	</form>
</div>

	<script src="layui/layui.all.js" charset="utf-8"></script>
	<!-- 注意:如果你直接复制所有代码到本地,上述 JS 路径需要改成你本地的 -->
	<script>
		layui.use(
						[ 'form', 'layedit', 'laydate' ],
						function() {
							var form = layui.form, layer = layui.layer, layedit = layui.layedit, laydate = layui.laydate;

							//日期
							laydate.render({
								elem : '#date'
							});
							laydate.render({
								elem : '#date1'
							});

							//创建一个编辑器
							var editIndex = layedit.build('LAY_demo_editor');

							//自定义验证规则
							form.verify({
								userName : function(value) {
									if (value.length < 4) {
										return '登录名至少得4个字符啊';
									}
								},
								pass : [ /^[\S]{4,12}$/, '密码必须4到12位,且不能出现空格' ],
								content : function(value) {
									layedit.sync(editIndex);
								}
							});

							//监听指定开关
							form.on('switch(switchTest)', function(data) {
								layer.msg('开关checked:'
										+ (this.checked ? 'true' : 'false'), {
									offset : '6px'
								});
								layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF',
										data.othis)
							});

							//监听提交
							form.on('submit(save)', function(data) {
								if(data.field.password!=data.field.repassword){
									layer.alert('两次输入密码不一致'), {
										title : '警告'
									}
									return false;
								}else{
									window.parent.location.reload();
									return true;
								}						
							});

							//表单取值
							layui.$('#LAY-component-form-getval').on('click',
									function() {
										var data = form.val('example');
										alert(JSON.stringify(data));
									});
						});
</script>

7、使新增界面在list_user.jsp界面弹窗显示

layer.open({
			type:2,
			title:'新增用户',
			area:['500px','400px'],
			shade:0.3,
			maxmin:true,
			offset:'auto',
			anim:2,
			content:'register.jsp'
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于SSM+layui实现用户注册新增功能 的相关文章

  • 用Java将图像添加到数据库

    我正在尝试将图像添加到 mysql 数据库中的 BLOB 字段 图像大小将小于 100kb 但是我遇到了问题 想知道将这些数据添加到数据库的更好方法是什么 com mysql jdbc MysqlDataTruncation 数据截断 第
  • Cassandra Pojo Sink Flink 中的动态表名称

    我是 Apache Flink 的新手 我正在使用 Pojo Sink 将数据加载到 Cassandra 中 现在 我在以下命令的帮助下指定表和键空间名称 Table注解 现在 我想在运行时动态传递表名称和键空间名称 以便可以将数据加载到用
  • 在 Java 中实现排列算法的技巧

    作为学校项目的一部分 我需要编写一个函数 该函数将接受整数 N 并返回数组 0 1 N 1 的每个排列的二维数组 该声明看起来像 public static int permutations int N 该算法描述于http www usn
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 如何操作指定列上的 JTable 返回值?

    我有一个 JTable 有两列 可编辑的JTable 当用户在第二列中输入内容时 我的要求如下 用户只能输入数字和逗号 当用户输入错误字符时 会发出蜂鸣声 Toolkit getDefaultToolkit beep 我该如何实现这一目标
  • 如何找出已使用的 JAR?

    在更大的项目中 我们可能会使用大量的 JAR 如何找出项目 而不是整个项目 中的某个模块 包正在使用哪些 JAR 有什么工具 技术等吗 较大的项目通常使用类似的构建工具maven http maven apache org or ant h
  • JUnit 测试方法无法返回值

    为什么 JUnit 测试方法无法返回值 文档 https junit org junit5 docs current user guide writing tests classes and methods说 强调我的 测试方法和生命周期方
  • 当目标是属性时,@Throws 不起作用

    在看的同时这个问题 https stackoverflow com q 47737288 7366707 我注意到申请 Throws to a get or setuse site 没有影响 此外 唯一有效的目标 for Throws ar
  • 如何在 Java 中用 \n 替换 \\n

    我有一个string test first n middle n last 现在我想更换所有 n by n 我试过了test replaceAll n n and test replaceAll n n 但它们不起作用 有人有解决办法吗 T
  • Java SWT 用户输入验证

    在 SWT 中进行用户输入验证时 Java 约定是什么 我读到有 FieldEditors 它们是非常方便的字段 但遗憾的是仅适用于首选项和对话框 我还了解到有一个 IValidator 接口 但它经常与数据绑定一起使用 就我而言 我的大多
  • kafka消费端Offsets的一致性

    我有复制因子为 3 的卡夫卡主题min insync replicas 2 一个向该主题发送 X 条消息的生产者acks all 一段时间后 1 分钟内 在所有消息发送到主题后 将使用 java kafka 客户端为此主题创建新的消费者 使
  • hibernate session 的 get() 和 load() 方法在获取方面有什么区别?

    get 和 load 方法有什么区别 关于数据获取方法 public static void main String args SessionFactory factory new Configuration configure build
  • 在单独的模块中使用 Spring AOP 方面

    我在一个 Maven 项目模块中有一个方面 com x NiceAspect 在一个单独的 Maven 模块中有一个类 com x NiceClass 这些模块具有相同的 POM 父级 共同创建一个项目 我想要实现的目标是拥有一个通用的方面
  • 表达式的类型必须是数组类型,但它解析为浮点数

    当我编写 Java 代码时 我遇到了困难 我觉得我不知何故把这个概念弄乱了 就像我不确定这一点 void setScore float sco sco score public void setScore float sco int id
  • SWIG C 函数指针和 JAVA

    我有一些 C 代码 其中一个方法有一个函数指针作为参数 我正在尝试在我的 Android 应用程序中使用 C 代码 我决定使用 SWIG 来完成生成我需要的 java 文件的所有工作 一切都适用于常规函数 没有函数指针作为参数的函数 但我不
  • 为什么ArrayList的非静态内部类SubList有一个成员变量“parent”?

    java util ArrayList SubList 是 java util ArrayList 的非静态内部类 这意味着它保存对其封闭类的引用 我们可以使用ArrayList this来访问java util ArrayList的成员
  • 如何通过sparkSession向worker提交多个jar?

    我使用的是火花2 2 0 下面是我在 Spark 上使用的 java 代码片段 SparkSession spark SparkSession builder appName MySQL Connection master spark ip
  • 使用基于Optional内容的流

    我从不受我控制的服务获取可能为空的地图 并且想要处理它 比方说 过滤 映射并减少到我需要的单个元素 问题 是否有从Optional到Stream的 链接 我尝试过 除其他外 return Optional ofNullable getMap
  • POJO 支持使用omnifaces 自动完成primefaces

    我正在尝试在我的项目中使用 primefaces 自动完成组件 以避免将特定转换器写入我尝试使用的每个列表对象全能面孔 http showcase omnifaces org converters ListConverter如建议的here
  • 如何在 Android 上设置 Google Drive API?

    我一直在尝试将 Google Drive 功能集成到我的应用程序中 但我无法使用任何内置功能 因此我相信我要么错过了一个步骤 要么做得不正确 我正在遵循官方的 Google 开发者指南 https developers google com

随机推荐