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. IE8下面parseInt('08')、parseInt('09')会转成0

    例子: <html> <body> <script type="text/javascript"> for(var i=1;i<=20;i ...

  2. 常用处理数组、字符串API → forEach every some sort map filter slice split indexOf concat substring substr splice join toString replace

    Object与Array的语法糖 var arr = [1,2,3]; // [] 是 new Array(1,2,3) 的语法糖(简写) var obj = {'name':2,'age':3}; ...

  3. Images之管理image

    Manage images The easiest way to make your images available for use by others inside or outside your ...

  4. Global.asax.cs中相关方法

    protected void Session_Start(object sender, EventArgs e) { #if DEBUG //debug 登陆默认设置 #endif } protect ...

  5. 为什么返回的数据前面有callback?

    这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? 打了几遍 JSON.parse 也都是不行…… ...

  6. Linux命令之rz命令与sz命令

    1.rz命令 rz命令(Receive ZMODEM),使用ZMODEM协议,将本地文件批量上传到远程Linux/Unix服务器,注意不能上传文件夹. 当我们使用虚拟终端软件,如Xshell.Secu ...

  7. Qt5学习记录:QString与int值互相转换

    1)QString转int 直接调用toInt()函数 例: QString str("100"); int tmp = str.toInt(); 或者: bool ok; QSt ...

  8. QT读文件夹内所有文件名

    void monizhuzhan::filenameInDir() { //判断路径是否存在 QDir dir(path); if(!dir.exists()) return; //查看路径中后缀为. ...

  9. Pandas 基础(1) - 初识及安装 yupyter

    Hello, 大家好, 昨天说了我会再更新一个关于 Pandas 基础知识的教程, 这里就是啦......Pandas 被广泛应用于数据分析领域, 是一个很好的分析工具, 也是我们后面学习 machi ...

  10. python类与类的关系

    类与类之间的关系(依赖关系,大象与冰箱是依赖关系) class DaXiang: def open(self, bx): # 这里是依赖关系. 想执行这个动作. 必须传递一个bx print(&quo ...