搭建springboot+hibeanate+pg框架,封装hibenate
application.yml
spring:
datasource:
url: jdbc:postgresql://192.*****:5432/ardms
username: ardms
password: 123456
driver-class-name: org.postgresql.Driver
jpa:
properties:
hibernate:
temp:
use_jdbc_metadata_defaults: false
dialect: org.hibernate.dialect.PostgreSQLDialect
pom.xml文件配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
controller配置
@RestController
@RequestMapping("test2")
public class TestController {
@Resource
private OrgService2 orgService2;
/**
* 验证服务
* @return
* @param request
*/
@RequestMapping("/serviceValide2")
public String serviceValide(HttpServletRequest request) throws Exception {
List list=orgService2.querytest();
System.out.println("222222222");
return "2222";
}
}
entity文件配置
@Entity
@Table(name = "user",catalog="public") //引入@Table注解,name赋值为表名
public class BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@Column(name = "name")
protected String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
service配置
public interface OrgService2 {
List querytest();
}
serviceImp配置
@Resource
private BaseDao baseDao;
@Override
@Transactional
public List querytest() {
BaseEntity baseEntity=new BaseEntity();
baseEntity.setName("王五");
baseDao.save(baseEntity);
Long id=baseEntity.getId();
return null;
}
dao配置主要用于向公共封装类里传递实体类型
@Repository
public class BaseDao extends SimpleService<BaseEntity> {
}
以下是hibenate的封装类
public interface BaseAppDao<T> {
//通过id查询
T get(Serializable id);
//通过hql+id方式查询这里仅限于id,查询结构多了会报错
T get(String hql, Object... values);
//保存
void save(T entity);
//通过传入hql,Map,多个参数方式查询
List<T> find(String hql, Map<String, Object> map, Object... values);
//通过hql方式查询
List<T> find(String hql);
//通过hql和多个参数方式查询
List<T> find(String hql,Object... values);
//更新实体类
void update(T o);
//通过hql和传参方式更新
void update(String hql, Object... params);
//删除
void delete(String hql, Object... params);
//直接执行sql语句注意,要将pg中的通用public加上如select * from public.user
List<Map> execteSql(String hql);
具体封装方法的实现(很长)
@Repository
public class SimpleService<T> implements BaseAppDao<T> {
@PersistenceContext
private EntityManager entityManager;
protected Class<T> getTClass() {
Class<T> tClass = (Class)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
return tClass;
}
//查询
@Override
public T get(Serializable id) {
return entityManager.find(getTClass(), id);
}
@Override
public T get(String hql, Object... values) {
Query query = this.createQueryAndSetParameters(hql,null,values);
return (T)query.getSingleResult();
}
/**
* 插入数据
*/
@Override
public void save(T entity) {
entityManager.persist(entity);
}
@Override
public List<T> find(String hql, Map<String, Object> map, Object... values) {
Query query=entityManager.createQuery(hql);
if (map != null && !map.isEmpty()) {
Iterator i$ = map.keySet().iterator();
while (i$.hasNext()) {
String key = (String) i$.next();
query.setParameter(key, map.get(key));
}
}
if (values != null && values.length != 0) {
for(int i = 0; i < values.length; ++i) {
query.setParameter(i, values[i]);
}
}
List<T> result=query.getResultList();
entityManager.close();
return result;
}
@Override
public List<T> find(String hql) {
Query query=entityManager.createQuery(hql);
List<T> result=query.getResultList();
entityManager.close();
return result;
}
@Override
public List<T> find(String hql, Object... values) {
Query query=entityManager.createQuery(hql);
if (values != null && values.length != 0) {
for(int i = 0; i < values.length; ++i) {
query.setParameter(i, values[i]);
}
}
List<T> result=query.getResultList();
entityManager.close();
return result;
}
public IPage<T> findForPage(String hql, Map<String, Object> params, int page, int rows, String gridId) {
IPage<T> p = new Page();
p.setStart(page);
p.setLimit(rows);
p.setGridId(gridId);
p.setTotal(this.getCount(hql, params).intValue());
p.setList(this.setPagesAndRows(this.createQueryAndSetParameters(hql, params), page, rows).getResultList());
return p;
}
private Query setPagesAndRows(Query query, int page, int rows) {
return query.setFirstResult(page).setMaxResults(rows);
}
public Long getCount(String hql, Map<String, Object> map, Object... params) {
Pattern pattern = Pattern.compile("\\bfrom\\b");
List<String> strs = Splitter.on(pattern).splitToList(hql.toLowerCase());
int fromIndex = ((String)strs.get(0)).length();
hql.substring(0, fromIndex);
hql = hql.substring(fromIndex);
String rowCountHql = hql.replace("fetch", "");
int index = rowCountHql.toLowerCase().indexOf("order");
if (index > 0) {
rowCountHql = rowCountHql.substring(0, index);
}
String str = "select count(*) " + rowCountHql;
Query query=this.createQueryAndSetParameters(str, map, params);
List list=query.getResultList();
return (Long)list.get(0);
}
private Query createQueryAndSetParameters(String hql, Map<String, Object> map, Object... values) {
Query query = entityManager.createQuery(hql);
if (map != null && !map.isEmpty()) {
Iterator i$ = map.keySet().iterator();
while(i$.hasNext()) {
String key = (String)i$.next();
query.setParameter(key, map.get(key));
}
}
if (values != null && values.length != 0) {
for(int i = 0; i < values.length; ++i) {
query.setParameter(i, values[i]);
}
}
return query;
}
public void update(T o) {
entityManager.merge(o);
}
public void update(String hql, Object... params) {
this.createQueryAndSetParameters(hql, (Map)null, params).executeUpdate();
}
public void delete(String hql, Object... params) {
this.createQueryAndSetParameters(hql, (Map)null, params).executeUpdate();
}
public List<Map> execteSql(String sql) { //查询sql语句
Query query =entityManager.createNativeQuery(sql);
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map> list = query.getResultList();
return list;
}