学了一段时间的Java了,思量着做一点简单的小模块的东西吧,于是就有了下面的这个简单的小案例。


大致实现的功能就是注册于登录还有就是用到了一点,分层思想。仅此而已,所以非常的适合新手围观。

建立好数据库

我这里使用的是MySQL数据库,当然了,你可以选择任何你喜欢的你熟悉的数据库管理软件,只不过在建立数据库连接的时候细节不一样罢了。其作用都是一样的。

首先是建表语句咯。

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50624
Source Host           : localhost:3306
Source Database       : database01

Target Server Type    : MYSQL
Target Server Version : 50624
File Encoding         : 65001

Date: 2016-04-22 20:01:09
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `tb_user`
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(15) NOT NULL,
  `password` varchar(20) NOT NULL,
  `email` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

然后是我的目录结构



从这里就可以简单的看到分层的脉络了吧。

导包

千万千万,记得导入MySQL的jar包,然后BuildPath这是必不可少的一步。否则的话,项目就进行不下去咯。

然后是思路,这也是最核心的地方

之所以分层,就是为了解决开发过程中的迷茫。这就好比我们盖房子,如果没有一个框架,随心所欲的按照自己的思路来盖房子,有可能在盖房子的中途就会出现各种意想不到的问题,到最后即使是盖出了房子,恐怕也不是我们心目中想要的结果吧。而分层就相当于搭建好一个框架,然后我们按照一种模式,在本模块上进行“丰富”,到最后把这些模块整合起来就成为了我们所希望的了。这同时也是面向对象编程的核心思想。在面向对象的世界里,万事万物皆是对象。有时候我们感觉迷茫,不是因为事物本身,而是我们面向对象解决问题的思路还没有打开罢了。

核心就是MVC设计理念,每一个都肩负着自己的使命,完成不同的任务。Model + View + Controller 结合是我们今后开发软件必不可少的一项能力。所以我们一定要在平时锻炼自己这方面的思维,这样才能游刃有余。

  • domain:即所谓的实体层,也成为bean层,“盛放”的就是一个对象,我们的数据元。

  • dao:即Data Access Object,数据访问对象。肩负着和底层(比如数据库,网络请求等等)打交道的责任。

  • service:业务逻辑层,主要是一个桥梁的作用,连接着DAO层和View层,实现我们在View层中进行的业务逻辑。

  • view:视图层,直接和用户打交道的层。给用户展现一个视图,方便用户使用软件,和直接进行操作。

  • util: 工具包。我们常用的比如数据库utils,网络请求utils,ioutils等等吧,都可以放到这里面来,给开发带来方便快捷的使用,也在一定程度上减少了重复性代码的编写,利于代码的维护。

  • test: 如果说在软件开发过程中,有一个包必不可少。那么这一定是test包,我们可以使用System.out.println的方式调试,也可以打断点的方式,或者使用JUnit的方式来完成对某一段代码编写完成后的简单的测试。所有的测试都是有必要的,因为很有可能一个很小的前期的bug,就会引起后期开发过程中的致命的危险。

代码展示

由于代码比较多,我就列出来几个简单的类吧,方便查看。

bean类如下User.java:

package domain;

import java.io.Serializable;

public class User implements Serializable {

