MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写

1、实体entity

 package com.uplooking.entity;

 import java.io.Serializable;

 public class User implements Serializable {
private int id;
private String name;
private String pwd; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
} }

2、

 package com.uplooking.dao;

 import com.uplooking.entity.User;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class UserDao {
public User findByName(String name) {
PreparedStatement statement = null;
Connection con = null;
try {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、创建连接
String sqlUrl = "jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8";
//Driver表示Java驱动的街口
con = DriverManager.getConnection(sqlUrl,"root",""); //3、预编译,使用占位符
String sql = "select * from user where name= ? "; //4、创建连接状态
statement = con.prepareStatement(sql); //5、填充占位符 第1列
statement.setString(1, name); ResultSet set = statement.executeQuery(); User user = null;
if (set.next()) {
user = new User();
user.setId(set.getInt("id"));
user.setName(set.getString("name"));
user.setPwd(set.getString("pwd"));
return user; //结果集有用户,则返回用户
} }catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally {
try{
statement.close();
con.close();
} catch(SQLException e){
e.printStackTrace();
}
}
return null;
} }

3、服务

(1)服务接口

 package com.uplooking.service;

 import com.uplooking.entity.User;

 public interface UserService {
User login(String name,String pwd);
}

(2)服务实现

 package com.uplooking.service.imp;

 import com.uplooking.dao.UserDao;
import com.uplooking.entity.User;
import com.uplooking.service.UserService; public class UserServiceimp implements UserService {
private UserDao userDao=new UserDao();
@Override
public User login(String name, String pwd) {
User user=userDao.findByName(name);
if(user!=null&&pwd.equals(user.getPwd())){
return user;
}
return null;
}
}

4、用户响应

 package com.uplooking.action;

 import com.uplooking.entity.User;
import com.uplooking.service.UserService;
import com.uplooking.service.imp.UserServiceimp; public class UserAction {
public static void main(String[] args) {
UserAction userAction=new UserAction();
userAction.login("smith","123");
}
private UserService userService=new UserServiceimp();
public void login(String name,String pwd){
User user=userService.login(name,pwd);
if(user!=null){
System.out.println("用户:"+user.getName()+" 成功登陆。");
}else{
System.out.println("用户名或密码错误,登录失败。");
}
} }

执行结果:

二:进行方法抽象

1、将配置文件放入properties文件中。

 --properties文件名为:dbconfig.properties

 DBSRIVER=com.mysql.jdbc.Driver
DBURL=jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8
DBUSER=root
DBPWD= //密码为空

2、用构造函数直接加载配置信息

 1 public BaseDao() {
2 try{
3 properties =new Properties();
4 properties.load(this.getClass().getClassLoader().getResourceAsStream("com/uplooking/dbconfig.properties"));
5 DBRIVER=properties.getProperty("DBRIVER");
6 DBURL=properties.getProperty("DBURL");
7 DBUSER=properties.getProperty("DBUSER");
8 DBPWD=properties.getProperty("DBPWD");
9
10
11 }catch (IOException e){
12 e.printStackTrace();
13 }
14 }

3、将以下信息抽象到BaseDao中成为可以直接调用的getCon()方法

 //1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、创建连接
String sqlUrl = "jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8";
//Driver表示Java驱动的街口
con = DriverManager.getConnection(sqlUrl,"root","");

