springboot学习笔记(二)——使用springData-JPA进行增删改查

前言:

       Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷。当然,也可以提供用户自己定义的sql。(个人喜欢自己写sql,因为可控,所以后面介绍springboot使用Mybatis)springdata对单表操作十分方便,但是遗憾的是多对多表操作支持的不太好,这时候自己写sql的好处就体现了。

      springdata官方文档可以推荐看一下,想深入了解的同学推荐去学习。

开发环境:    

        win10+IntelliJ IDEA +JDK1.8 

         springboot版本:springboot 1.5.14 ——2.0后的springboot增加了挺多新特性,暂时先不做了解


配置文件准备:

        在application.properties文件中加入数据库所需要的配置信息

#数据库类信息
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#展示sql语句
spring.jpa.show-sql=true
#设置方言
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

#时区设置
spring.jackson.time-zone=GMT+8
#日期期时格式设置置
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

pom.xml准备:

        配置文件准备好后,会报错我们需要导入一些依赖。以下是使用到的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.wen</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>test</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.14.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

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

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
      </dependency>
      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>
        初次下载可能需要一些时间,如果使用的是中央库的话,可能下载真的慢还可能出错,推荐改成阿里云的仓库。自己找教程,这些不是事~

    

开始开发:

        项目结构:

扫描二维码关注公众号,回复: 2284382 查看本文章

                            


        数据库表的设计:



        实体类的编写,这里用了lombok插件。如果没有的同学可以自己写get-set方法!   下面介绍一下使用到的注解。

    注明这是个 实体类

@Entity

    标注用于声明一个实体类的属性映射为数据库的主键列

 @Id

     注解存在的意义主要就是为一个实体生成一个唯一标识的主键

 @GeneratedValue
    对应数据库的列。默认和字段名一致
 @Column

package com.wen.springboot_test_2.Entity;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;

@Entity
@Data
public class Users implements Serializable {
    @Id
    @GeneratedValue
    private  Integer user_id ;
    @Column
    private String password;

}


        东西准备好了,下面我们开始写Dao层。

package com.wen.springboot_test_2.Dao;

import com.wen.springboot_test_2.Entity.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
@Repository
public interface UsersDao extends JpaRepository<Users,String>{
    /**
     * 自动生成的sql
     * @return
     */
    List<Users> findAll();

    /**
     * 自己写sql
     * @return
     */
    @Query("SELECT u from Users u ")
    List<Users> findALL2();

    @Transactional
    @Modifying      //告诉JPA使用的是写操作
    @Query("update Users set password=:password where user_id=:user_id ")
    Integer updateUserPassword(@Param("user_id") String user_id,@Param("password") String password);



}

        

        接下来是service层和实现的service的类

package com.wen.springboot_test_2.service;

import com.wen.springboot_test_2.Entity.Users;

import java.util.List;

public interface UserService {
    /**
     * 测试JPA的sql
     * @return
     */
    List<Users> findAllUser();

    /**
     * 测试我们自己写的sql
     * @return
     */
    List<Users> findAllUser2();

    /**
     * 插入数据库
     * @param users
     * @return
     */
    Users saveUser(Users users);

    /**
     * 修改数据库数据
     * @param account
     * @param password
     * @return
     */
    Integer updadteUserPassword(String account,String password);

    /**
     * 删除用户
     * @param users
     * @return
     */
    void deleteUser(Users users);



}

         实现类如下:

package com.wen.springboot_test_2.service.Impl;

import com.wen.springboot_test_2.Dao.UsersDao;
import com.wen.springboot_test_2.Entity.Users;
import com.wen.springboot_test_2.service.UserService;
import org.apache.catalina.User;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class UserServiceImpl  implements UserService{

    @Resource
    UsersDao usersDao;


    @Override
    public List<Users> findAllUser() {
        return usersDao.findAll();
    }

    @Override
    public List<Users> findAllUser2() {

        return usersDao.findALL2();
    }

    @Override
    public Users saveUser(Users users) {

        /**
         * 这里写校验逻辑,此教程为入门系列,就不写了--懒
         */

        return usersDao.save(users);
    }

    @Override
    public Integer updadteUserPassword(String user_id, String password) {
        /**
         * 这里写校验逻辑,此教程为入门系列,就不写了--懒
         */
        return usersDao.updateUserPassword(user_id,password);
    }

    @Override
    public void deleteUser(Users users) {
         usersDao.delete(users);
    }

}

       Controller层的编写:

package com.wen.springboot_test_2.JPATestcontroller;

import com.wen.springboot_test_2.Entity.Users;
import com.wen.springboot_test_2.service.UserService;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping(value = "user")  //设置全局url
public class UserController {

    @Resource
    private UserService userService;

    /**
     * 增操作
     * @param users
     * @return
     */
    @GetMapping(value = "insert")
    public String insertUser(Users users) {

//        System.out.println(userService.saveUser(users));

        return "插入成功"+userService.saveUser(users);
    }

    /**
     * 更新操作
     * @param account
     * @param password
     * @return
     */
    @GetMapping(value = "update")
    public String update(String account, String password) {

        System.out.println("开始更新:");
        userService.updadteUserPassword(account,password);
        return "更新成功";
    }

    /**
     * 查询操作
     * @return
     */
    @GetMapping(value = "find")
    public String  findUser() {

        System.out.println(userService.findAllUser());

        System.out.println("----------完美分割线--------------");

        return "查询成功:"+userService.findAllUser2();
    }

    @GetMapping(value = "delete")
    public String  findUser(Users users) {

        userService.deleteUser(users);
        return "删除成功:";
    }
}

        

        OK编写完成了。接下来就是测试了。。。运行springboot主方法。

    查询操作:

        链接:http://localhost:8080/user/find

            

      增操作:

        

      修改改操作:

        

        删除操作:

            

总结:

    springboot的入门使用springData基本的增删改查操作就这样做完了。相对来说是不是比以前开发更加简单了,springboot一大堆注解。常用的也挺多的,不过写多了就知道了。每个注解也存在有挺多属性,这个需要自己去研究了。如果写下去每个属性都介绍,那篇幅太长了。。有时间小编会一一介绍这些注解的属性。祝大家学习进步,步步高升~~~


本次案例下载地址:

https://github.com/LuckToMeet-Dian-N/springboot_Learn_2


程序人生,与君共勉

猜你喜欢

转载自blog.csdn.net/weixin_41622183/article/details/81021883