总结
分层的特点
每一层都有自己的职责
上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能
上一层调用下一层的功能,下一层不能调用上一层功能
分层开发的好处:
各层专注于自己功能的实现,便于提高质量
便于分工协作,提高开发效率
便于代码复用
便于程序扩展
开始流程:
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("登陸失敗");
}
}
}
|
|