逻辑层:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层。
package cn.hncu.addr.business;
import java.util.ArrayList;
import java.util.List;
import cn.hncu.addr.dao.AddressDAO;
import cn.hncu.addr.vo.AddressQueryVO;
import cn.hncu.addr.vo.AddressUser;
public class MyList {
private static List<AddressUser> list = null;
static{
list = new AddressDAO().read();
}
//注入ebo
private AddressDAO ebo = new AddressDAO();
public boolean add(AddressUser addressUser) {
if (list.contains(addressUser)) {
return false;
}
boolean boo =list.add(addressUser);
return boo?ebo.save(list):false;
}
public Object[] toArray(){
return list.toArray();
}
public boolean delete(AddressUser oldAddressUser) {
boolean boo = list.remove(oldAddressUser);
return boo?ebo.save(list):false;
}
public boolean update(AddressUser addressUser) {
int index =list.indexOf(addressUser);
return list.set(index, addressUser)==null?false:ebo.save(list);
}
public List<AddressUser> query(AddressQueryVO queryVO) {
List<AddressUser> resList = new ArrayList<AddressUser>();
for (int i = 0; i < list.size(); i++) {
//卫条件---反逻辑
//模糊查询
//检验查询条件是否有效
if (queryVO.getName()!=null&&queryVO.getName().length()>0) {
//如果不包含查询的名字则剔除
if (!list.get(i).getName().contains(queryVO.getName())) {
continue;
}
}
//范围查询---小于小的,大于大的
//检验查询条件是否有效
if (queryVO.getAge()>0) {
//如果小于查询范围的最小值则剔除
if (list.get(i).getAge()<queryVO.getAge()) {
continue;
}
}
//检验查询条件是否有效
if (queryVO.getAge2()>0) {
//如果大于查询范围的最大值则剔除
if (list.get(i).getAge()>queryVO.getAge2()) {
continue;
}
}
//模糊查询
//检验查询条件是否有效
if (queryVO.getAddress()!=null&&queryVO.getAddress().length()>0) {
if (!list.get(i).getAddress().contains(queryVO.getAddress())) {
continue;
}
}
//能到这里说明是想要的元素
resList.add(list.get(i));
}
return resList;
}
}
数据层:实现数据持久化、实现对象和持久化数据的双向映射。
package cn.hncu.addr.dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import cn.hncu.addr.vo.AddressUser;
//采用文件存储对象的方式
//实现存储对象需实现序列化接口
public class AddressDAO {
final String FILE_NAME = "address.dat";
//向文件中存储数据
public boolean save(List<AddressUser> list){
ObjectOutput out = null;
try {
out = new ObjectOutputStream(new FileOutputStream(FILE_NAME));
for (int i = 0; i < list.size(); i++) {
out.writeObject(list.get(i));
}
return true;
} catch (FileNotFoundException e) {
throw new RuntimeException("数据库加载失败!");
} catch (IOException e) {
throw new RuntimeException("数据库繁忙,请稍后再试!");
}finally {
if (out!=null) {
try {
out.close();
} catch (IOException e) {
throw new RuntimeException("数据库发生严重错误!");
}
}
}
}
//从文件中读取数据
public List<AddressUser> read(){
List<AddressUser> resList = new ArrayList<AddressUser>();
ObjectInput in = null;
File file = new File(FILE_NAME);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
throw new RuntimeException("软件出错!!!");
}
}
try {
in = new ObjectInputStream(new FileInputStream(file));
while (true) {
try {
resList.add((AddressUser)in.readObject());
} catch (Exception e) {
break;
}
}
return resList;
} catch (FileNotFoundException e) {
throw new RuntimeException("数据库访问失败!");
} catch (IOException e) {
throw new RuntimeException("数据库繁忙...");
}finally{
if (in!=null) {
try {
in.close();
} catch (IOException e) {
throw new RuntimeException("数据库发生严重错误!!!");
}
}
}
}
}
值对象层(VO):对数据进行封装
AddressUser类:
package cn.hncu.addr.vo;
import java.io.Serializable;
public class AddressUser implements Serializable{
private String name;
private int age;
private String address;
public AddressUser() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AddressUser other = (AddressUser) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return name + "," + age + "," + address;
}
}
AddressQueryVO类:
package cn.hncu.addr.vo;
public class AddressQueryVO extends AddressUser{
private int age2;
public int getAge2() {
return age2;
}
public void setAge2(int age2) {
this.age2 = age2;
}
}