ITPub博客

首页 > 数据库 > 数据库开发技术 > “盘”它!Spring data JPA的基本使用把你难到了吗?

“盘”它!Spring data JPA的基本使用把你难到了吗?

原创 数据库开发技术 作者:Finally_m 时间:2022-06-06 08:03:00 0 删除 编辑
点击上方蓝字关注我们

一. 故事背景

最近有已经工作的学员跟文哥聊天,说他刚进公司,人生地不熟,每天工作都是战战兢兢,如履薄冰。本来他觉得自己用的最6的技术就是文哥教给他的Mybatis了,本以为靠着Mybatis就可以养家糊口,赚点血汗钱了。结果发现大家用的都是Spring Data JPA!!!他顿时虎躯一震,菊花一紧,赶紧跑来问文哥,要不要跑路,另找下家???

这还得了,难道就因为小小的一个JPA不会用就想跑路?顿时气的文哥差点喷出一口老血!待冷静过后,思考再三,文哥认为既然外面还是有企业在用Spring Data JPA的,所以在这里文哥就普及一下Spring Data JPA的基本使用。

二. JPA简介

那啥是Spring Data JPA呢?

我们来翻看一下Spring的官网,Spring Data JPA是Spring Data家族的一部分,作者的初衷是想开发者通过Spring Data JPA的使用来极大的简化对数据持久层的开发。好了,废话不多说,我们直接开始盘它!!!

三. 创建Maven项目

我们直接创建一个基于Springboot的Maven工程。

1. 引入相关依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
    <relativePath/> 
</parent>

<dependencies>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.23</version>
    </dependency>

    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>

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

看到没有,文哥在pom.xml文件里面引入了lombok依赖,建议小伙伴把这个插件下载下来,用起来真的美滋滋~~~

2. 编写启动器

@SpringBootApplication
public class SpringDataJpaApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringDataJpaApplication.class,args);
    }
}

3. 编写application.yml配置文件

server:
  port: 8071
spring:
  application:
    name: service-user
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.10.139:3306/jpa
    username: root
    password: Admin123!
    type: com.alibaba.druid.pool.DruidDataSource
  jpa:   #springdataJpa配置
    properties:
      hibernate:
        hbm2ddl:
          auto: update  #jpa自动创建数据表,如果表已经存在,则不再创建
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect  #指定数据表引擎 InnoDB

4. 编写pojo实体类

@Entity(name = "user")//实体类和数据表的对应关系
@Data //不用写get set方法了
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //主键自增长
    private Integer uid;//主键
    private String username;//用户名
    private String password;//密码
    private String telephone;//手机号
}

注意:这里有很多注解,文哥在这里给大家解释一下:

  • @Data: 给实体类加get/set/toString/Equals AndHashCode方法,是lombok的注解。

  • @Entity:指定当前类是实体类。

  • @Id: 指定当前字段是主键。

  • @GeneratedValue:指定当前主键的生成方式。

文哥解释之后,这几个注解理解起来是不是就非常简单了呢?

pojo实体编写完成以后,你就可以启动你的项目了,此时你会发现非常有意思的事情,当你打开数据库,你会发现:

你发现,Spring Data JPA会根据实体类帮助我们自动的生成数据表!!!是不是很方便。

5. 编写dao接口

这里便是整个spring-data-jpa中最令人虎躯一震的地方!令人震惊!!!一个接口居然可以实现常用的所有操作!(是不是和mybatisplus有点类似???)

public interface UserDao extends JpaRepository<User, Integer> {
}

你以为我们的杰作才开始吗?不,已然结束了。

至此我们就可以看到,这个接口继承了JpaRepository<实体,ID>,spring-data-jpa只需要这个信息,就可以帮你完成常用的操作:增删查改。

今天文哥就不再具体讲解JpaRepository中所包含的所有方法了,这里只把最简单的增删查改来给大家介绍一下,如果你想了解更多,可以来线下班里找文哥。

6. 编写service

public interface UserService {

    public void addUser(User user);

    public void updateUser(User user);

    public void deleteUserById(Integer id);

    public User findUserById(Integer id);

    public List<User> findAll();
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDao userDao;

    @Override
    public void addUser(User user) {
        userDao.save(user);
    }

    @Override
    public void updateUser(User user) {
        userDao.save(user);
    }

    @Override
    public void deleteUserById(Integer id) {
        userDao.deleteById(id);
    }

    @Override
    public User findUserById(Integer id) {
        return userDao.findById(id).get();
    }

    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }
}

进行到这里,我们的代码就基本编写完毕了,最后看看项目的整体目录结构:

8.编写测试类进行测试

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes 
= SpringDataJpaApplication.class)
public class TestSpringDataJpa 
{

    @Autowired
    UserService userService;

    /**
     * 新增的方法
     */

    @Test
    public void test01(){
        User user = new User();
        user.setUsername("kobe");
        user.setPassword("kobe24");
        user.setTelephone("13333333333");
        userService.addUser(user);
    }

    /**
     * 根据id查询的方法
     */

    @Test
    public void test02(){
        User user = userService.findUserById(1);
        System.out.println(user);
    }

    /**
     * 修改的方法
     */

    @Test
    public void test03(){
        User user = new User();
        user.setUid(4);
        user.setPassword("admin");
        user.setUsername("Mourinho");
        user.setTelephone("16666567890");
        userService.updateUser(user);
    }

    /**
     * 查询所有数据的方法
     */

    @Test
    public void test04(){
        List<User> userList = userService.findAll();
        userList.forEach(user->{
            System.out.println(user);
        });
    }

    @Test
    public void test05(){
        userService.deleteUserById(3);
    }
}

最后经过文哥亲测,没有问题,大家可以亲自测试一下。好了,今天的Spring Data JPA,文哥就给大家介绍到这里,是不是非常简单?你以后不会因为这个不会再跑路了吧?所以小伙伴们以后工作中遇到不会的问题,千万不要想着跑路,只要你肯钻研,办法总是有的。

本月福利,关注公众号回复【福利】抢书咯!

今日份干货,学会的同学回复“666”!

精选第一名,可以领取办公鼠标垫一个哦!

点击【阅读原文】,零基础免费学Java!

原文作者:Java架构栈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-04-13

  • 博文量
    573
  • 访问量
    243862