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. 用dbms_scheduler创建job

    以前一般使用dbms_job来创建job,oracle10g以后推荐使用dbms_scheduler来创建定时任务,dbms_scheduler功能更为强大.一个创建job的例子: begin sys ...

  2. jlink的SWD与JTAG下载模式的对应接线方法

     参考博客:http://blog.csdn.net/qq_26093511/article/details/59484249 (1)如果用jtag模式下载的话需要接线:          jlink ...

  3. Transaction之EF

    了解Entity Framework中事务处理 Entity Framework 6以前,框架本身并没有提供显式的事务处理方案,在EF6中提供了事务处理的API. 所有版本的EF,只要你调用SaveC ...

  4. Broken Keyboard (a.k.a. Beiju Text) 思路

    问题:You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem ...

  5. _itemmod_hidden

    该表中的物品放在背包或银行中中会计算属性 `entry`物品ID `comment` 备注

  6. Intellij idea 2017 图标含义

    File Type Icon Recognized in ActionScript files ActionScript files Ultimate Edition Active Server Pa ...

  7. AQS是什么?

    AQS介绍 AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架.来看下同步组件对AQS的使用: AQS是一个抽象类,主是是 ...

  8. Eclipse启动Web项目 Tomcat中webapps中没有项目文件夹

    原文出处:https://blog.csdn.net/JYH1314/article/details/51656233 1.eclipse不像MyEclipse默认将项目部署到tomcat安装目录下的 ...

  9. python IOError: [Errno 22] invalid mode ('r') or filename:

    如果你是报这个错误,可能是因为你的文件路径中的中文字符太多的缘故. 你可以将路径或者文件名称改为英文试试.

  10. 转载 R语言颜色基础设置

    原文链接:http://www.biostatistic.net/thread-5065-1-1.html R语言在画图形的时候,经常遇到颜色设定问题,用户可以根据color.rgb值和hsv值来设定 ...