1、三层架构
一种合理的项目分层理念,好处为可以简化设计、各司其职、更容易扩展内容
三层架构分为:
表示层(UI、WEB):跟用户对接
业务逻辑层(service):书写功能的整体逻辑
数据访问层(dao):对接数据库
1.1、数据访问层
DAO:和数据库交接、内存放着对数据库内容增删改查的方法
1.2、业务逻辑层
Service:存放着代表主要功能的方法,内部内容主要为调用DAO+逻辑控制代码
1.2.1、组成
Service接口:
一张表对应一个Service
Service中存放着与该表相关的所有功能方法
命名与表名相关:PersonService
包:须存放在service包下 com.xxx.service
Service实现类:
一个实现类实现一个service接口
命名为接口名+Impl:PersonServiceImpl
包:须存放在service.impl下 com.xxx.service.impl
1.3、表示层
view:负责跟用户对接
1.3.1、实现
一个功能一个视图类
命名:功能+View
包:须放在view包下 com.xxx.view
内容:调用service+Scanner
1.4、完整实现步骤
1.书写实体类
package com.bz.entity; import java.io.Serializable; public class User implements Serializable { private Integer id; private String username; private String pwd; @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", pwd='" + pwd + '\'' + '}'; } public User(Integer id, String username, String pwd) { this.id = id; this.username = username; this.pwd = pwd; } }
2.书写DAO
package com.bz.dao; import com.bz.entity.User; /** * 跟数据库对接:从数据库中查找user信息 */ public interface UserDao { /** * 查询用户信息是否存在 * @param username 用户名 * @param pwd 密码 * @return 用户对象 */ User selectUser(String username,String pwd) throws Exception; }
3.书写DaoImpl
package com.bz.dao.impl; import com.bz.dao.UserDao; import com.bz.entity.User; import com.bz.util.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class UserDaoImpl implements UserDao { @Override public User selectUser(String username, String pwd) throws Exception { User user=null;//用来返回 Connection conn= JDBCUtils.getConnection(); String sql = "select * from t_user where u_username=? and u_pwd=?"; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1,username); ps.setString(2, pwd); ResultSet rs=ps.executeQuery(); if (rs.next()) { Integer id = rs.getInt("u_id"); String name = rs.getString("u_username"); String password = rs.getString("u_pwd"); user = new User(id, name, password); } JDBCUtils.close(rs,ps,conn); return user; } }
4.书写Service
package com.bz.service; public interface UserService { /** * 用户登录 * @param username 用户输入的账号名 * @param pwd 用户输入的密码 * @return 是否登录成功 */ boolean login(String username,String pwd) throws Exception; }
5.书写ServiceImpl
package com.bz.service.impl; import com.bz.dao.UserDao; import com.bz.dao.impl.UserDaoImpl; import com.bz.service.UserService; public class UserServiceImpl implements UserService { //创建Dao对象 private UserDao ud=new UserDaoImpl(); @Override public boolean login(String username, String pwd)throws Exception { if (ud.selectUser(username, pwd)!=null) { return true; }else{ return false; } } }
6.书写view
package com.bz.view; import com.bz.service.UserService; import com.bz.service.impl.UserServiceImpl; import java.util.Scanner; /** * 用户登录 */ public class UserloginTest { public static void main(String[] args) throws Exception{ UserService us=new UserServiceImpl(); Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String username=sc.next(); System.out.println("请输入密码:"); String pwd=sc.next(); //调用Service方法判断登录是否成功 if (us.login(username,pwd)){ System.out.println("登录成功!"); }else { System.out.println("登录失败"); } } }