获取连接的getcon()方法

     /**
* @Method: getCon() 获取连接,当没有连接时或者连接已经关闭,调用方法重新获取连接
* @return: 返回一个连接
*/
public Connection getCon(){
try{
Class.forName(DBRIVER);
if(con==null){
con=DriverManager.getConnection(DBURL,DBUSER,DBPWD);
}else{
if(con.isClosed()){
con=DriverManager.getConnection(DBURL,DBUSER,DBPWD);
}
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
return con;
}

4、关闭连接

(1)将关闭连接抽象到BaseDao中

 con.close();
preparedstatement.close();

(2)closeCon()

 protected void closeCon(){
try {
if(preparedStatement!=null&&!preparedStatement.isClosed()){
preparedStatement.close();
} if(con!=null&&!con.isClosed()){
con.close();
} } catch (SQLException e) {
e.printStackTrace(); } }

5、通过id对数据进行删除

写入UserDaoB包中

 //按照id删除
public int deleteById(int id){
int result=0;
try{
//1、建立连接
con=super.getCon();
//sql语句
String sql="delete from user where id=?";
//2、用预编译执行sql语句
statement=con.prepareStatement(sql);
//3、填写占位符
statement.setInt(1,id);
//executeUpdate被用来执行delete,update和insert等操作
result=statement.executeUpdate();
super.closeCon(); }catch (SQLException e){
e.printStackTrace();
}
return result;
}

调用:

 package com.uplooking.action;

 import com.uplooking.dao.UserDao;

 public class JDBCTest {
public static void main(String[] args) {
UserDao userDao=new UserDao();
int result=userDao.deleteById(4);
System.out.println(result>0?"删除成功":"删除失败");
}
}

6、使用公共方法对MySQL中的数据使用executeUpadte()进行delete、update和insert等等DDL操作。

a、(1)在BaseDao中建立merger()公共方法按照id删除。

  /**           参照按照id删除核心代码
* //1、建立连接
* con=super.getCon();
* //sql语句
* String sql="delete from user where id=?";
* //2、用预编译执行sql语句
* statement=con.prepareStatement(sql);
* //3、填写占位符
* statement.setInt(1,id);
* //executeUpdate被用来执行delete,update和insert等操作
* result=statement.executeUpdate();
*/ /**
* @method:该方法是一个公共的方法,可以进行插入、删除和更新等操作
* @return:返回操作结果
* @parament:参数是需要执行的sql语句,和不可预估的操作类型和参数
*/
protected int merger(String sql,Object...objects){
int result=0;
try{
//1、连接
con=this.getCon();
//2、执行预编译sql语句
preparedStatement=con.prepareStatement(sql);
//3、填充占位符
for (int i = 0; i <objects.length ; i++) {
preparedStatement.setObject(i+1,objects[i]);
}
//差点忘记,要执行DDL语句
result=preparedStatement.executeUpdate(); }catch (SQLException e){
e.printStackTrace();
}finally {
this.closeCon();
}
return result;
}

(2)在UserDao中重写按照id删除数据库中的数据。

 public int deleteById(int id){
String sql="delete from user where id=?";
return super.merger(sql,id);
}

(3)调用方式与上述调用不变,删除成功。

b、插入操作

 public int insert(User user){
String sql="insert into user(id,name,pwd) values(?,?,?)";
return super.merger(sql,user.getId(),user.getName(),user.getPwd());
}

(2)调用

  //插入操作
User user=new User();
user.setName("huhu");
user.setPwd("123");
user.setId(4);
System.out.println(userDao.insert(user)>0?"插入成功":"插入失败");

c、

(1)更新操作

 public int update(User user){
String sql="update user set name=?,pwd=? where id=?";
return super.merger(sql,user.getName(),user.getPwd(),user.getId());
}

(2)调用

 //更新操作
User user=new User();
user.setName("hua");
user.setPwd("6");
user.setId(5);
System.out.println(userDao.update(user)>0?"更新成功":"更新失败");

JDBC MVC框架实现用户登录的更多相关文章

  1. MVC下判断用户登录和授权状态方法

    MVC下判断用户登录和授权状态方法 在我们日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization ...

  2. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  3. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  4. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  5. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  6. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  7. MVC过滤器实现用户登录验证

    前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...

  8. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  9. ASP.NET MVC实现单用户登录

    现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...

随机推荐

  1. (转载)Navicat Premium 12.1.16.0安装与激活

    声明:本文所提供的所有软件均来自于互联网,仅供个人研究和学习使用,请勿用于商业用途,下载后请于24小时内删除,请支持正版! 本文介绍Navicat Premium 12的安装.激活与基本使用.已于20 ...

  2. LightOJ 1268 Unlucky Strings(KMP+矩阵乘法+基础DP)

    题意 给出字符串的长度 \(n\) ,以及该字符串是由哪些小写字母组成,现给出一个坏串 \(S\) ,求存在多少种不同的字符串,使得其子串不含坏串. \(1 \leq n \leq 10^9\) \( ...

  3. mybatis结合mysql批量操作及查询sql

    MySQL数据库 批量操作主要使用的是Mybatis的foreach,遍历参数列表执行相应的操作,所以批量插入/更新/删除的写法是类似的,只是SQL略有区别而已.MySql批量操作需要数据库连接配置a ...

  4. 7、nginx的upstream及fastcgi模块应用

    ngx_http_proxy_module, ngx_http_upstream_module   ngx_http_proxy_module:实现反向代理及缓存功能 proxy_pass http: ...

  5. 【Ruby】【YAML】

    require "YAML" var = YAML.load(File.open('b.yml')) #哈希puts var.class #Hashprint var ," ...

  6. _faction

    一.自定义阵营独立于联盟,部落,联盟和部落玩家可以加入同一阵营 二._function_menu表可以配置自定义阵营开启 二.配合_pvp表,可以实现区域的自定义阵营PVP 三.配合_req表fact ...

  7. 动态LINQ(Lambda表达式)

    1.准备数据实体 public class Data { public string AccountNO { get; set; } public int Count { get; set; } } ...

  8. MVC6 发布IIS

    asp.net5的MVC6发布出来的结果和MVC5之前版本的相差太远了,直接在本地的IIS服务器上面是不可能运行的. 看了汤姆大叔的MVC6项目发布与部署,讲了很多丰富的知识点.但是对于立即要解决问题 ...

  9. maven阿里云镜像及本地仓库

    一.添加阿里云镜像 1 找到maven的安装目录,conf文件夹下的setting.xml文件 2 打开setting.xml文件,找到mirrors节点添加阿里镜像库地址: <mirror&g ...

  10. [转]QT中QString与string的转化,解决中文乱码问题

    QString str2qstr(const string str) { return QString::fromLocal8Bit(str.data()); } string qstr2str(co ...