“商苑面馆:Java 网页版之 Dao层”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“==Model层的作用== *M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中…”)
 
第1行: 第1行:
==Model层的作用==
+
==Dao层==
*M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
 
 
 
 
[[文件:Java8-1.png]]
 
[[文件:Java8-1.png]]
===客户端功能===
 
[[文件:Java2-36.png]]
 
  
 +
==前期准备==
 +
在entity包下建立User类:
  
==客户端Model层的编写==
+
<nowiki>package entity;
===新建类UserService===
 
新建包service,在其中新建此类。
 
  
  <nowiki>package service;
+
public class User {
  
import dao.*;
+
//成员变量
import entity.*;
+
public String name;
//import exception.UserException;
+
public String password;
public class UserService {
+
+
//构造方法
/**
+
public User(){
* 用户集类(用于存储用户
+
*/
 
private UserDao userset = null;
 
 
 
public UserService() {
 
userset = new UserDaoArray();
 
 
}
 
}
</nowiki>
+
public User(String name,String password ){
+
===添加用户功能:addUser===
+
this.name=name;
 
+
<nowiki>/**
+
this.password=password;
* 用于向用户集添加用户
 
*/
 
public void addUser(User user){
 
 
 
userset.addUser(user);
+
}
        System.out.println("用户 "+user.getname() +" 注册成功");       
+
//读方法
System.out.println();
+
  public String getname(){
} </nowiki>
+
 
===用户登陆验证功能:login()===
+
  return this.name;
<nowiki>/**
+
  }
* 登录验证,判断用户名与密码是否一致
+
 
*
+
 
* @param uid 用户输入的登录账号
+
//写方法
* @param pwd 用户输入的登录密码
+
  public boolean setName(String s){
* @return 登录信息有效:返回用户对象,否则返回NULL
+
this.name = s;
*/
+
return true;
public boolean login(String name, String pwd) {
+
}
//用户名为空,密码为空
+
//获取用户密码
//try{
+
  public String getPwd(){
if(userset.search(name)==null){
+
 
//throw new UserException("用户 "+name+":该用户不存在");
+
  return this.password;
System.out.println("用户 "+name+":该用户不存在");
+
  }
return false;
+
 
}else if(!userset.verify(name, pwd)){
+
 
//throw new UserException("用户 "+name+":用户名或密码错误");
+
//写方法
System.out.println("用户 "+name+":用户名或密码错误");
+
  public boolean setPwd(String p){
return false;
+
this.password = p;
}
+
return true;
System.out.println("用户 "+name+" 登陆成功!");
+
}
//}catch(UserException e){
+
}</nowiki>
//System.out.println(e.toString());
+
==实现步骤==
//return false;
 
//}
 
return true;
 
}</nowiki>
 
  
===在main方法中编写测试代码===
+
===建立接口UserDao===
<nowiki>public static void main(String[] args) {
+
在包dao下建立抽象接口UserDao
UserService us = new UserService();
 
User u1 =  new User("王建","000000");
 
us.addUser(u1);;
 
us.login("李建", "111111");
 
us.login("王建", "111111");
 
us.login("王建", "000000");
 
}</nowiki>
 
  
===与View层、Dao层联调联试===
+
<nowiki>package dao;
在View层UserShow的start()方法中加入如下代码,调用UserService.
 
  
这样就是实现了View 层 调用 Model层 ,Model层又调用 Dao层, MVC三层架构基本建立成功!
 
  
[[文件:java7-36.png|700px]]
+
import entity.User;
 +
public interface UserDao {
 +
public boolean verify(String name, String pwd)throws Exception ;//验证用户名和密码是否一致
 +
 +
 +
}</nowiki>
 +
===建立接口的实现类===
 +
接口实现类可以用多种方式实现,ArrayList,LinkedList, MySQL等
  
然后鼠标右击UserShow类,RUN AS -> JAVA APPLICATION :
+
这里我们用查询MySQL实现
  
[[文件:java7-37.png|700px]]
+
====接口实现类UserDaoSQL====
 +
<nowiki>package dao;
  
==完整代码==
+
import java.sql.Connection;
<nowiki>package service;
+
import java.sql.ResultSet;
 
