springboot,ssm 代码生成器添加登录模块,优化生成速度,集成检索工具-everything

引言

  已经一个多月没有更新博客了,因为这阵子一直驻场出差,实在是没有时间,不过还是利用零碎的时间点完善了一下代码生成器,感谢大家的积极反馈,帮助修复了一些难以发现的bug,包括大小写敏感,sql关键字冲突等,这次更新主要是添加了登录模块,也就是说现在生成器已经可以从真正意义上来生成一个完整的项目,其次优化了代码的生成速度,集成了比较实用的文件检索工具-everything,话不多说,让我们一起来看一下把。

添加登录模块

  生成器之前在配置好系统相关的必要信息后,会生成一个较为完整的后台管理系统,但是一个完整的后台系统必然少不了登录这一功能模块,所以本次更新特意加入了登录功能,由于时间比较紧,所以登录功能的用户名和密码现在是直接在代码中写死的,并且登录界面的模板也只有一个并且很简陋,以后再抽时间完善吧。。。
  这次主要添加了两个ftl模板,loginHtml.ftl 和 loginController.ftl ,即分别为登录界面的模板和登录功能的控制层,loginHtml.ftl 源码如下:

<#if jsFrameWork == "jquery">
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">

<head>
  <meta charset="UTF-8">
  <title>登录</title>
  
  <link rel="stylesheet" th:href="@{/mystatic/bootstrap/css/bootstrap.min-${clientStyleVal}.css}">
  <link rel="stylesheet" th:href="@{/mystatic/css/style.css}">
  
</head>

<body>

    <div class="wrapper" id="loginModel">
		<form class="form-signin">
			<h2 class="form-signin-heading">请登录</h2>
			<input type="text" class="form-control" 
				placeholder="用户名" required="" autofocus="" id='userName'/> <input
				type="password" class="form-control" 
				placeholder="密码" required="" id='password'/> <input type="checkbox"
				value="remember-me" id="rememberMe">
			记住我<br /> <br />
			<button class="btn btn-lg btn-primary btn-block" type="button" id="loginBT">登录</button>
		</form>
	</div>
  
<script th:src="@{/mystatic/jquery/jquery.min.js}"></script>
<script th:src="@{/mystatic/js/jqAlert.js}"></script>
<script th:src="@{/mystatic/js/ajaxFactory.js}"></script>

<script>
	var basePath = "/${projectName}";

	var user = localStorage.getItem("user");

	if (user != null && user != undefined) {
		$("#userName").val(user.userName);
		$("#userName").val(user.password);
	} 

	$("#loginBT").on("click",function() {
		
		$z.ajaxStrAndJson({
			url : basePath + "/login/doLogin",
			data : {
				userName : $("#userName").val(),
				password : $("#password").val()
			},
			success : function(data) {
				if (data.result == "failed") {
					$.MsgBox.Alert("消息", "用户名或密码错误!");
					return;
				}
	
				var rememberMe = $("#rememberMe").prop("checked");
				//如果点了记住我,则存储到本地
				if (rememberMe) {
					localStorage.setItem("user", {
						userName : userName,
						password : password
					})
				} else {
					localStorage.removeItem("user");
				}
	
				window.location.href = basePath + '/home'
	
			}
		});
		
	
	} );
	
</script>

</body>

</html>
</#if>

<#if jsFrameWork == "vue">
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">

<head>
  <meta charset="UTF-8">
  <title>登录</title>
  
  <link rel="stylesheet" th:href="@{/mystatic/bootstrap/css/bootstrap.min-${clientStyleVal}.css}">
  <link rel="stylesheet" th:href="@{/mystatic/css/style.css}">
  
</head>

<body>

    <div class="wrapper" id="loginModel">
		<form class="form-signin">
			<h2 class="form-signin-heading">请登录</h2>
			<input type="text" class="form-control" v-model="userName"
				placeholder="用户名" required="" autofocus="" /> <input
				type="password" class="form-control" v-model="password"
				placeholder="密码" required="" /> <input type="checkbox"
				value="remember-me" id="rememberMe" v-model="rememberMe">
			记住我<br /> <br />
			<button class="btn btn-lg btn-primary btn-block" type="button" @click = "login()">登录</button>
		</form>
	</div>

<script th:src="@{/mystatic/jquery/jquery.min.js}"></script>
<script th:src="@{/mystatic/js/jqAlert.js}"></script>
<script th:src="@{/mystatic/js/ajaxFactory.js}"></script>
<script th:src="@{/mystatic/vue/vue.min.js}"></script>

