准备:
1.引入jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
2.yml文件中配置数据库连接信息:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://ip:port/表名?characterEncoding=utf-8
username: 用户名
password: 密码
3.新建与表对应的实体类,此处使用企业表举例:
在表加上@Entity,@Table注解,其中tb_enterprise为表名
@Entity
@Table(name="tb_enterprise")
public class Enterprise {
@ApiModelProperty(value = "企业id")
@Id
private String id;
@ApiModelProperty(value = "企业名")
private String name;
@ApiModelProperty(value = "企业简介")
private String summary;
@ApiModelProperty(value = "企业地址")
private String address;
@ApiModelProperty(value = "标签列表")
private String labels;
@ApiModelProperty(value = "坐标")
private String coordinate;
@ApiModelProperty(value = "是否热门")
private String ishot;
@ApiModelProperty(value = "职位数")
private Integer jobcount;
@ApiModelProperty(value = "URL")
private String url;
}
4.新建dao接口:
JpaRepository:用于基本的crud,后面泛型使用实体类
JpaSpecificationExecutor:用于条件查询
public interface EnterpriseDao extends JpaRepository<Enterprise,String>,
JpaSpecificationExecutor<Enterprise> {
}
基本的crud:
//引入dao
@Autowired
private EnterpriseDao enterpriseDao;
//查找全部企业
@Override
public List<Enterprise> findAll() {
return enterpriseDao.findAll();
}
//根据企业id查找企业
@Override
public Enterprise findById(String enterpriseId) {
return enterpriseDao.findById(enterpriseId).get();
}
//新增企业
@Override
public void add(Enterprise enterprise) {
enterpriseDao.save(enterprise);
}
//修改企业
@Override
public void update(Enterprise enterprise) {
enterpriseDao.save(enterprise);
}
//根据企业id删除企业
@Override
public void deleteById(String enterpriseId) {
enterpriseDao.deleteById(enterpriseId);
}
条件查询1:
//根据name和ishot查询企业列表
@Override
public List<Enterprise> findSearch(Enterprise enterprise) {
return enterpriseDao.findAll(new Specification<Enterprise>() {
/**
* @param root 根对象,也就是把条件封装到哪个对象中
* @param cq 封装的是查询关键字,比如groupBy,orderBy
* @param cb 封装的是条件对象,返回null,代表不需要条件
* @return
*/
@Override
public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<>();
if(!StringUtils.isEmpty(enterprise.getName())){
list.add(cb.like(root.get("name").as(String.class), "%" + enterprise.getName() + "%"));
}
if(!StringUtils.isEmpty(enterprise.getIshot())){
list.add(cb.equal(root.get("ishot").as(String.class), enterprise.getIshot()));
}
//使用Predicate的集合存储条件,并转化为数组
Predicate[] predicates = new Predicate[list.size()];
predicates = list.toArray(predicates);
return cb.and(predicates);
}
});
}
//根据name和ishot查询企业列表,并使用分页
@Override
public Page<Enterprise> pageSearch(Enterprise enterprise, int page, int size) {
//传人分页对象Pageable
Pageable pageable = PageRequest.of(page-1, size);
return enterpriseDao.findAll(new Specification<Enterprise>() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<>();
if(!StringUtils.isEmpty(enterprise.getName())){
list.add(cb.like(root.get("name").as(String.class), "%" + enterprise.getName() + "%"));
}
if(!StringUtils.isEmpty(enterprise.getIshot())){
list.add(cb.equal(root.get("ishot").as(String.class), enterprise.getIshot()));
}
Predicate[] predicates = new Predicate[list.size()];
predicates = list.toArray(predicates);
return cb.and(predicates);
}
},pageable);
}
条件查询2:
//根据ishot查询是否为热门企业
//在dao里增加方法,此处是将条件拼接到方法上
List<Enterprise> findByIshot(String ishot);
总结:
以上列出了使用springdatajpa对数据库的基本增删改查,条件查询的两种方式,还有分页查询。这些查询都是对单表进行操作,比较方便。如果需要多表查询,最好使用原生的sql进行查询。