新建pageInfo类,这个类是用来实现分页功能的。
源码:
package com.bdqn.it.entity;
import java.util.List;
//代表分页的类
public class PageInfo<T> {
private List<T> list;//列表
private int currPage;//当前第几页
private int row;//每页行数
private int rowCount;//总行数
private String orderBy;//排序
public String getMsg(){return "";}
public int getCount(){return this.rowCount;}
public List<T> getData(){return this.list;}
public int getCode(){return 0;}
public PageInfo() {
super();
}
public PageInfo(int currPage, int row, String orderBy) {
super();
this.currPage = currPage;
this.row = row;
this.orderBy = orderBy;
}
public PageInfo(List<T> list, int currPage, int row, int rowCount, String orderBy) {
super();
this.list = list;
this.currPage = currPage;
this.row = row;
this.rowCount = rowCount;
this.orderBy = orderBy;
}
public int getStart(){
return (this.currPage-1)*row;
}
public int getPageCount()
{
return (int)Math.ceil(this.rowCount/(float)row);
}
public int getNext(){//下一页
if(this.currPage>=this.getPageCount())
return this.getPageCount();
return this.currPage+1;
}
public int getPrev(){//上一页
if(this.currPage<=1)
return 1;
return this.currPage-1;
}
public int getFirst(){return 1;}
public int getLast(){return this.getPageCount();}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getCurrPage() {
return currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
public String getOrderBy() {
return orderBy;
}
public void setOrderBy(String orderBy) {
this.orderBy = orderBy;
}
}
新建BaseService接口,这个接口是所有业务类的父接口,继承它即可拥有基本需要用到的方法。
源码:
package com.bdqn.it.service;
import java.io.Serializable;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import com.bdqn.it.entity.PageInfo;
public interface BaseService<T> {
// 新增
public void add(T o);
// 修改
public void edit(T o);
// 删除
public void remove(T o);
// Serializable是包装类的父接口,根据id查询单个对象
public T findById(Serializable id);
// 根据id延迟加载查询
public T loadById(Serializable id);
// 根据条件查询单个对象
public T findOne(DetachedCriteria dc);
// 查询所有
public List<T> findAll();
// 查询所有
public List<T> findList(DetachedCriteria dc);
public PageInfo<T> findPage(DetachedCriteria dc, int pageIndex, int row
, String orderby);
}
创建两个接口类各继承BaseService父接口
新建BaseServiceImpl父实现类,同时实现父接口。注意:这个也是泛型的。
源码:
package com.bdqn.it.service.impl;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import com.bdqn.it.dao.BaseDao;
import com.bdqn.it.entity.PageInfo;
import com.bdqn.it.service.BaseService;
public class BaseServiceImpl<T> implements BaseService<T> {
private BaseDao<T> dao;
@Override
public void add(T o) {
dao.insert(o);
}
@Override
public void edit(T o) {
dao.update(o);
}
@Override
public void remove(T o) {
dao.delete(o);
}
@Override
public T findById(Serializable id) {
return dao.selectById(id);
}
@Override
public T loadById(Serializable id) {
return dao.loadById(id);
}
@Override
public T findOne(DetachedCriteria dc) {
return dao.selectOne(dc);
}
@Override
public List<T> findAll() {
return dao.selectAll();
}
@Override
public List<T> findList(DetachedCriteria dc) {
return dao.selectList(dc);
}
@Override
public PageInfo<T> findPage(DetachedCriteria dc, int page, int row, String orderby) {
// 略
}
}
创建另外一个实体类,这个实体类是 区域 实体类,也就是负责存储地区区域的。
源码:
package com.bdqn.it.entity;
public class Area {
private int id;
private String name;
private String code;
private String remark;
private Area parent;
// get、set方法省略
}
然后把这个实体类相对应的dao接口、dao实现类、service接口和service实现类创建
dao实现类
然后我们回头检查一下持久化层和业务层各三个类的注解有没有写。持久化层起名字的规律是小写类名+dao,比喻address+dao=addressdao。
业务层起名字的规律也是类似小写类名+service。
然后就要写实体类数据库字段映射了
Area类
Area类映射源码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bdqn.it.entity.Member" table="fs_members">
<id name="id" column="m_id">
<generator class="identity"></generator>
</id>
<property name="name" column="m_name" />
<property name="loginName" column="m_loginname" />
<property name="loginPwd" column="m_loginpwd" />
<property name="mobile" column="m_mobile" />
<property name="email" column="m_email" />
<property name="regTime" column="m_regtime" type="date"/>
<property name="vipType" column="m_viptype" />
<property name="balance" column="m_balance" />
<many-to-one name="address" column="m_address_id"
class="com.bdqn.it.entity.Address" />
</class>
</hibernate-mapping>
Address类
Address类映射源码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bdqn.it.entity.Address" table="fs_address">
<id name="id" column="a_id">
<generator class="identity"></generator>
</id>
<property name="reviceName" column="a_revicename" />
<property name="reviceAddress" column="a_reviceaddress" />
<property name="revicePhone" column="a_revicephone" />
<many-to-one name="area" column="a_area_id"
class="com.bdqn.it.entity.Area" />
<many-to-one name="member" column="a_mem_id"
class="com.bdqn.it.entity.Member" />
</class>
</hibernate-mapping>