SpringBoot+Jpa进行简单的增删改查

SpringBoot+Spring-data-jpa进行简单的增删改查


SpringBoot:
通俗来讲,Spring Boot框架,它的作用很简单,就是帮我们自动配置。Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Spring Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功能,让我们快速构建企业及应用程序。
Spring-data-jpa:
我们在使用持久化工具的时候,一般都有一个对象来操作数据库,在原生的Hibernate中叫做Session,在JPA中叫做EntityManager,在MyBatis中叫做SqlSession,通过这个对象来操作数据库。我们一般按照三层结构来看的话,Service层做业务逻辑处理,Dao层和数据库打交道,在Dao中,就存在着上面的对象。如果使用原生的框架,业务逻辑代码我们一般会自定义,会自己去写SQL语句,然后执行。在这个时候,Spring-data-jpa的威力就体现出来了,ORM提供的能力他都提供,ORM框架没有提供的业务逻辑功能Spring-data-jpa也提供,全方位的解决用户的需求。使用Spring-data-jpa进行开发的过程中,常用的功能,我们几乎不需要写一条sql语句,至少在我看来,企业级应用基本上可以不用写任何一条sql,当然spring-data-jpa也提供自己写sql的方式,下面会一一介绍。
首先,配置pom配置文件

        <!-- jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- sql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

application.yml:

ip: 192.168.10.200//本机就用localhost或者本机IP
server:
  port: 8090
spring:
  jpa:
    database-platform: org.hibernate.dialect.MySQL5Dialect
    properties:
      hibernate:
        format_sql: true
        use_sql_comments: true
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://${ip}:3316/lyl?useSSL=true&verifyServerCertificate=false&useUnicode=true&characterEncoding=UTF8
    username: 1111111
    password: 1111111

首先,定义我所需要功能的接口

package com.usermanager.demo.service.inter;

import com.usermanager.demo.entity.UserEntity;
import com.usermanager.demo.entity.vo.UserParam;
import com.usermanager.demo.enums.ResponseResult;
import org.springframework.data.domain.Page;

import java.util.List;

public interface IUserService {
    void Insert(UserParam add);
    void DeleteUserById(Integer id);
    void UpdateUsers(UserParam userParam);
    List<UserEntity> getUserList();
    List<UserEntity> findByUnameLike(String uname);
    Page<UserEntity> findByPage(String uname, String mobile);
}

然后,我们要定义实体类,实体类对应一个数据表,其中的属性对应数据表中的字段。

package com.usermanager.demo.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.format.annotation.DateTimeFormat;


import javax.persistence.*;
import javax.persistence.criteria.Fetch;
import java.util.Date;
import java.util.List;

@Setter
@Getter
@Entity
@Table (name = "users")//数据表的名称
public class UserEntity {

    @Id
    @GenericGenerator(name = "autoId", strategy = "native")//ID自增长
    @GeneratedValue(generator = "autoId")
    private Integer id;
    private String uname;

	//设置时间格式为2019-02-19这种
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date birthday;

    private String mobile;
    private Integer dept;
    private Integer ugroup;
    private Boolean isdelete;

}

下面是DAO层,实现用户的增删改查方法

/**
 * @Description:实现用户的增删改查方法
 */
@Repository
public interface UserRepository extends JpaRepository<UserEntity,Integer>, JpaSpecificationExecutor<UserEntity> {
  }

下面我们进行最简单的查找数据信息,在这里我们就能简单体会到Jpa的强大之处,只需要写一句userRepository.findAll();就可以查到全部数据并放到user列表里

@Service
public class UserService implements IUserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public List<UserEntity> getUserList() {
        return userRepository.findAll();
    }

下面是简单的新增数据,save方法同时也可以用于修改,只要id在数据库中存在,通过save方法就可以把这个id的信息全部修改为输入的信息。

    @Override
    public void Insert(UserParam param)  {
        Date date = new Date();
        UserEntity entity=new UserEntity();
        entity.setId(1);
        entity.setDept(1);
        entity.setUgroup(2);
        entity.setMobile("18300000000");
        entity.setUname("测试");
        entity.setBirthday(date);
        entity.setIsdelete(false);
        userRepository.save(entity);
    }

下面我们进行简单的带条件查询

@Repository
public interface UserRepository extends JpaRepository<UserEntity,Integer>, JpaSpecificationExecutor<UserEntity> {
    List<UserEntity> findByUnameLike(@Param("uname") String uname);
  }

在这里插入图片描述
只要我门在持久层(DAO)层定义一个列表,起名字时就会选择查询条件,通过起的名字JPA就可以自动生成查询语句,也就免去了我们手动写sql的时间。

当然,我们手写sql语句也是可以的,下面简单的介绍一下。
service层:

    @Override
    public void DeleteUserById(Integer id) {
        userRepository.DeleteUserById(id);
    }

这是一个逻辑删除,把user的isdelete属性改为true
DAO层:

@Repository
public interface UserRepository extends JpaRepository<UserEntity,Integer>, JpaSpecificationExecutor<UserEntity> {

//    List<UserEntity> findByUnameLike(@Param("uname") String uname);
    @Modifying
    @Transactional
    @Query(value = "update users set users.isdelete=true where users.id=?1",nativeQuery = true)
    void DeleteUserById(@Param("id")Integer id);

  }

通过Jpa直接删除也很简单,通过jpa所给的Api就可直接操作。
在这里插入图片描述
Controller层:

@RequestMapping("/users")
@RestController
public class UserController {
    @Autowired
    private IUserService userService;
        @ApiOperation(value = "查询所有信息")
    @GetMapping("/findAll")
    public List<UserEntity>getUserInfo()
    {
        return userService.getUserList();
    }
}

最后,我们可以用swagger或者PostMan进行接口测试。最后展示一下swagger测试数据
在这里插入图片描述

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值