<script>
	var basePath = "/${projectName}";

	var user = localStorage.getItem("user");

	var userName = '';
	var password = '';
	
	if (user != null && user != undefined) {
		userName = user.userName;
		password = user.password;
	} 

	var loginVue = new Vue({
		el : "#loginModel",
		data : {
			userName : userName,
			password : password,
			rememberMe : ''
		},
		methods : {
			login : function() {
				$z.ajaxStrAndJson({
					url : basePath + "/login/doLogin",
					data : {
						userName : this.userName,
						password : this.password
					},
					success : function(data) {
						if (data.result == "failed") {
							$.MsgBox.Alert("消息", "用户名或密码错误!");
							return;
						}

						//如果点了记住我,则存储到本地
						if (this.rememberMe) {
							localStorage.setItem("user", {
								userName : this.userName,
								password : this.password
							})
						} else {
							localStorage.removeItem("user");
						}

						window.location.href = basePath + '/home'

					}
				});
			}
		}
	});
</script>


</body>

</html>
</#if>

  代码比较容易理解,js部分保持原样就可以,需要替换的地方也很少,例如项目名称和请求名称需要动态替换,其他基本没有任何变化,使用freemarker进行替换还是很方便的,一行代码就可以搞定,不明白的朋友可以自行百度freemarker模板的用法,生成器的核心就在于freemarker模板的灵活运用。
  loginController.ftl 的源码如下所示:

package ${packageName}.controller;

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

import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import ${packageName}.entity.User;

@RestController
@RequestMapping("/login")
public class LoginController {

	
	@RequestMapping("/doLogin")
	public Map<String, Object> doLogin(@RequestBody User user, HttpSession session) {

		Map<String, Object> resultMap = new HashMap<>();

		if ("admin".equals(user.getUserName()) && "root".equals(user.getPassword())) {

			session.setAttribute("user", user);
			resultMap.put("result", "success");
			return resultMap;
		}
		resultMap.put("result", "failed");
		return resultMap;

	}

	@RequestMapping("/doLogOut")
	public void doLogOut(HttpSession session) {

		session.removeAttribute("user");

	}

}

  代码想必大家一看便可明白,经典的springMVC控制层写法。

添加实用工具—everything

  everything是一个本地资源检索工具,有很多朋友文件放的比较杂乱,下次用的时候很难找到,而且windows系统自带的检索功能奇慢无比,everything可以帮助解决这个问题,他可以在几秒不到的时间里迅速搜索到你在本地想要查找的文件,十分方便快捷,在这里主要是安利一下,相信也有不少朋友在用这个软件。这里我把everything集成到了代码生成器之中。效果如下:

在这里插入图片描述

修复的bug以及优化

  感谢大家的积极反馈,让生成器的功能变得愈加健壮完善。在这里说两个数据库方面容易让人忽略的bug。

bug1 数据库大小写敏感问题

  在平时的开发中,最常用的数据库当属mysql和oracle,这两款数据库软件默认都是忽略大小写的,所以在程序设计的时候我并没有把大小写敏感的事情考虑进去,统一都按小写进行处理。后来有朋友反馈查询表的时候提示错误,后来发现是由于大小写敏感问题导致的,因为他的数据库设置了大小写敏感,所以就会出现这种问题。

bug2 数据库关键字冲突问题

  众所周知,数据库中有许多关键字,比如where,like,select等等,通常情况下表名和字段的命名我们都会避开这些关键字,但是后来有一个朋友反馈他使用生成器的时候数据库里的其它表没有问题,但只要配置上名称为‘order’的表就会提示错误,后来发现原来是由于关键字冲突导致的,因为数据库中有关键字为‘order by’,所以后来在mysql中我把表名使用 ` 引起来,oracle中使用 “ 引起来,就没有再出现此类的问题,字段我还是保持原样输出,主要是改起来有些麻烦,哈哈。。。
  这两个虽然都是小bug,但是一旦遇到此类问题,确实是不容易排查,所以在这里特意分享一下
  另外,对于生成器的代码生成速度进行了优化,过去在生成代码的时候会从服务器拉取需要的静态资源文件,现在会直接在一开始把静态资源文件下载到本地,大大加快了生成速度。

整体运行效果

  在这里我们主要看一下登录界面的效果,配置上我就按最简单的单表进行相应配置咯,如下,还是熟悉的界面:
主界面
  配置数据项的图就不贴了,直接运行生成的项目,效果如下:
登录界面
  这是登录界面的样式,相对比较简陋,后续再找几套登录模板。。。
系统管理界面
  系统管理界面跟之前基本没有变化,多了一个退出登录的选项。
  好了,这就是本次更新的主要内容,年底实在是太忙了。。。生成器还有许多需要完善优化的地方,欢迎各位下载体验!
  最新版下载地址:点击此处下载
  网盘链接:https://pan.baidu.com/s/1L5gP5sH3LFKA8ZPurPmGhQ
  提取码:wxpp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值