    private String username;
    private String password;
    private String email;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + ", email=" + email + "]";
    }
    public User(String username, String password, String email) {
        super();
        this.username = username;
        this.password = password;
        this.email = email;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

DbUtils.java:

package utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbUtils {

    private static String URL = "jdbc:mysql://localhost:3306/database01";
    private static String DRIVER = "com.mysql.jdbc.Driver";
    private static String ROOT = "root";
    private static String PASSWORD = "mysql";
    private static Connection conn = null;

    /**
     * 获得数据库连接对象
     * @return
     */
    public static Connection getConnection() {

        try {
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, ROOT, PASSWORD);
            if(conn != null ) {
                return conn;
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(conn == null ){
                throw new RuntimeException("Sorry, Connection is null! Please Check it!");
            }
        }
        return null;
    }

    /**
     * 释放数据库连接对象,避免出现资源的空等和浪费
     */
    public void releaseConnection() {

        try {
            if(conn != null ){
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

UserDao.java:

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import domain.User;
import utils.DbUtils;

public class UserDao {

    /**
     * 与数据库打交道的数据访问层,注册用户方法的实现
     * @param user
     * @return
     */
    public boolean register(User user) {

        if(isUserExist(user.getUsername())){
            return false;
        }

        Connection conn = null;
        try {
            conn = DbUtils.getConnection();
            String sql = "insert into tb_user(username,password,email) values(?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            ps.setString(3, user.getEmail());

            boolean counts = ps.execute();
            if (counts) {
                return true;
            } else {
                return false;
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e2) {
                // TODO: handle exception
            }
        }

        return false;
    }

    /**
     * 登录
     * 只有在用户名和密码都匹配的情况下才能获取登陆成功的权限
     * @param username
     * @param password
     * @return
     */
    public boolean login(String username, String password) {

        Connection conn = null;
        try {
            conn = DbUtils.getConnection();
            String sql = "select count(*) totalCount from tb_user where username='" + username
                    + "' and password= '" + password + "'";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet result = ps.executeQuery();
            boolean counts = result.next();
            int totalCount = 0;
            if (counts) {
                totalCount = result.getInt("totalCount");
                if(totalCount>=1){
                    return true;
                }else {
                    return false;
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return false;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////这个方法存在问题:不管用户名是什么都会返回一个true,然而这显然不是我想要的结果

    /**
     * 给定一个用户名,判断该用户名是否已经被注册
     *
     * @param username
     * @return
     */
    public boolean isUserExist(String username) {
        Connection conn = null;
        try {

            conn = DbUtils.getConnection();
            String sql = "select password from tb_user where username='" + username + "'";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet result = ps.executeQuery();
            boolean userPassword = result.next();
            if(userPassword){
                return true;
            }else{
                return false;
            }

        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return true;
    }

}

总结

本次代码量不是很大,而且不是很难,就是些简单的和数据库操作,Swing创建,以及MVC架构的实现。可能在代码中有些地方做得不够好,希望大家予以批评指正。

下面附上这个项目的打包的源码,有需要的博友可以拿去参考一下拙作。





项目源码下载链接

MySQL设计软件登录模块的更多相关文章

  1. 如何设计App登录模块?

    1.熟悉目前常见的手机APP登陆方式 ① 账号登陆(手机.邮箱) ② 第三方登陆(微信,QQ,微博) ③ 一键快捷登录(工具类,如不记单词) ④ 游客登陆(bbs) ⑤ demo测试登陆(如友盟等) ...

  2. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

  3. Web应用程序系统的多用户权限控制设计及实现-登录模块【4】

    通过前三个模块的介绍,把web权限系统开发所需要的基本类,Css文件,EasyUI框架等准备好后,就可以着手开始系统的编码了. 登陆模块是权限处理系统的关键,根据输入用户的的信息,可自动从数据库中加载 ...

  4. 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)

    遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...

  5. express框架+jade+bootstrap+mysql开发用户注册登录项目

    完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...

  6. WinForm EF+MySql企业管理软件C/S项目实战演练

    一.课程介绍 我们都知道在软件架构方式分为:C/S和B/S两类.这里阿笨不谈论两种软件架构的优劣之分,因为它们各有千秋,用于不同场合.一位伟大的讲师曾经说过一句话:事物存在即合理!录制这堂课程的目的就 ...

  7. MySQL 设计与开发规范

    MySQL 设计与开发规范 1 目的 本规范的主要目的是希望规范数据库设计与开发,尽量避免由于数据库设计与开发不当而产生的麻烦:同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保 ...

  8. 读<<领域驱动设计-软件核心复杂性应对之道>>有感

    道可道,非常道. 名可名,非常名. 无名天地之始,有名万物之母. ---老子 关于标题 好久没写东西了,动笔的动机是看完了一本书,想写点总结性的东西,一是为了回顾一下梳理知识点,二是为了日后遗忘时能有 ...

  9. 免费的ER 设计软件调研

    目标: 找到一个免费的ER 设计软件, 适合数据仓库项目开发. 结果: 经初步调研, Oracle的 SQL Developer Data Modeler基本满足需求. 但在功能和操作性等方面, 较P ...

随机推荐

  1. poj 1696 叉积理解

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3967   Accepted: 2489 Descrip ...

  2. Polya计数

    Let it Bead Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5365   Accepted: 3585 Descr ...

  3. Codeforces Round #430 B. Gleb And Pizza

    Gleb ordered pizza home. When the courier delivered the pizza, he was very upset, because several pi ...

  4. sql的left join 、right join 、inner join之间的区别

    sql中left join .right join .inner join之间的区别 left join (左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 : right join (右 ...

  5. 索引法则--LIKE以%开头会导致索引失效进而转向全表扫描(使用覆盖索引解决)

    Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...

  6. jquery 引号问题

    varFrozenColumns="[[{'field':'CZ','title':'操作','width':80,'align':'center','formatter':function ...

  7. 在Spring Boot中使用Spring Security实现权限控制

    丢代码地址 https://gitee.com/a247292980/spring-security 再丢pom.xml <properties> <project.build.so ...

  8. Java阻塞队列的实现

    阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列 ...

  9. SpringBoot学习之启动探究

    SpringApplication是SpringBoot的启动程序,我们通过它的run方法可以快速启动一个SpringBoot应用.可是这里面到底发生了什么?它是处于什么样的机制简化我们程序启动的?接 ...

  10. supervisor使用,配置和安装(包括监控守护进程httpd,keepalived)

    yum -y install supervisor(如果安装不成功,需要更新源,yum -y install epel) 或者: wget --no-check-certificate https:/ ...