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. Sample Classification Code of CIFAR-10 in Torch

    Sample Classification Code of CIFAR-10 in Torch from: http://torch.ch/blog/2015/07/30/cifar.html req ...

  2. vue的全局方法和局部方法

    var infiniteScroll = require('vue-infinite-scroll') 等价写法 import infiniteScroll from 'vue-infinite-sc ...

  3. 微服务架构与实践3_api

    场景分析 描述产品服务,基于REST的接口 表述性状态转移(Representational State Transfer,REST) 任务拆分 将整体要做的工作内容划分成小的任务: 统一时间聚焦一个 ...

  4. Druid介绍

    Druid (大数据实时统计分析数据存储) Druid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储.这个系统集合了一个面向列存储的层,一个分布式.shared-nothing的架构,和一 ...

  5. HDU 3635 Dragon Balls(带权并查集)

    http://acm.hdu.edu.cn/showproblem.php?pid=3635 题意: 有n颗龙珠和n座城市,一开始第i颗龙珠就位于第i座城市,现在有2种操作,第一种操作是将x龙珠所在城 ...

  6. python学习 day017打卡 类与类之间的关系

    本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...

  7. Codeforces 510 E. Fox And Dinner

    题目链接:http://codeforces.com/problemset/problem/510/E 乍一看和那啥魔术球问题有点神似啊/XD 其实是不一样的. 解决这道问题的关键在于发现若是相邻的两 ...

  8. Linux CentOS 7 安装mongoDB(4.0.6)

    在官网下载安装包: https://www.mongodb.com/download-center/community 或者通过wget下载 wget https://fastdl.mongodb.o ...

  9. base64 加密原理 解密原理

    假设需要加密的字符串是Jasmine 具体转换步骤: 第一步 将待转换的字符串转为一个个字符第二步 计算每一个字符对应的ASCII码十进制第三步 计算出十进制对应的二进制,若不足8位,在前面添加0进行 ...

  10. node项目配置成nginx启动

    node项目配置成nginx启动 1.新建ant.conf upstream antNodeJs{ server 127.0.0.1:8000; keepalive 64; } server { li ...