sms-ssm icon indicating copy to clipboard operation
sms-ssm copied to clipboard

关于数据库的一个问题

Open QponahuijiuY opened this issue 6 years ago • 2 comments

你好up主。 同软工大三学生,有一个问题想要请教一下 这个SSM本身设计的时候是没有注册功能的,应该是现在是实现了不同用户的注册。如果你要登陆是不是只有一种办法就是往数据库里头写数据,然后登陆的时候直接读取,现在我遇到了一个问题,就是数据库设计好了,存数据的时候存那个头像地址一直出现错误unknown column ‘portrait_path’ in 'field list'。我地址采用的是绝对路径,网页可以正常打开,但是我出入用户名密码验证码之后点击登陆之后就会显示服务器异常,然后idea后台报这个错误。 我想请教一下这个登陆的时候具体是怎么实现的。

第二个就是感觉数据库设计的不太好,只设置了name,我刚开始的时候说用户名是啥用什么登陆啊?最后发现原来可以直接用名字登陆,我觉得可以在添加一个username,以便混淆。

QponahuijiuY avatar Oct 16 '19 10:10 QponahuijiuY

第二个就是感觉数据库设计的不太好,只设置了name,我刚开始的时候说用户名是啥用什么登陆啊?最后发现原来可以直接用名字登陆,我觉得可以在添加一个username,以便混淆。

:grin: 如你所言,数据库设计是很简陋的(表之间缺少主外键约束及事务关联), 但上述言语我并没有读懂,所以我将你所阐述的问题的核心代码整理如下,请参考(希望往后将你的issues内容写清晰点)):

  • AdminMapper.java : 管理员身份验证( 业务层 )
// TODO: 6/18/2019 验证登录信息是否正确
Admin login(LoginForm loginForm);
  • AdminMapper.xml : 管理员身份验证( DAO层 )
<!-- 验证登录信息是否正确 -->
<select id="login" parameterType="loginForm" resultType="pers.huangyuhui.sms.bean.Admin">
    SELECT id,
           name,
           gender,
           password,
           email,
           telephone,
           address,
           portrait_path
    FROM tb_admin
    WHERE name = #{username}
    AND password = #{password}
</select>
  • SystemController.java : 管理员身份验证( 控制层 )
/**
     * @description: 验证用户登录信息
     * @param: loginForm
     * @param: request
     * @date: 2019-06-19 7:05 PM
     * @return: java.util.Map<java.lang.String, java.lang.Object>
     */
    @PostMapping("login")
    @ResponseBody
    public Map<String, Object> login(LoginForm loginForm, HttpServletRequest request) {

        // 校验验证码信息
        String vcode = (String) request.getSession().getAttribute("verifiCode");
        if ("".equals(vcode)) {
            result.put("success", false);
            result.put("msg", "长时间为操作,会话已失效,请刷新页面后重试!");
            return result;
        } else if (!loginForm.getVerifiCode().equalsIgnoreCase(vcode)) {
            result.put("success", false);
            result.put("msg", "验证码错误!");
            return result;
        }
        request.getSession().removeAttribute("verifiCode");

        // · · · · · ·
  • login.jsp : 管理员身份验证( 视图层 )
$(function () {
            //点击图片切换验证码
            $("#vcodeImg").click(function () {
                this.src = "getVerifiCodeImage?t=" + new Date().getTime();
            });
            //登录按钮事件
            $("#submitBtn").click(function () {
                //检查登录信息
                if ($('#username').val() === '') {
                    $.messager.alert("提示", "请输入用户名 !", "warning");
                } else if ($('#password').val() === '') {
                    $.messager.alert("提示", "请输入密码 !", "warning");
                } else if ($('#verifiCode').val() === '') {
                    $.messager.alert("提示", "请输入验证码 !", "warning");
                } else {
                    //提交用户的登录表单信息
                    var data = $("#form").serialize();
                    $.ajax({
                        type: "post",
                        url: "login",
                        data: data,
                        dataType: "json",
                        success: function (data) {
                // · · · · · ·

本项目目前的代码仅适用于初学SSM的同学,如想优化此项目请参该项目的优化计划:https://github.com/YUbuntu0109/SSM-SMS/projects

GoogTech avatar Oct 17 '19 05:10 GoogTech

  1. 下载项目后,打开idea(我的是2019.2),点open打开项目,等下好包,然后配置Tamact
  2. 然后运行可能会报错 在applicationContext.xml中会有这三处爆红 原因:找不到配置文件 解决办法:将resource文件重命名为resources并将resources下的文件都设置为“resources root”类型,除了mapper(设置办法:右击resources文件夹->Mark Directory as-> resources root) 知识扩展:https://blog.csdn.net/a772304419/article/details/79680775 (idea中文件夹的分类)

这部分解决了,运行了还会保错主要是数据库的问题

3接着修改数据库配置信息 先逐个复制表结构和语句,去掉编码部分(我的mysql是5.0.51) 要注意数据库的版本,如果和博主的版本不一样就要修改代码中的数据库配置信息 打开数据库配置文件将 com.mysql.cj.jdbc.Driver 改为 com.mysql.jdbc.Driver(如果数据库版本低于6的话) 然后修改user和password(看你的数据库了)和pom.xml文件中数据的版本 并在下面加上

mysql mysql-connector-java 5.0.5

4这样就差不多就好了,运行,但登录界面管理员可能打不上沟不碍事点一下就好 由于乱码的原因,使用要在数据库中新建用户

zhxldq avatar Jun 23 '20 14:06 zhxldq