三层架构:
数据库访问层
业务逻辑层
表示层
面向接口编程:为了将设计和实现完全分离
代码展示:
login.jsp
dologin.jsp
在JavaResources-->src-->建四个包
两种方式:
一、
com.zking.biz(包):
IUserBiz(类):
package com.zking.biz;
import java.util.List;
import com.zking.dao.IUserDao;
import com.zking.dao.UserDao;
import com.zking.entity.User;
public interface IUserBiz {
/**查询全部 shift+alt+j(注释)
* @return 用户集合
*/
List<User> getAll();
/**模糊查询
* @param colName 列名
* @param str 关键字
* @return 用户集合
*/
List<User> getAll(String colName,String str);
/**查询单个
* @param uuid 用户编号
* @return 用户对象
*/
User getUser(int uuid);
/**增加用户
* @param u 用户对象
* @return 影响行数
*/
public int addUser(User u);
/**根据ID删除用户
* @param uuid 用户编号
* @return 影响行数
*/
public int deleteUser(int uuid);
/**修改用户
* @param u 用户对象
* @param uuid 用户编号
* @return 影响行数
*/
public int updateUser(User u,int uuid);
/**实现用户登录
* @param uname 用户名
* @param upwd 密码
* @return 用户对象
*/
public User login(String uname,String upwd);
}
com.zking.biz.impl:
UserBiz
package com.zking.biz.impl;
import java.util.List;
import com.zking.biz.IUserBiz;
import com.zking.dao.IUserDao;
import com.zking.dao.UserDao;
import com.zking.entity.User;
/**
* 业务逻辑层 B
* @author Anny
*
* @date下午7:03:02
*/
public class UserBiz implements IUserBiz {
//业务逻辑层B 调用 数据访问层c
IUserDao iud = new UserDao();//里式替换原则
@Override
public List<User> getAll() {
return iud.getAll();
}
@Override
public List<User> getAll(String colName, String str) {
return iud.getAll(colName, str);
}
@Override
public User getUser(int uuid) {
return iud.getUser(uuid);
}
@Override
public int addUser(User u) {
return iud.addUser(u);
}
@Override
public int deleteUser(int uuid) {
return iud.deleteUser(uuid);
}
@Override
public int updateUser(User u, int uuid) {
return iud.updateUser(u, uuid);
}
@Override
public User login(String uname, String upwd) {
return iud.login(uname, upwd);
}
}
二、
com.zking.dao(包):
IUserDao(类):
package com.zking.dao;
import java.util.List;
import com.zking.entity.User;
public interface IUserDao {
//只做设计 不做实现
/**查询全部 shift+alt+j(注释)
* @return 用户集合
*/
List<User> getAll();
/**模糊查询
* @param colName 列名
* @param str 关键字
* @return 用户集合
*/
List<User> getAll(String colName,String str);
/**查询单个
* @param uuid 用户编号
* @return 用户对象
*/
User getUser(int uuid);
/**增加用户
* @param u 用户对象
* @return 影响行数
*/
public int addUser(User u);
/**根据ID删除用户
* @param uuid 用户编号
* @return 影响行数
*/
public int deleteUser(int uuid);
/**修改用户
* @param u 用户对象
* @param uuid 用户编号
* @return 影响行数
*/
public int updateUser(User u,int uuid);
/**实现用户登录
* @param uname 用户名
* @param upwd 密码
* @return 用户对象
*/
public User login(String uname,String upwd);
/**
* 接口有何特性?
* 1.接口不能被实例化new 因此要用里式替换原则
* 2.接口里面所有的方法都默认就是公开的抽象方法 public abstract
*
* 抽象方法有何特点:
* 1.抽象方法没有方法体
* 2.抽象方法在子类中必须被实现(重写) 除非子类也是抽象类
* 3.必须放在抽象类(接口)中
*
*/
}
UserDao:
package com.zking.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import com.zking.entity.User;
import com.zking.util.DBHelper;
/**
*
* 数据库访问层 c
* @author Anny
*
* @date下午6:26:47
*/
public class UserDao implements IUserDao {
//你以前怎么写dao方法 这里就怎么写
//三兄弟
private Connection con = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
@Override
public List<User> getAll() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<User> getAll(String colName, String str) {
// TODO Auto-generated method stub
return null;
}
@Override
public User getUser(int uuid) {
// TODO Auto-generated method stub
return null;
}
@Override
public int addUser(User u) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int deleteUser(int uuid) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int updateUser(User u, int uuid) {
// TODO Auto-generated method stub
return 0;
}
@Override
public User login(String uname, String upwd) {
User u = null;
try {
con=DBHelper.getCon();//获得连接
String sql = "select * from tb_0325 where sname=? and spwd=?";//定义sql语句
ps=con.prepareStatement(sql);//获得执行对象
//给占位符赋值
ps.setString(1, uname);
ps.setString(2, upwd);
rs=ps.executeQuery();//获得结果集
if(rs.next()) {
u = new User();
u.setUuid(rs.getInt(1));
u.setUname(rs.getString(2));
u.setUpwd(rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
DBHelper.myClo(con, ps, rs);
}
return u;
}
}