+
import java.sql.SQLException;
import dao.*;
+
import java.sql.Statement;
import entity.*;
+
//import exception.UserException;
+
// 调用数据库,进行查询用户名和密码
public class UserService {
+
public class UserDaoSQL implements UserDao{
+
public boolean verify(String username, String password) throws Exception {
/**
+
boolean returnValue = false;
* 用户集类(用于存储用户
+
String sql = "SELECT * FROM user";
*/
+
Connection conn = null;
private UserDao userset = null;
+
Statement stmt = null;
+
ResultSet rs = null;
+
public UserService() {
+
try {
userset = new UserDaoArray();
+
conn = DBConnection.getConnection();
}
+
stmt = conn.createStatement();
+
rs = stmt.executeQuery(sql);
/**
+
while (rs.next()) {
* 用于向用户集添加用户
+
String userName = rs.getString("username");
*/
+
String passWord = rs.getString("password");
public void addUser(User user){
+
if (userName.equals(username) && passWord.equals(password)) {
+
//   如果用户名和密码都和数据库的一样,就返回true
userset.addUser(user);
+
returnValue = true;
        System.out.println("用户 "+user.getname() +" 注册成功");      
+
break;
System.out.println();
+
}
}
 
 
/**
 
* 登录验证,判断用户名与密码是否一致
 
*
 
* @param uid 用户输入的登录账号
 
* @param pwd 用户输入的登录密码
 
* @return 登录信息有效:返回用户对象,否则返回NULL
 
*/
 
public boolean login(String name, String pwd) {
 
//用户名为空,密码为空
 
//try{
 
if(userset.search(name)==null){
 
//throw new UserException("用户 "+name+":该用户不存在");
 
System.out.println("用户 "+name+":该用户不存在");
 
return false;
 
}else if(!userset.verify(name, pwd)){
 
//throw new UserException("用户 "+name+":用户名或密码错误");
 
System.out.println("用户 "+name+":用户名或密码错误");
 
return false;
 
 
}
 
}
System.out.println("用户 "+name+" 登陆成功!");
+
} catch (ClassNotFoundException e) {
//}catch(UserException e){
+
e.printStackTrace();
//System.out.println(e.toString());
+
} catch (SQLException e) {
//return false;
+
e.printStackTrace();
//}
+
}
return true;
+
return returnValue;
 +
 
}
 
}
public static void main(String[] args) {
+
}
UserService us = new UserService();
+
 
User u1 =  new User("王建","000000");
+
</nowiki>
us.addUser(u1);;
+
===编写测试代码===
us.login("李建", "111111");
+
在UserDaoSQL类的main方法中编写测试代码:
us.login("王建", "111111");
+
 
us.login("王建", "000000");
+
<nowiki>public static void main(String[] args) throws Exception{
}
+
    //本类的测试代码
}</nowiki>
+
// TODO Auto-generated method stub
 +
    UserDao userSet= new UserDaoSQL();
 +
   
 +
   
 +
    if(userSet.verify("maxin", "000000")){
 +
    System.out.println("密码正确");
 +
    }else{
 +
    System.out.println("密码错误");
 +
    }
 +
    }</nowiki>
 +
 
 +
[[文件:java7-35.png]]

2019年5月2日 (四) 04:06的版本

Dao层

Java8-1.png

前期准备

在entity包下建立User类:

package entity;

public class User {

	//成员变量
	public String name;
	public String password;
		
	//构造方法
	public User(){
		
	}
	public User(String name,String password ){
		
		this.name=name;
		
		this.password=password;	
		
	}
//读方法
	   public String getname(){
		   
		   return this.name;
	   }
	   
	   
	 //写方法
	   public boolean setName(String s){
			this.name = s;
			return true;
		}
	 //获取用户密码
	   public String getPwd(){
		   
		   return this.password;
	   }
	   
	   
	 //写方法
	   public boolean setPwd(String p){
			this.password = p;
			return true;
		}
}

实现步骤

建立接口UserDao

在包dao下建立抽象接口UserDao

package dao;


import entity.User;
public interface UserDao {
	public boolean verify(String name, String pwd)throws Exception ;//验证用户名和密码是否一致 
		
		
}

建立接口的实现类

接口实现类可以用多种方式实现,ArrayList,LinkedList, MySQL等

这里我们用查询MySQL实现

接口实现类UserDaoSQL

package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
//  调用数据库,进行查询用户名和密码
public class UserDaoSQL implements UserDao{
	public boolean verify(String username, String password) throws Exception {
		boolean returnValue = false;
		String sql = "SELECT * FROM user";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
 
		try {
			conn = DBConnection.getConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			while (rs.next()) {
				String userName = rs.getString("username");
				String passWord = rs.getString("password");
				if (userName.equals(username) && passWord.equals(password)) {
					//   如果用户名和密码都和数据库的一样,就返回true
					returnValue = true;
					break;
				}
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return returnValue;
 
	}
}


编写测试代码

在UserDaoSQL类的main方法中编写测试代码:

public static void main(String[] args) throws Exception{
    	//本类的测试代码
		// TODO Auto-generated method stub
    	UserDao userSet= new UserDaoSQL();
    	
    	
    	if(userSet.verify("maxin", "000000")){
    		System.out.println("密码正确");
    	}else{
    		System.out.println("密码错误");
    	}
    }

Java7-35.png