springboot+Hibenate+pg数据库

搭建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;
    }

图片共享网站:http://sharepic.cc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值