总结
分层的特点
每一层都有自己的职责
上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能
上一层调用下一层的功能,下一层不能调用上一层功能
分层开发的好处:
各层专注于自己功能的实现,便于提高质量
便于分工协作,提高开发效率
便于代码复用
便于程序扩展
开始流程:
1:建立数据库epet,建表;
2:创建实体类,和相应的数据库的表是对应的;com.beiwo.epet.entity
例如对应的代码如下:
package com.yang.epet.entity; import java.io.Serializable; /** * * 主人实体类 * @author yang * * */ public class Master implements Serializable { /** * */ private static final long serialVersionUID = 1L; private int id; private String loginIn; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLoginIn() { return loginIn; } public void setLoginIn(String loginIn) { this.loginIn = loginIn; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
|
3:创建Dao的基类接口类BaseDao;com.beiwo.epet.dao.BaseDao
例如对应的代码如下:
package com.yang.epet.dao; public interface BaseDao { /** * 增 删 改的操作 *update dog set name= ? ,password =?,where id=? *@param sql 预编译的sql语句 *@param 预编译的sql语句中的‘?’参数的字符串数组 *@return 影响的行数 * * */ public int executeUpdate(String sql,Object[] param); } |
|
4:创建Dao的实现类BaseDaoImpl;com.beiwo.epet.dao.impl.BaseDaoImpl
例如对应的代码如下:
package com.yang.epet.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import com.yang.epet.dao.BaseDao; import com.yang.epet.util.DBUtils; public class BaseDaoImpl implements BaseDao { @Override public int executeUpdate(String sql, Object[] param) { // TODO Auto-generated method stub int num=0; Connection conn = null; PreparedStatement pstmt = null; //获取Connection try { conn = DBUtils.getConn(); pstmt = conn.prepareStatement(sql); if (null !=param) { for (int j = 0; j < param.length; j++) { pstmt.setObject(j+1, param[j]); } } num= pstmt.executeUpdate(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DBUtils.closeAll(null, pstmt, conn); } return num; } } |
|
5:创建具体表的Dao类,PetDao;com.beiwo.epet.dao.PetDao
例如对应的代码如下:
package com.beiwo.epet.dao; import java.util.List; import com.beiwo.epet.entity.Pet; public interface PetDao extends BaseDao{ /** * 保存宠物 * @param pet * @return */ int save(Pet pet); /** * 删除宠物 * @param pet * @return */ int del(Pet pet); /** * 更新宠物 * @param pet * @return */ int update(Pet pet); /** * 根据宠物的昵称查询 * @param name * @return */ Pet getByName(String name); /** * 根据宠物的昵称,查询宠物列表 * @param name * @return */ List<Pet> findByName(String name); /** * 根据宠物的类型,查询宠物列表 * @param type * @return */ List<Pet> findByType(String type); } |
|
6: 创具体表的Dao实现类,PetDaoMysqlImpl;com.beiwo.epet.dao.impl.PetDaoMysqlImpl
例如对应的代码如下:
package com.beiwo.epet.dao.impl; import java.util.List; import com.beiwo.epet.dao.PetDao; import com.beiwo.epet.entity.Pet; public class PetDaoOracleImpl extends BaseDaoImpl implements PetDao{ @Override public int save(Pet pet) { return 0; } @Override public int del(Pet pet) { return 0; } @Override public int update(Pet pet) { String sql="UPDATE pet SET status=0 WHERE id=?"; Object[] param={pet.getId()}; int result=this.executeUpdate(sql, param); return result; } @Override public Pet getByName(String name) { return null; } @Override public List<Pet> findByName(String name) { return null; } @Override public List<Pet> findByType(String type) { return null; } } |
|
7: 创建业务逻辑层的接口类,PetService;com.beiwo.epet.service.PetService
例如对应的代码如下:
package com.yang.epet.service; public interface PetTypervice { /** * * 显示宠物类型 * */ public void showPetTyper(); /** * * 根据宠物的名称显示宠物的id * @param name * @return * * * */ public int findId(String name); } |
|
8:建业务逻辑层的接口实现类,PetServiceImpl;com.beiwo.epet.service.impl.PetServieImpl
例如对应的代码如下:
package com.yang.epet.service.impl; import java.util.Scanner; import com.yang.epet.dao.MasterDao; import com.yang.epet.dao.impl.MasterDaoMySqlImpl; import com.yang.epet.entity.Master; import com.yang.epet.service.MasterService; public class MasterServiceImpl implements MasterService { public Master master = null; @Override public void longin() { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); //1.输入用户名 System.out.println("请输入用户名"); String loginId = scanner.next(); //2.输入密码 System.out.println("请输入密码"); String password = scanner.next(); MasterDao masterDao = new MasterDaoMySqlImpl(); Master master2 = new Master(); master2.setPassword(loginId); master2.setLoginIn(password); master = masterDao.finMaster(master2); if (null !=master) { System.out.println("登录成功"); }else { System.out.println("登录失败"); } } @Override public boolean longin(Master master) { // TODO Auto-generated method stub return false; } } |
|
9: 创建测试类。
例如对应的代码如下:
package com.beiwo.epet.test; import java.util.Scanner; import org.junit.Test; import com.beiwo.epet.entity.Master; import com.beiwo.epet.service.MasterService; import com.beiwo.epet.service.impl.MasterServiceImpl; import com.beiwo.epet.service.impl.MasterServiceImpl2; public class TestMasterDao { @Test public void testLogin(){ MasterService masterService=new MasterServiceImpl(); masterService.login(); } @Test public void testLogin2(){ Scanner scanner = new Scanner(System.in); // 1.输入用户名 System.out.println("请输入用户名"); String loginId = scanner.next(); // 2.输入密码 System.out.println("请输入密码"); String password = scanner.next(); MasterService masterService=new MasterServiceImpl2(); Master master=new Master(); master.setLoginId(loginId); master.setPassword(password); boolean isLogin=masterService.login(master); if(isLogin){ System.out.println("登陸成功"); }else{ System.out.println("登陸失敗"); } } } |
|