我们用hirbate的sql来写一个dao包
很麻烦 需要优化
--测试都是一致的
/**
* 查询user 用户类
*/
public List<Tbl_user> Allfind(PageBean page,Tbl_user user){
Session session = Util.getSession();
Transaction beginTransaction = session.beginTransaction();
String sql="from Tbl_user where 1=1";
//这种方式好麻烦 需要优化 ...
if(StringUtils.isNotBlank(user.getName())) {
sql+=" and name like :names";
}
Query query = session.createQuery(sql);
if(StringUtils.isNotBlank(user.getName())) {
query.setParameter("names", "%"+user.getName()+"%");
}
if(page!=null && page.isPagination()) {
query.setFirstResult(page.getStartIndex());//代表第一个参数
query.setMaxResults(page.getRows());//代表第二个参数*
}
List list = query.list();
beginTransaction.commit();
session.close();
return list;
}
优化:
通用的方法类
//给命名参数赋值
private void setParameters(Query query,Map<String,Object> map) {
if(map==null || map.size()==0) return;
Object value;
for (Map.Entry<String, Object> entry : map.entrySet()) {
value=entry.getValue();
if(value instanceof Collection) {
query.setParameterList(entry.getKey(), (Collection)value);
}else if(value instanceof Object[]) {
query.setParameterList(entry.getKey(), (Object[])value);
}else {
query.setParameter(entry.getKey(), value);
}
}
}
/**
* 用于查询所有记录数 page是自己定义的分页的一个类
* @param hql
* @return
*/
public String getCountHql(String hql) {
int index=hql.toUpperCase().indexOf("FROM");
return "select count(*)"+hql.substring(index);
}
protected List executeQuery(Session session,String hql,Map<String,Object> map,PageBean page) {
if(page !=null && page.isPagination()) {
String countHql=getCountHql(hql);
Query countQuery = session.createQuery(countHql);
this.setParameters(countQuery, map);
page.setTotal(countQuery.getSingleResult().toString());
Query query = session.createQuery(hql);
this.setParameters(query, map);
query.setFirstResult(page.getStartIndex());
query.setMaxResults(page.getRows());
return query.list();
}else {
//不分页怎么处理
Query query = session.createQuery(hql);
this.setParameters(query, map);
return query.list();
}
}
在dao里面使用
需要继承通用的方法类就可以了
public List<Tbl_user> Allfind2(PageBean page,Tbl_user user){
Session session = Util.getSession();
Transaction beginTransaction = session.beginTransaction();
String sql="from Tbl_user where 1=1";
Map<String, Object> map=new HashMap<String, Object>();
if(StringUtils.isNotBlank(user.getName())) {
sql+=" and name like :name";
map.put("name", "%"+user.getName()+"%");
}
List list = super.executeQuery(session, sql, map, page);
beginTransaction.commit();
session.close();
return list;
}
第三种:原生态sql 就是最开始的sql
/**
* 原生态的sql 直接在方法里面使用就好了
*/
public List Allfind3(PageBean page,Tbl_user user){
Session session = Util.getSession();
Transaction beginTransaction = session.beginTransaction();
String sql="select * from tbl_user"; //重点
List list = session.createSQLQuery(sql).list();//重点
beginTransaction.commit();
session.close();
return list;
}
怎么使用:
@Test
public void test4() {
UserDao dao=new UserDao();
List allfind3 = dao.Allfind3(null, null);
for (Object object : allfind3) {
System.out.println(object);
}
}