springboot+maven+springdata jpa +querydsl快速实现增删改查分页
来源:互联网 发布:网络通信安全员证书 编辑:程序博客网 时间:2024/05/21 07:57
第一步:pom文件引入下面的依赖文件和querydsl的插件
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.1.3</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
第二步:
(1)创建一个实体类:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "product_info")
public class ProductInfo implements Serializable{
/**
* 产品实体类
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "idGenerator")
@GenericGenerator(name = "idGenerator",strategy = "uuid")
private String id;
@ApiModelProperty(value = "产品的名称")
@Column(name = "product_name")
private String productName;
@ApiModelProperty(value = "产品的颜色")
@Column(name = "product_color")
private String productColor;
@ApiModelProperty(value = "产品的编号")
@Column(name = "product_code")
private String productCode;
@ApiModelProperty(value = "产品的价格")
@Column(name = "product_price")
private String productPrice;
@ApiModelProperty(value = "产品的产地")
@Column(name = "product_palace")
private String productPalace;
@ApiModelProperty(value = "产品的净重")
@Column(name = "product_net_weight")
private Double productNetWeight;
@ApiModelProperty(value = "产品的生产日期")
@Column(name = "product_date")
private String productDate;
@ApiModelProperty(value = "产品保质期")
@Column(name = "expiration_date")
private Integer expirationDate;
}
(2)创建一个接口,分别继承JpaRepository<T,ID extends Serializable>,JpaSpecificationExecutor<T>,QueryDslPredicateExecutor<T>
@Repository
public interface IProductRepository extends JpaRepository<ProductInfo, String>,JpaSpecificationExecutor<ProductInfo>,QueryDslPredicateExecutor<ProductInfo>{}
(3)创建一个IProductService接口,里面包括 增加、删除、修改、查询分页方法
public interface IProductService {
void saveProduct(ProductInfo productInfo);
void deleteProduct(String[] ids);
ProductInfo updateProduct(String id);
Page<ProductInfo> searchByCondition(String productName, String productColor, String productCode, int page, int limit);
}
(4)创建一个ProductService implements IProductService,将 IProductRepository 的对象注入进去
@Service
public class ProductService implements IProductService {
@Autowired
private IProductRepository repository;
@Override
public void saveProduct(ProductInfo productInfo) {
repository.save(productInfo);
}
@Override
public void deleteProduct(String[] ids) {
for(String id : ids){
repository.delete(id);
}
}
@Override
public ProductInfo updateProduct(String id) {
return repository.findOne(id);
}
@Override
public Page<ProductInfo> searchByCondition(String productName, String productColor, String productCode,int page,int limit) {
QProductInfo qp = QProductInfo.productInfo;
BooleanBuilder builder = new BooleanBuilder();
if(productName != null && !productName.equals("")){
builder.and(qp.productName.like("%"+productName+"%"));
}
if(productColor != null && !productColor.equals("")){
builder.and(qp.productColor.like("%"+productCode+"%"));
}
if(productCode != null && !productCode.equals("")){
builder.and(qp.productCode.like("%"+productCode+"%"));
}
return repository.findAll(builder,new PageRequest(page, limit));
}
}
第三步:
在application.properties中配置数据库:
spring.datasource.url = jdbc:mysql://localhost:3306/springdata?characterEncoding=utf8&useSSL=true
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.generate-ddl = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql = true
spring.jpa.properties.hibernate.format_sql = true
注意点:光标紧跟每行最后一个字母就好,千万不要打空格。
第四步:测试
分别创建两个类:ProductTest、AppTestConfig
ProductTest类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppTestConfig.class })
public class ProductionTest {
public static final Logger logger = LoggerFactory.getLogger(ProductTest.class);
@Autowired
private ProductService productService;
@Test
public void test_001_测试产品添加(){
ProductInfo productInfo = new ProductInfo();
productInfo.setProductName("pear");
productInfo.setProductColor("青色");
productInfo.setProductNetWeight(0.80);
productInfo.setProductCode("00011000");
productInfo.setExpirationDate(3);
productInfo.setProductPalace("陕西彬县");
productInfo.setProductDate("2017-09-30");
productService.saveProduct(productInfo);
logger.info("=============保存成功====================");
}
@Test
public void test_002_测试产品删除(){
String[] ids = new String[]{"4028c8605ef6c271015ef6c275660000"};
productService.deleteProduct(ids);
logger.info("=============删除成功====================");
}
@Test
public void test_003_修改产品信息(){
ProductInfo productInfo = productService.updateProduct("4028c8605ef66ae7015ef66aeb680000");
productInfo.setProductName("橘子");
productInfo.setProductCode("10110111");
productInfo.setProductPrice("5.25");
productService.saveProduct(productInfo);
logger.info("===============修改成功===============");
}
@Test
public void test_004_根据条件查询(){
Page<ProductInfo> list;
list = productService.searchByCondition("橘子", null, null, 0, 100);
TestCase.assertTrue(list.getContent().size()>0);
}
}
AppTestConfig类:
@Configuration
@ComponentScan(basePackages = { "" })//写自己的包结构 例如:com.spring.demo.*
@PropertySource("classpath:application.properties")
@EnableTransactionManagement
@EnableJpaRepositories(basePackages="")//repository包的全路径com.spring.demo.server.repository
public class AppTestConfig implements EnvironmentAware{
private Environment environment;
@Override
public void setEnvironment(Environment environment) {
this.environment=environment;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("spring.datasource.driver-class-name"));
dataSource.setUrl(environment.getRequiredProperty("spring.datasource.url"));
dataSource.setUsername(environment.getRequiredProperty("spring.datasource.username"));
dataSource.setPassword(environment.getRequiredProperty("spring.datasource.password"));
return dataSource;
}
@Bean
@Autowired
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource ds){
HibernateJpaVendorAdapter jpaVendorAdapter=new HibernateJpaVendorAdapter();
jpaVendorAdapter.setGenerateDdl(true);
jpaVendorAdapter.setShowSql(true);
Properties jpaProperties=new Properties();
jpaProperties.setProperty("hibernate.hbm2ddl.auto", "update");//validate,create,create-drop
LocalContainerEntityManagerFactoryBean emf=new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(ds);
emf.setPackagesToScan("); //自己实体类的所在的包 com.spring.demo.domain
emf.setJpaVendorAdapter(jpaVendorAdapter);
emf.setJpaProperties(jpaProperties);
return emf;
}
@Bean
@Autowired
public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean emf){
JpaTransactionManager transactionManager=new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf.getObject());
return transactionManager;
}
@Bean
public PersistenceAnnotationBeanPostProcessor persistenceAnnotationBeanPostProcessor(){
PersistenceAnnotationBeanPostProcessor persistenceAnnotationBeanPostProcessor=new PersistenceAnnotationBeanPostProcessor();
return persistenceAnnotationBeanPostProcessor;
}
}
- springboot+maven+springdata jpa +querydsl快速实现增删改查分页
- SpringBoot+Jpa实现增删改查以及分页查询
- SpringBoot JPA实现增删改查、分页、排序、事务操作等功能
- SpringBoot JPA实现增删改查、分页、排序、事务操作等功能
- SpringBoot JPA实现增删改查、分页、排序、事务操作等功能
- SpringBoot JPA实现增删改查、分页、排序、事务操作等功能
- spring-data-jpa实现增删改查以及分页操作
- springboot(十五):springboot+jpa+thymeleaf增删改查示例
- springboot(十五):springboot+jpa+thymeleaf增删改查示例
- springboot(十五):springboot+jpa+thymeleaf增删改查示例
- springboot(十五):springboot+jpa+thymeleaf增删改查示例
- JPA增删改查
- Springboot 之 JPA对Mysql数据库的增删改查
- IntelliJ Idea SpringBoot jpa mysql数据库增删改查实例
- Thymeleaf+spring jpa+springmvc实现的增删改查以及分页查询
- Spring+maven+mybatis 实现增删查改
- 用easyjweb快速实现增删查改
- JPA客户端增删改查
- Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBe
- 云主机与外网主机、Android手机端的socket通信
- mybatis的理解
- ionic providers的使用
- 中间件的理解
- springboot+maven+springdata jpa +querydsl快速实现增删改查分页
- 手机网上商城-项目经验总结(二)-创建项目结构
- javaBean验证框架(6)—附加约束和组合约束
- 手机网上商城-项目经验总结(三)-QueryRunner
- HDU5514 Frogs (gcd + 容斥原理)
- 1.1基本算法举例(上篇)
- 2412. 【NOI2005】瑰丽华尔兹
- STL map
- 2017.10.7离线赛总结