springdatajpa的使用-单表

准备:

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进行查询。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值