1,基础接口
例如:
public interface BaseDao<E> {
int add(E entity);
int delete(int id);
int update(E entity);
E load(int id);
List<E> list();
}
其中E标志泛型的实体,我们在做哪个模块的时候就用哪个模块具体继承其接口即可
例如image模块:
public interface ImageDao extends BaseDao<Image> {
}
将泛型改为具体的模块实体
2.基础实现类(基于mybatis的)
例如:
public class BaseDaoImpl<E> {
public int add(E entity) {
int i=0;
SqlSession session=null;
try {
session=MybatisUtil.getSession();
i=session.update(entity.getClass().getName()+".add",entity);
session.commit();
} catch (Exception e) {
session.rollback();
e.printStackTrace();
}finally {
MybatisUtil.close(session);
}
return i;
}
public int delete(Class<?> clz,int id) {
int i=0;
SqlSession session=null;
try {
session=MybatisUtil.getSession();
i=session.update(clz.getName()+".delete",id);
session.commit();
} catch (Exception e) {
session.rollback();
e.printStackTrace();
}finally {
MybatisUtil.close(session);
}
return i;
}
public int update(E entity) {
int i=0;
SqlSession session=null;
try {
session=MybatisUtil.getSession();
i=session.update(entity.getClass().getName()+".update",entity);
session.commit();
} catch (Exception e) {
session.rollback();
e.printStackTrace();
}finally {
MybatisUtil.close(session);
}
return i;
}
public E load(Class clz,int id) {
E entity=null;
SqlSession session=null;
try {
session=MybatisUtil.getSession();
entity=session.selectOne(clz.getName()+".load",id);
} finally {
MybatisUtil.close(session);
}
return entity;
}
public List<E> list(Class<?> clz) {
List<E> list=null;
SqlSession session=null;
try {
session=MybatisUtil.getSession();
list=session.selectList(clz.getName()+".list");
} finally {
MybatisUtil.close(session);
}
return list;
}
}
其中需要注意的是:
session.update(entity.getClass().getName()+".update",entity);
A.不要忘记的是.getName(),不然只得到的是类类型,没有得到实体的名字
B.在“”里面的方法不要忘记前面的 .
继承基础实现类:
public class ImageDaoImpl extends BaseDaoImpl<Image> implements ImageDao {
@Override
public int add(Image entity) {
return super.add(entity);
}
@Override
public int delete(int id) {
return super.delete(Image.class, id);
}
@Override
public int update(Image entity) {
return super.update(entity);
}
@Override
public Image load(int id) {
return super.load(Image.class, id);
}
@Override
public List<Image> list() {
return super.list(Image.class);
}
}
3.工具类MybatisUtil 用于读取加载mybatis-config.xml配置文件,
在mybatis-config.xml中又加载了
各种
a.实体类的别名,
b.环境,
c.注册实体映射文件;
在实体映射文件中,
b.具体的方法,
a.以及结果集的映射,以及结果集的优化
结果集映射在具体方法前面。
public class MybatisUtil {
private static SqlSessionFactory sf=null;
static {
try {
Reader rd=Resources.getResourceAsReader("mybatis-config.xml");
if(sf==null) {
sf=new SqlSessionFactoryBuilder().build(rd);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession() {
return sf.openSession();
}
public static void close(SqlSession session) {
if(session!=null) session.close();
}
}