dao泛型及优化
来源:互联网 发布:阿里云的视频点播服务 编辑:程序博客网 时间:2024/06/12 09:32
dao泛型优化使用
1.加依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.2.RELEASE</version>
</dependency>
2.配置bean.xml,@:entityManagerFactory的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<context:component-scan base-package="com.babasport">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
</context:component-scan>
<!-- dataSource -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/babasport"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="filters" value="stat"/>
<property name="maxActive" value="20"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="60000"/>
<property name="minIdle" value="1"/>
<property name="timeBetweenEvictionRunsMillis" value="3000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x'"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.babasport.entity"/>
<property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true"/>
<property name="database" value="MYSQL"/>
</bean>
<!-- 配置Spring Data JPA扫描目录 -->
<jpa:repositories base-package="com.babasport.dao"/>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<aop:config>
<aop:pointcut id="service" expression="execution(public * com.babasport.service..*.*(..))" />
<aop:advisor pointcut-ref="service" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<context:component-scan base-package="com.babasport">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
</context:component-scan>
<!-- dataSource -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/babasport"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="filters" value="stat"/>
<property name="maxActive" value="20"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="60000"/>
<property name="minIdle" value="1"/>
<property name="timeBetweenEvictionRunsMillis" value="3000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x'"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.babasport.entity"/>
<property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true"/>
<property name="database" value="MYSQL"/>
</bean>
<!-- 配置Spring Data JPA扫描目录 -->
<jpa:repositories base-package="com.babasport.dao"/>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<aop:config>
<aop:pointcut id="service" expression="execution(public * com.babasport.service..*.*(..))" />
<aop:advisor pointcut-ref="service" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
</beans>
3.定义接口继承一个类PagingAndSortingRepository<Province,Integer> @:CrudRepository的子类,内置很多常用增删查改,findAll() save() delete(Id) findOne(Id) 功能更强大,包含分页方法:findAll(pageRequest);
public interface ProvinceRepository extends PagingAndSortingRepository<Province,Integer>{
@Query("select count(b.id) from Brand b") //可以自己写hql语句,和方法绑定,调用方法,执行语句,返回结果
long count();
@Query("select b from Brand b where b.name like ?1 and b.description like ?2")
Brand findByNameLike(String name, String description);
}
PagingAndSortingRepository CrudRepository 只能被接口继承,接口自动由容器自动重写方法,不能被类继承,否则其父接口实现类全要自己写,列如findAll(),findOne()等等
jpa要写在配置Spring Data JPA扫描目录
<!-- 配置Spring Data JPA扫描目录 -->
<jpa:repositories base-package="com.babasport.dao"/>
Dao自定义接口继承即可使用,service下注入接口后即可使用方法
public interface BrandRepository extends PagingAndSortingRepository<Brand,Integer> {
}
Service实现方法
@Override //不带条件的分页显示
public Page<Brand> getPage(Integer pageNumber, Integer pageSize) {
PageRequest pageRequest = this.buildPageRequest(pageNumber, pageSize);
Page<Brand> brandPage = brandRepository.findAll(pageRequest);
return brandPage;
}
@Resource
private BrandRepository brandRepository; //一定是父接口,这里使用泛型,只有父接口,和底层动态代理相关
@Override
public Iterable<Brand> getAll() {
return brandRepository.findAll();
}
@Override
public void saveOrUpdate(Brand brand) {
brandRepository.save(brand);
}
@Override
public void delBrandById(int brandId) {
brandRepository.delete(brandId);
}
@Override
public Brand getBrandById(int brandId) {
return brandRepository.findOne(brandId);
}
//构建PageRequest
private PageRequest buildPageRequest(Integer pageNumber, Integer pageSize) {
return new PageRequest(pageNumber - 1, pageSize, null);
}
优化Dao后补充 待条件的分页显示 sql原生 效率高;hql效率低,开发速率快
@Repository
public class ProductDaoImpl implements ProductDao {
@PersistenceContext // @Resource
private EntityManager entityManager; //相当于 private SessionFactory sessionFactory;
@Override
public long getCounts(String name, Byte isShow, Integer brandId) {
// String sql = "select count(1) from bbs_product where 1=1";
// if (!name.equals("")) {
// sql = sql + " and name like '%" + name + "%'";
// }
// if (isShow != null) {
// sql = sql + " and is_show=" + isShow;
// }
// if (brandId != 0) {
// sql = sql + " and brand_id=" + brandId;
// }
// Query query = entityManager.createNativeQuery(sql);
// long counts = new BigInteger(query.getSingleResult().toString()).longValue();
// return counts;
String hql="select count(1) from Product p where 1=1";
if(!name.equals("")){
hql=hql+" and p.name like '%"+name+"%'";
}
if (isShow != null) {
hql = hql + " and p.isShow=" + isShow;
}
if (brandId != 0) {
hql = hql + " and p.brand.id=" + brandId;
}
Query query = entityManager.createQuery(hql);
long counts = new BigInteger(query.getSingleResult().toString()).longValue();
return counts;
}
@Override
public List<Object[]> getProductsPage(String name, Byte isShow, Integer brandId, Integer pageNumber, Integer pageSize) {
List<Object[]> productList=new ArrayList<>();
int begin=(pageNumber-1)*pageSize;
String sql = "select * from bbs_product where 1=1";
if (!name.equals("")) {
sql = sql + " and name like '%" + name + "%'";
}
if (isShow != null) {
sql = sql + " and is_show=" + isShow;
}
if (brandId != 0) {
sql = sql + " and brand_id=" + brandId;
}
Query query = entityManager.createNativeQuery(sql);
query.setFirstResult(begin);
query.setMaxResults(pageSize);
List<Object[]> resultList = query.getResultList();
return resultList;
}
public List<Product> getProductsPage1(String name, Byte isShow, Integer brandId, Integer pageNumber, Integer pageSize){
int begin=(pageNumber-1)*pageSize;
String hql="from Product p where 1=1";
if(!name.equals("")){
hql=hql+" and p.name like '%"+name+"%'";
}
if (isShow != null) {
hql = hql + " and p.isShow=" + isShow;
}
if (brandId != 0) {
hql = hql + " and p.brand.id=" + brandId;
}
Query query = entityManager.createQuery(hql);
query.setFirstResult(begin);
query.setMaxResults(pageSize);
List<Product> resultList = query.getResultList();
return resultList;
}
}
@Repository
public class ProductDaoImpl implements ProductDao {
@PersistenceContext // @Resource
private EntityManager entityManager; //相当于 private SessionFactory sessionFactory;
@Override
public long getCounts(String name, Byte isShow, Integer brandId) {
// String sql = "select count(1) from bbs_product where 1=1";
// if (!name.equals("")) {
// sql = sql + " and name like '%" + name + "%'";
// }
// if (isShow != null) {
// sql = sql + " and is_show=" + isShow;
// }
// if (brandId != 0) {
// sql = sql + " and brand_id=" + brandId;
// }
// Query query = entityManager.createNativeQuery(sql);
// long counts = new BigInteger(query.getSingleResult().toString()).longValue();
// return counts;
String hql="select count(1) from Product p where 1=1";
if(!name.equals("")){
hql=hql+" and p.name like '%"+name+"%'";
}
if (isShow != null) {
hql = hql + " and p.isShow=" + isShow;
}
if (brandId != 0) {
hql = hql + " and p.brand.id=" + brandId;
}
Query query = entityManager.createQuery(hql);
long counts = new BigInteger(query.getSingleResult().toString()).longValue();
return counts;
}
@Override
public List<Object[]> getProductsPage(String name, Byte isShow, Integer brandId, Integer pageNumber, Integer pageSize) {
List<Object[]> productList=new ArrayList<>();
int begin=(pageNumber-1)*pageSize;
String sql = "select * from bbs_product where 1=1";
if (!name.equals("")) {
sql = sql + " and name like '%" + name + "%'";
}
if (isShow != null) {
sql = sql + " and is_show=" + isShow;
}
if (brandId != 0) {
sql = sql + " and brand_id=" + brandId;
}
Query query = entityManager.createNativeQuery(sql);
query.setFirstResult(begin);
query.setMaxResults(pageSize);
List<Object[]> resultList = query.getResultList();
return resultList;
}
public List<Product> getProductsPage1(String name, Byte isShow, Integer brandId, Integer pageNumber, Integer pageSize){
int begin=(pageNumber-1)*pageSize;
String hql="from Product p where 1=1";
if(!name.equals("")){
hql=hql+" and p.name like '%"+name+"%'";
}
if (isShow != null) {
hql = hql + " and p.isShow=" + isShow;
}
if (brandId != 0) {
hql = hql + " and p.brand.id=" + brandId;
}
Query query = entityManager.createQuery(hql);
query.setFirstResult(begin);
query.setMaxResults(pageSize);
List<Product> resultList = query.getResultList(); //entityManagerFactory的query方法,若果是hibernate的query就是query.list();
return resultList;
}
}
4.补充 pom。xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dengry</groupId>
<artifactId>babasport</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>babasport Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>babasport</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dengry</groupId>
<artifactId>babasport</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>babasport Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>babasport</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
阅读全文
0 0
- dao泛型及优化
- Java开发———DAO设计模式及优化
- DAO泛型使用
- DAO泛型设计
- 泛型简介,自定义泛型的应用及泛型在Dao层的应用
- 利用泛型封装DAO层(万能DAO)
- hibernate通用泛型dao
- jdbc简易泛型dao
- jdbc简易泛型dao
- hibernate 通用泛型DAO
- JdbcTemplate 实现泛型DAO
- SSH2的泛型DAO
- jdbc简易泛型dao
- 泛型和DAO设计
- java--泛型与DAO
- JDBC-模板模式优化DAO
- 对于DAO的代码优化
- Hibernate泛型DAO及使用方法
- 如何修改applicationId
- 自定义排序
- React-Navigation官网翻译
- nginx学习记录01-安装nginx
- Android 判断手机是否有传感器
- dao泛型及优化
- Java内存模型
- Android内存溢出---out of menory
- 《Android笔记》禁止点击穿透(Click Through)
- centos安装vsftp ftp服务端
- webSocket开源框架:简单的使用
- Android 高德地图定位
- 快速搭建RESTful Web Service(Spring Boot)
- iOS基础之----深浅拷贝