JDBC MVC框架实现用户登录
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框架实现用户登录的更多相关文章
- MVC下判断用户登录和授权状态方法
MVC下判断用户登录和授权状态方法 在我们日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- MVC过滤器实现用户登录验证
前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...
- vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)
前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...
- ASP.NET MVC实现单用户登录
现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...
随机推荐
- 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 ...
- vue的全局方法和局部方法
var infiniteScroll = require('vue-infinite-scroll') 等价写法 import infiniteScroll from 'vue-infinite-sc ...
- 微服务架构与实践3_api
场景分析 描述产品服务,基于REST的接口 表述性状态转移(Representational State Transfer,REST) 任务拆分 将整体要做的工作内容划分成小的任务: 统一时间聚焦一个 ...
- Druid介绍
Druid (大数据实时统计分析数据存储) Druid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储.这个系统集合了一个面向列存储的层,一个分布式.shared-nothing的架构,和一 ...
- HDU 3635 Dragon Balls(带权并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=3635 题意: 有n颗龙珠和n座城市,一开始第i颗龙珠就位于第i座城市,现在有2种操作,第一种操作是将x龙珠所在城 ...
- python学习 day017打卡 类与类之间的关系
本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...
- Codeforces 510 E. Fox And Dinner
题目链接:http://codeforces.com/problemset/problem/510/E 乍一看和那啥魔术球问题有点神似啊/XD 其实是不一样的. 解决这道问题的关键在于发现若是相邻的两 ...
- Linux CentOS 7 安装mongoDB(4.0.6)
在官网下载安装包: https://www.mongodb.com/download-center/community 或者通过wget下载 wget https://fastdl.mongodb.o ...
- base64 加密原理 解密原理
假设需要加密的字符串是Jasmine 具体转换步骤: 第一步 将待转换的字符串转为一个个字符第二步 计算每一个字符对应的ASCII码十进制第三步 计算出十进制对应的二进制,若不足8位,在前面添加0进行 ...
- node项目配置成nginx启动
node项目配置成nginx启动 1.新建ant.conf upstream antNodeJs{ server 127.0.0.1:8000; keepalive 64; } server { li ...