package com.system.hibernate;
import java.util.Collection;
import java.io.Serializable;
import java.io.StringReader;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.hibernate.metadata.ClassMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.beans.factory.InitializingBean;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
@Repository("baseDao")
public class BaseDaoImpl implements InitializingBean{
private static final Logger logger = LoggerFactory.getLogger(BaseDaoImpl.class);
@Autowired
private SessionFactory sessionFactory;
@Autowired
private HibernateTemplate hibernateTemplate;
private final int BATCH_NUMBER = 100;//批量操作数
/**
* 模板缓存
*/
protected Map<String, StatementTemplate> templateCache;
@Autowired
protected DynamicHibernateStatementBuilder dynamicStatementBuilder;
// ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步
private ThreadLocal<Session> session = null;
/**
* 创建session,需要手动关闭
* */
public Session openSession() {
return sessionFactory.openSession();
}
/**
* 根据sql插入或者更新
* */
public void insertOrUpdateBySql(String sql){
if(sql==null) return ;
try{
this.getCurrentSession().createSQLQuery(sql).executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 保存对象
* */
public boolean save(Object obj) {
if(obj==null) return false;
try {
this.hibernateTemplate.save(obj);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 保存所有对象
* */
public boolean saveAll(Collection col) {
if(col==null||col.size()==0) return false;
Session session = this.openSession();
Transaction tx = session.beginTransaction(); // 开启事物
int count = 0;
try {
Iterator iterator = col.iterator();
while(iterator.hasNext()){
count++;
session.save(iterator.next());
if(count%this.BATCH_NUMBER==0){ //以每BATCH_NUMBER个数据作为一个处理单元
session.flush(); //保持与数据库数据的同步
session.clear();//清除内部缓存的全部数据,及时释放出占用的内存
}
}
tx.commit(); // 提交事物
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
return false;
}
this.closeSession(session);
return true;
}
/**
* 删除对象
* */
public boolean delete(Object obj) {
try {
this.hibernateTemplate.delete(obj);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 按id删除对象.
*/
public boolean delete(Class clazz,Serializable id) {
try {
this.hibernateTemplate.delete( this.get(clazz, id) );
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 按id列表获取对象列表.
*/
public List get(Class clazz,Collection ids) {
if(clazz==null||ids==null||ids.size()==0) return null;
return find(clazz,Restrictions.in(getIdName(clazz), ids));
}
/**
* 按Criteria查询对象列表.
*
* @param criterions 数量可变的Criterion.
*/
@SuppressWarnings("unchecked")
public List find(Class clazz,final Criterion... criterions) {
return createCriteria(clazz,criterions).list();
}
/**
* 根据Criterion条件创建Criteria.
* 与find()函数可进行更加灵活的操作.
* @param criterions 数量可变的Criterion.
*/
public Criteria createCriteria(Class clazz,final Criterion... criterions) {
Criteria criteria = this.getCurrentSession().createCriteria(clazz);
for (Criterion c : criterions) {
criteria.add(c);
}
return criteria;
}
/**
* 取得对象的主键名.
*/
public String getIdName(Class clazz) {
if(clazz==null) return null;
ClassMetadata meta = this.sessionFactory.getClassMetadata(clazz);
return meta.getIdentifierPropertyName();
}
/**
* 删除所有对象
* */
public boolean deleteAll(Collection col) {
if(col==null||col.size()==0) return false;
Session session = this.openSession();
Transaction tx = session.beginTransaction(); // 开启事物
int count = 0;
try {
Iterator iterator = col.iterator();
while(iterator.hasNext()){
count++;
session.delete(iterator.next());
if(count%this.BATCH_NUMBER==0){ //以每BATCH_NUMBER个数据作为一个处理单元
session.flush(); //保持与数据库数据的同步
session.clear();//清除内部缓存的全部数据,及时释放出占用的内存
}
}
tx.commit(); // 提交事物
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
return false;
}
this.closeSession(session);
return true;
}
/**
* 更新对象
* */
public boolean update(Object obj) {
if(obj==null) return false;
try {
this.hibernateTemplate.update(obj);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 更新所有对象
* */
public boolean updateAll(Collection col) {
if(col==null||col.size()==0) return false;
Session session = this.openSession();
Transaction tx = session.beginTransaction(); // 开启事物
int count = 0;
try {
Iterator iterator = col.iterator();
while(iterator.hasNext()){
count++;
session.update(iterator.next());
if(count%this.BATCH_NUMBER==0){ //以每BATCH_NUMBER个数据作为一个处理单元
session.flush(); //保持与数据库数据的同步
session.clear();//清除内部缓存的全部数据,及时释放出占用的内存
}
}
tx.commit(); // 提交事物
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
return false;
}
this.closeSession(session);
return true;
}
/**
* 保存或更新
* */
public boolean saveOrUpdate(Object obj) {
try {
this.hibernateTemplate.saveOrUpdate(obj);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 保存或更新所有实体
* */
public boolean saveOrUpdateAll(Collection col) {
Session session = this.openSession();
Transaction tx = session.beginTransaction(); // 开启事物
int count = 0;
try {
Iterator iterator = col.iterator();
while(iterator.hasNext()){
count++;
session.saveOrUpdate(iterator.next());
if(count%this.BATCH_NUMBER==0){ //以每BATCH_NUMBER个数据作为一个处理单元
session.flush(); //保持与数据库数据的同步
session.clear();//清除内部缓存的全部数据,及时释放出占用的内存
}
}
tx.commit(); // 提交事物
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
return false;
}
this.closeSession(session);
return true;
}
/**
* 得到Session ,spring自动管理session,不需要手动关闭
* */
public Session getCurrentSession() throws HibernateException {
// return this.hibernateTemplate.getSessionFactory().getCurrentSession();
return this.hibernateTemplate.getSessionFactory().openSession();
}
/**
* 根据原生sql语句进行查询,返回对象集合
* String sql 原生sql语句
* Class clazz 为类 String[] fields
* 必需为对象字段属性
* 例子: Sql : select username as name ,userage as age from
没有合适的资源?快使用搜索试试~ 我知道了~
hibernate增删改查和动态sql
共90个文件
java:28个
class:24个
xml:15个
需积分: 50 22 下载量 83 浏览量
2016-11-18
00:05:45
上传
评论
收藏 117KB ZIP 举报
温馨提示
这里是hibernate增删查改和采用freemarker实现动态sql,hql
资源推荐
资源详情
资源评论
收起资源包目录
curd2 Maven Webapp.zip (90个子文件)
curd2 Maven Webapp
pom.xml 5KB
target
m2e-jee
web-resources
META-INF
maven
02_curd
curd
pom.xml 5KB
pom.properties 259B
MANIFEST.MF 114B
classes
test
TestUserService.class 11KB
TestUserService.java 13KB
log4j.properties 2KB
com
business
dao
UserDao.java 158B
UserDao.class 112B
impl
UserDaoImpl.class 459B
UserDaoImpl.java 301B
dynamicXml
test-dynamicHibernateSql.xml 1KB
service
UserService.class 124B
UserService.java 192B
impl
UserServiceImpl.java 649B
UserServiceImpl.class 593B
entity
User.hbm.xml 677B
User.class 1KB
User.java 952B
system
hibernate
DynamicStatementDTDEntityResolver.java 3KB
StatementTemplate.class 1KB
Reflections.class 1KB
SimpleHibernateDAO.java 17KB
DynamicHibernateStatementBuilder.java 480B
BaseDaoImpl.java 22KB
BaseServiceImpl.class 6KB
StatementTemplate$TYPE.class 1KB
StatementTemplate.java 582B
DefaultDynamicHibernateStatementBuilder.java 5KB
DynamicStatementDTDEntityResolver.class 2KB
DefaultDynamicHibernateStatementBuilder.class 6KB
DynamicHibernateStatementBuilder.class 399B
Reflections.java 1KB
BaseDaoImpl.class 19KB
BaseServiceImpl.java 6KB
db.properties 122B
hibernate.cfg.xml 2KB
applicationContext.xml 4KB
dynamic-hibernate-statement-1.0.dtd 607B
.settings
com.genuitec.eclipse.j2eedt.core.prefs 56B
org.eclipse.m2e.core.prefs 90B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.wst.common.component 509B
org.eclipse.wst.jsdt.ui.superType.container 49B
.jsdtscope 508B
org.eclipse.jdt.core.prefs 430B
src
test
main
webapp
META-INF
MANIFEST.MF 39B
WEB-INF
web.xml 215B
classes
test
Test.class 518B
Test2.class 522B
log4j.properties 2KB
com
business
system
hibernate
StatementTemplate.class 1KB
Reflections.class 1KB
SimpleHibernateDAO.class 13KB
StatementTemplate$TYPE.class 1KB
DynamicStatementDTDEntityResolver.class 3KB
DefaultDynamicHibernateStatementBuilder.class 7KB
DynamicHibernateStatementBuilder.class 399B
BaseDaoImpl.class 10KB
spring
db.properties 122B
hibernate.cfg.xml 785B
test-dynamicHibernateSql.xml 906B
applicationContext.xml 2KB
dynamic-hibernate-statement-1.0.dtd 607B
lib
index.jsp 52B
resources
test
TestUserService.java 13KB
log4j.properties 2KB
com
business
dao
UserDao.java 158B
impl
UserDaoImpl.java 301B
dynamicXml
test-dynamicHibernateSql.xml 1KB
service
UserService.java 192B
impl
UserServiceImpl.java 649B
entity
User.hbm.xml 677B
User.java 952B
system
hibernate
DynamicStatementDTDEntityResolver.java 3KB
SimpleHibernateDAO.java 17KB
DynamicHibernateStatementBuilder.java 480B
BaseDaoImpl.java 22KB
StatementTemplate.java 582B
DefaultDynamicHibernateStatementBuilder.java 5KB
Reflections.java 1KB
BaseServiceImpl.java 6KB
db.properties 122B
hibernate.cfg.xml 2KB
applicationContext.xml 4KB
dynamic-hibernate-statement-1.0.dtd 607B
.project 2KB
.mymetadata 321B
.classpath 542B
共 90 条
- 1
资源评论
清风明月coder
- 粉丝: 116
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功