JDBC MVC框架实现用户登录

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

1、实体entity

 1 package com.uplooking.entity;
 2 
 3 import java.io.Serializable;
 4 
 5 public class User implements Serializable {
 6     private int id;
 7     private String name;
 8     private String pwd;
 9 
10 
11     public int getId() {
12         return id;
13     }
14     public void setId(int id) {
15         this.id = id;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public String getPwd() {
24         return pwd;
25     }
26     public void setPwd(String pwd) {
27         this.pwd = pwd;
28     }
29 
30 
31 }

2、

 1 package com.uplooking.dao;
 2 
 3 import com.uplooking.entity.User;
 4 
 5 import java.sql.Connection;
 6 import java.sql.DriverManager;
 7 import java.sql.PreparedStatement;
 8 import java.sql.ResultSet;
 9 import java.sql.SQLException;
10 
11 public class UserDao {
12     public  User findByName(String name) {
13         PreparedStatement statement = null;
14         Connection con = null;
15         try {
16             //1、加载驱动
17             Class.forName("com.mysql.jdbc.Driver");
18             //2、创建连接
19             String sqlUrl = "jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8";
20             //Driver表示Java驱动的街口
21             con = DriverManager.getConnection(sqlUrl,"root","");
22 
23             //3、预编译,使用占位符
24             String sql = "select * from user where name= ? ";
25 
26             //4、创建连接状态
27             statement = con.prepareStatement(sql);
28 
29             //5、填充占位符      第1列
30             statement.setString(1, name);
31 
32             ResultSet set = statement.executeQuery();
33 
34             User user = null;
35             if (set.next()) {
36                 user = new User();
37                 user.setId(set.getInt("id"));
38                 user.setName(set.getString("name"));
39                 user.setPwd(set.getString("pwd"));
40                 return user; //结果集有用户,则返回用户
41             }
42 
43         }catch(ClassNotFoundException e){
44             e.printStackTrace();
45         }catch(SQLException e){
46             e.printStackTrace();
47         }finally {
48             try{
49                 statement.close();
50                 con.close();
51             } catch(SQLException e){
52                 e.printStackTrace();
53             }
54         }
55         return null;
56     }
57 
58 }

3、服务

(1)服务接口

1 package com.uplooking.service;
2 
3 import com.uplooking.entity.User;
4 
5 public interface UserService {
6     User login(String name,String pwd);
7 }

(2)服务实现

 1 package com.uplooking.service.imp;
 2 
 3 import com.uplooking.dao.UserDao;
 4 import com.uplooking.entity.User;
 5 import com.uplooking.service.UserService;
 6 
 7 public class UserServiceimp implements UserService {
 8    private UserDao userDao=new UserDao();
 9     @Override
10     public User login(String name, String pwd) {
11         User user=userDao.findByName(name);
12         if(user!=null&&pwd.equals(user.getPwd())){
13             return user;
14         }
15         return null;
16     }
17 }

4、用户响应

 1 package com.uplooking.action;
 2 
 3 import com.uplooking.entity.User;
 4 import com.uplooking.service.UserService;
 5 import com.uplooking.service.imp.UserServiceimp;
 6 
 7 public class UserAction {
 8     public static void main(String[] args) {
 9         UserAction userAction=new UserAction();
10         userAction.login("smith","123");
11     }
12     private UserService userService=new UserServiceimp();
13     public void login(String name,String pwd){
14         User user=userService.login(name,pwd);
15         if(user!=null){
16             System.out.println("用户:"+user.getName()+"   成功登陆。");
17         }else{
18             System.out.println("用户名或密码错误,登录失败。");
19         }
20     }
21 
22 }

 执行结果:

二:进行方法抽象

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

1 --properties文件名为:dbconfig.properties
2 
3 DBSRIVER=com.mysql.jdbc.Driver
4 DBURL=jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8
5 DBUSER=root
6 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 //1、加载驱动
2 Class.forName("com.mysql.jdbc.Driver");
3 //2、创建连接
4  String sqlUrl = "jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8";
5 //Driver表示Java驱动的街口
6  con = DriverManager.getConnection(sqlUrl,"root","");

获取连接的getcon()方法

 1     /**
 2      * @Method: getCon() 获取连接,当没有连接时或者连接已经关闭,调用方法重新获取连接
 3      * @return: 返回一个连接
 4      */
 5     public Connection getCon(){
 6         try{
 7             Class.forName(DBRIVER);
 8             if(con==null){
 9                 con=DriverManager.getConnection(DBURL,DBUSER,DBPWD);
10             }else{
11                 if(con.isClosed()){
12                     con=DriverManager.getConnection(DBURL,DBUSER,DBPWD);
13                 }
14             }
15         }catch(ClassNotFoundException e){
16             e.printStackTrace();
17         }catch(SQLException e){
18             e.printStackTrace();
19         }
20         return con;
21     }

 4、关闭连接

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

1 con.close();
2 preparedstatement.close();

(2)closeCon()

 1 protected void closeCon(){
 2         try {
 3             if(preparedStatement!=null&&!preparedStatement.isClosed()){
 4                 preparedStatement.close();
 5             }
 6 
 7             if(con!=null&&!con.isClosed()){
 8                 con.close();
 9             }
10 
11         } catch (SQLException e) {
12                 e.printStackTrace();
13 
14         }
15 
16     }

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

写入UserDaoB包中

 1 //按照id删除
 2     public int deleteById(int id){
 3         int result=0;
 4         try{
 5             //1、建立连接
 6             con=super.getCon();
 7             //sql语句
 8             String sql="delete from user where id=?";
 9             //2、用预编译执行sql语句
10             statement=con.prepareStatement(sql);
11             //3、填写占位符
12             statement.setInt(1,id);
13             //executeUpdate被用来执行delete,update和insert等操作
14             result=statement.executeUpdate();
15             super.closeCon();
16 
17         }catch (SQLException e){
18             e.printStackTrace();
19         }
20         return result;
21     }

调用:

 1 package com.uplooking.action;
 2 
 3 import com.uplooking.dao.UserDao;
 4 
 5 public class JDBCTest {
 6     public static void main(String[] args) {
 7         UserDao userDao=new UserDao();
 8         int result=userDao.deleteById(4);
 9         System.out.println(result>0?"删除成功":"删除失败");
10     }
11 }

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

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

 1  /**           参照按照id删除核心代码
 2      *             //1、建立连接
 3      *             con=super.getCon();
 4      *             //sql语句
 5      *             String sql="delete from user where id=?";
 6      *             //2、用预编译执行sql语句
 7      *             statement=con.prepareStatement(sql);
 8      *             //3、填写占位符
 9      *             statement.setInt(1,id);
10      *             //executeUpdate被用来执行delete,update和insert等操作
11      *             result=statement.executeUpdate();
12      */
13 
14     /**
15      * @method:该方法是一个公共的方法,可以进行插入、删除和更新等操作
16      * @return:返回操作结果
17      * @parament:参数是需要执行的sql语句,和不可预估的操作类型和参数
18      */
19     protected int merger(String sql,Object...objects){
20         int result=0;
21         try{
22             //1、连接
23             con=this.getCon();
24             //2、执行预编译sql语句
25             preparedStatement=con.prepareStatement(sql);
26             //3、填充占位符
27             for (int i = 0; i <objects.length ; i++) {
28                 preparedStatement.setObject(i+1,objects[i]);
29             }
30             //差点忘记,要执行DDL语句
31             result=preparedStatement.executeUpdate();
32 
33         }catch (SQLException e){
34             e.printStackTrace();
35         }finally {
36             this.closeCon();
37         }
38         return result;
39     }

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

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

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

b、插入操作

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

(2)调用

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

c、

(1)更新操作

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

(2)调用

1 //更新操作
2         User user=new User();
3         user.setName("hua");
4         user.setPwd("6");
5         user.setId(5);
6         System.out.println(userDao.update(user)>0?"更新成功":"更新失败");
原文地址:https://www.cnblogs.com/echola/p/9559769.html