紧接着上次无线点餐项目的文档,我们进行Dao层抽取。

6.Dao接口以及实现类代码抽取

对于BoardDao和CuisineDao的处理接口和实现类,除了定义自己的特有方法外,其他基本功能的CRUD方法都一样,只是操作的实体对象不一样。为了代码的复用,简化代码,我们可以将公共的CRUD方法提取到BaseDao中,只需要实现接口即可。

同理, 不同的实现类,实现CRUD相同的业务逻辑的时, 除了操作的实体不同,其他都是相同的, 所以我们可以把相同的业务逻辑实现,抽取出来,放到BaseSericeImpl中, 其他的业务逻辑实现, 继承BaseSericeImpl即可

抽取原理图如下:

 

java 获取自己生成的接口的code 获取接口实现类_dao和Service代码抽取

6.1 BaseDao的代码为:

/**
 * 通用BaseDao数据操作接口
 * 
 * @author Leo.Chen
 * 
 * @param <T>
 */
public interface
/**
 * 保存一个对象
 * 
 * @param t
 */
public void
 
/**
 * 删除一个对象
 * 
 * @param id
 */
public void delete(int
 
/**
 * 删除一个对象
 * 
 * @param t
 */
public void
 
/**
 * 查询所有
 * 
 * @return
 */
public
}

6.2 BaseDaoImpl代码为:

我们在没有使用框架Hibernate的情况下,使用JDBC技术来操作数据库时候需要自己手写SQL语句,因此为了避免dao代码的复杂性,不适用反射技术,因此我们只是把各个模块公共的代码抽取到BaseDaoImpl中,该类还是抽象的,让其子类具体再实现。

因此通用的BaseServiceImpl实现类代码如下:

/**
 * 通用Dao接口实现类
 * @author Leo.Chen
 * @param <T>
 */
public abstract class BaseDaoImpl<T> implements
protected QueryRunner runner = new
}

6.3 BoardDao接口的代码为:

/**
 * 餐桌管理持久化数据操作接口
 * @author Leo.Chen
 */
public interface BoardDao extends
}

6.4 BoardDaoImpl实现类的代码为:

public class BoardDaoImpl extends BaseDaoImpl<Board> implements
 
@Override
public void
// 建立sql语句
String excuteSql = "insert into t_board(bName,isBook,bookTime) values (?,?,?)";
// 封装参数
Object[] param = { board.getbName(), board.getIsBook(), board.getBookTime() };
try
// 执行sql语句
runner.update(excuteSql, param);
} catch
e.printStackTrace();
throw new
}
}
 
@Override
public void delete(int
String excuteSql = "delete from t_board where bid=?";
try
runner.update(excuteSql, id);
} catch
e.printStackTrace();
throw new
}
}
 
@Override
public void
String excuteSql = "update t_board b set b.bname=?, b.isBook=?, b.bookTime=? where b.bid=?";
Object[] param = { board.getbName(), board.getIsBook(), board.getBookTime(), board.getBid()};
try
runner.update(excuteSql, param);
} catch
e.printStackTrace();
throw new
}
}
 
@Override
public
String sql = "select * from t_board";
List<Board> resultList = null;
try
resultList = runner.query(sql, new BeanListHandler<Board>(Board.class));
} catch
e.printStackTrace();
resultList = new
}
return
}
}

6.5 CuisineDao接口的代码为:

public interface CuisineDao extends
/**
 * 根据菜系名称模糊查询
 * @param cid
 * @return
 */
public
}

6.6 CuisineDaoImpl实现类代码为:

public class CuisineDaoImpl extends BaseDaoImpl<Cuisine> implements
@Override
public void
try
String sql = "insert into t_cuisine (name) values(?)";
runner.update(sql, cuisine.getName());
} catch
e.printStackTrace();
throw new
}
}
 
@Override
public void delete(int
try
String sql = "delete from t_cuisine where cid=?";
runner.update(sql, id);
} catch
e.printStackTrace();
throw new
}
}
 
@Override
public void
try
String sql = "update t_cuisine c set c.name=? where c.cid=?";
runner.update(sql, cuisine.getName(), cuisine.getCid());
} catch
e.printStackTrace();
throw new
}
}
     @Override
public
String sql = "select * from t_cuisine";
List<Cuisine> resultList = null;
try
resultList = runner.query(sql, new BeanListHandler<Cuisine>(Cuisine.class));
} catch
e.printStackTrace();
resultList = new
}
return
}
 
 
@Override
public
List<Cuisine> resultList = null;
try
String sql = "select * from t_cuisine where name like '%"+name+"%'";
resultList = runner.query(sql, new BeanListHandler<Cuisine>(Cuisine.class));
} catch
e.printStackTrace();
resultList = new
}
return
}
}

7.餐桌和菜系的Service实现

在Service中同样的采取Dao中的抽取设计,将公共的Service方法抽取到BaseService中。在BaseService接口中抽取公共的调用Dao的CRUD方法,其他接口只需要继承即可。

Service的抽取原理图:

 

java 获取自己生成的接口的code 获取接口实现类_ide_02

7.1BaseService代码如下:

/**
 * 通用Service接口
 * @author Leo.Chen
 * @param <T>
 */
public interface
/**
 * 保存对象
 * 
 * @param t
 */
public void
 
/**
 * 删除对象
 * 
 * @param id
 */
public void delete(int
 
/**
 * 更新对象
 * 
 * @param t
 */
public void
 
/**
 * 获取所有
 * 
 * @return
 */
public
}
7.2BaseServiceImpl代码如下:
/**
 * 通用Service实现类
 * 
 * @author Leo.Chen
 * 
 * @param <T>
 */
public abstract class BaseServiceImpl<T> implements
/**
 * 将所有操作数据库的Dao对象在BaseServiceImpl中实例化,自身模块的Service只需要继承该类即可
 */
protected BoardDao boardDao = BeanFactoryUtil.getInstance().createBean(BoardDao.class);
protected CuisineDao cuisineDao = BeanFactoryUtil.getInstance().createBean(CuisineDao.class);
}

7.3餐桌Service实现

BoardService接口代码如下:

public interface BoardService extends
}

BoardServiceImpl接口代码如下:

public class BoardServiceImpl extends BaseServiceImpl<Board> implements
BoardService {
 
@Override
public void
boardDao.save(t);
}
 
@Override
public void delete(int
boardDao.delete(id);
}
 
@Override
public void
boardDao.update(t);
}
 
@Override
public
List<Board> boards = boardDao.queryAll();
if
return
}
return null;
}
}

7.4菜系Service实现

CuisineService接口代码如下:

public interface CuisineService extends
/**
 * 根据名称查询菜系
 * @param name
 * @return
 */
public
}

 

CuisineServiceImpl实现类代码如下:

public class CuisineServiceImpl extends BaseServiceImpl<Cuisine> implements
 
@Override
public void
cuisineDao.save(t);
}
 
@Override
public void delete(int
cuisineDao.delete(id);
}
 
@Override
public void
cuisineDao.update(t);
}
 
@Override
public
List<Cuisine> cuisines = cuisineDao.queryAll();
if
return
}
return null;
}
 
@Override
public
List<Cuisine> cuisines = cuisineDao.queryByName(name);
if
return
}
return null;
}
}