//...省略datasouce
<!--允许使用注解方式配置事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!--service端使用inject方式查询扫描 -->
<jpa:repositories base-package="cn.com.taiji.com.repository" />
<!-- JPA 事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dataSource" />
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- JPA 实体管理工厂 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence-oracle.xml" />
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.hbm2ddl.auto" value="no" />
<entry key="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<entry key="hibernate.show_sql" value="true" />
<entry key="hibernate.format_sql" value="false" />
</map>
</property>
</bean>`
<tx:annotation-driven transaction-manager="transactionManager" />
<!--service端使用inject方式查询扫描 -->
<jpa:repositories base-package="cn.com.taiji.com.repository" />
<!-- JPA 事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dataSource" />
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- JPA 实体管理工厂 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence-oracle.xml" />
</bean>
persistence-oracle.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="app" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<mapping-file>META-INF/orm-oracle.xml</mapping-file>
<exclude-unlisted-classes/>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="no" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
orm-oracle.xml实体类映射文件
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm/orm_2_1.xsd">
<entity class="cn.com.taiji.com.domain.ServiceMenu" />
</entity-mappings>
实体类
package cn.com.taiji.com.domain;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
* @ClassName: ServiceMenu
* @Description: 服务目录
* @author ranxing
* @date 2017年8月2日 下午2:59:57
*
*/
@Entity
@Table(name="rkrm$_ywfwinfo")
@NamedQuery(name="ServiceMenu.findAll", query="SELECT t FROM ServiceMenu t")
public class ServiceMenu implements Serializable {
/**
*
*/
private static final long serialVersionUID = -1332680945578333683L;
public ServiceMenu(){
}
@Id
private String fwlxid ;
private String fwlxname;
private String fwloc;
private String fwlxdesc;
@Lob
private String fwinfo;
private String dwid;
private String ywlxid;
private String creator;
private String ctime;
private String fromfwlxid;
public String getFwlxid() {
return fwlxid;
}
public void setFwlxid(String fwlxid) {
this.fwlxid = fwlxid;
}
public String getFwlxname() {
return fwlxname;
}
public void setFwlxname(String fwlxname) {
this.fwlxname = fwlxname;
}
public String getFwloc() {
return fwloc;
}
public void setFwloc(String fwloc) {
this.fwloc = fwloc;
}
public String getFwlxdesc() {
return fwlxdesc;
}
public void setFwlxdesc(String fwlxdesc) {
this.fwlxdesc = fwlxdesc;
}
public String getFwinfo() {
return fwinfo;
}
public void setFwinfo(String fwinfo) {
this.fwinfo = fwinfo;
}
public String getDwid() {
return dwid;
}
public void setDwid(String dwid) {
this.dwid = dwid;
}
public String getYwlxid() {
return ywlxid;
}
public void setYwlxid(String ywlxid) {
this.ywlxid = ywlxid;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getCtime() {
return ctime;
}
public void setCtime(String ctime) {
this.ctime = ctime;
}
public String getFromfwlxid() {
return fromfwlxid;
}
public void setFromfwlxid(String fromfwlxid) {
this.fromfwlxid = fromfwlxid;
}
}
ServiceMenuRepository实体类相关连接数据库接口
一般我都习惯手写sql
package cn.com.taiji.com.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import cn.com.taiji.com.domain.ServiceMenu;
@Transactional//这个注解很重要哦
public interface ServiceMenuRepository extends
JpaRepository<ServiceMenu, String>,
JpaSpecificationExecutor<ServiceMenu>,
PagingAndSortingRepository<ServiceMenu,String>{
/* 弄几个栗子,并不是这个实体的方法
/**
* 查询出未删除的所有数据字典记录集合
* @return
*/
@Query("select c from Infolink c where c.deleteFlog=1 ")
List<Infolink> findAllInfolinks();
//and b.infosort_id = ?1
@Query(" select c from Infolink c , InfosortInfolink b where b.infolinkId = c.infolinkId and c.infolinkId = ?1 ")
List<Infolink> findLinkById(String infolinkId);
//and b.infosort_id = ?1
@Modifying
@Query(" update Infolink c set c.deleteFlog = 0 where c.infolinkId= ?1 ")
void updateFlag( String infolinkId);
*/
}
一个查询至于拼接过程看需求自己弄吧类似普通sql拼接
@PersistenceContext
private EntityManager em;
@Inject
LogZJTaskInfoRepository logZJTaskInfoRepository;
@Inject
ServiceInfoRepository serviceInfoRepository;
//...以上省略 这个sql不是上面实体里面的只是例子,2个表的查询写法
// 大于2个表的方式,还不如使用级联就行了,当然我不会..
// length()是oracle中clob字段的非空
// 只要配置正确mysql和oracle是通用的,除了特殊字段需要自己处理,
// 正常的都一样查询,mysql会自己查询为limit,oracle会为ROWNUM
StringBuilder jpql = new StringBuilder ("select c from LogZJTaskInfo c , TimeInfo d where c.zyid = d.zyid "
+ "and length(d.timeinfo)>0 ") ;
Query query = em.createQuery(jpql.toString());
query.setFirstResult(page*pageSize); // query
query.setMaxResults(pageSize);
// query.setParameter("appointPeopleId", searchParameters.get("userId")); //登录人Id
List list = query.getResultList();
map.put("List", list);
// 来个单一查询 通用方法传id就行
ServiceInfo si = serviceInfoRepository.findOne((String) object);