IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

SpringBoot教程(三):Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

Spring Boot实战(一):只需两步!Eclipse+Maven快速构建第一个Spring Boot项目构建了第一个Spring Boot项目。

Spring Boot实战(二):Spring Boot连接MySQL数据库连接了MySQL数据库。

本文在之前的基础上,使用Spring Data Jpa对MySQL数据库进行CRUD——增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete) 操作。

Spring Data Jpa

JPA是什么?看看百度怎么说。JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

  • ORM映射元数据

JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

  • API

用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

  • 查询语言

这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

Spirng Data Jpa是spring提供的一套简化JPA开发的框架,按照约定好的“方法命名规则”写Dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。

在学习的过程中,查询了许多资料,我觉得博客园的这篇总结的挺好:spring boot(五):spring data jpa的使用

下面正式开始CRUD:

增加(Create)

在UserController.java中添加方法:

    @RequestMapping("/addUser")
    @ResponseBody
    public User addUser(String userName, String PassWord) {
        User user = new User();
        user.setUserName(userName);
        user.setPassWord(PassWord);
        userRepository.save(user);
        return user;
    }

使用Postman访问http://localhost:8080//user/addUser?userName=Laplace&PassWord=math

123_1.png

数据库里面增加了一条id为5,username为Laplace,password为math的记录:

123_2.png

为了方便查询,再利用相同的操作插入一些数据。

查询(Retrieve)

上一篇已经完成了简单的findAll和findByUserName。这里进行一些自定义查询操作。

Spring data 大部分的SQL都可以根据方法名定义的方式来实现,也支持自己写SQL语句来查询。

在SQL的查询方法上面使用@Query注解,如涉及到删除和修改在需要加上@Modifying.也可以根据需要添加 @Transactional 对事物的支持。

例如查询id大于等于6的记录,SQL语句:SELECT * FROM USER t WHERE t.id >= 6,这条语句在Navicat中新建查询中运行是没有问题的,添加到Dao中却是有问题的,会抛出异常:

java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List

在Dao中添加:

    @Query("SELECT * FROM USER t WHERE t.id >= 6")
    List<User> getUser();

这是由于Jpa无法自动完成查询结果到自定义实体的映射。需要改成下面这个样子的,写实体类的路径,From后面加的不是表的名字,而是对应的实体类的名字

    @Query("SELECT new  com.example.demo.domain.User(t.id,t.userName,t.passWord) FROM  User t WHERE t.id >= 6")
    List<User> getUser();

还需要在实体类User.java中间添加对应的构造方法(与上面SQL语句中的保持一致),才能够返回实体类的对象的:

    public User(Long id, String userName, String passWord) {
        super();
        this.id = id;
        this.userName = userName;
        this.passWord = passWord;
    }

userController.java 中的内容如下:

    @RequestMapping("/getUser")
    public List<User> getUser() {
        List<User> res = userRepository.getUser();
        return res;
    }

使用Postman访问http://localhost:8080//user/getUser

123_3.png

这是数据库中的内容:

123_4.png

更新(Update)

更新可以使用save方法;这里使用自定义SQL语句进行更新,试用一下@Modifying注解。

Dao:

    @Modifying
    @Query("UPDATE User u SET u.userName = ?1 WHERE u.id = ?2")
    void updateUserNameById(String userName, Long id);

Controller:

    @RequestMapping("/updateUserNameById")
    @Transactional
    public String updateUserNameById(@RequestParam("name")  String name, @RequestParam("id") Long id) {
        userRepository.updateUserNameById(name, id);
        return "更新成功";
    }

使用Postman访问http://localhost:8080//user/updateUserNameById?name=AAAAAA&id=6

123_5.png

可以看到数据库发生了改变:

123_6.png

删除(Delete)

根据id删除记录,直接在Controller中添加:

    @RequestMapping("/deleteUserById")
    public String deleteUserById(@RequestParam("id") Long id) {
        userRepository.deleteById(id);
        return "删除成功";
    }

使用Postman访问http://localhost:8080//user/deleteUserById?id=11

123_7.png

可以完成删除操作:

123_8.png

总结

本文使用Spring Boot JPA进行数据操作,不难发现,使用JPA可以大量减少Dao层代码,提升开发效率。

文章永久链接:https://tech.souyunku.com/?p=35983


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(63) 打赏



未经允许不得转载:搜云库技术团队 » SpringBoot教程(三):Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367