zoukankan      html  css  js  c++  java
  • SpringBoot整合SpringData JPA入门到入坟

    首先创建一个SpringBoot项目,目录结构如下:

    在pom.xml中添加jpa依赖,其它所需依赖自行添加

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

    application.properties配置如下

    #端口
    server.port=8888
    #MySQL配置
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/spring?characterEncoding=utf8&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=Panbing936@
    #swagger配置
    swagger.enabled=true
    swagger.base-package=com.example.demo.controller
    swagger.base-path=/**
    #SpringData JPA配置
    ##validate  加载hibernate时,验证创建数据库表结构
    ##create   每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
    ##create-drop        加载hibernate时创建,退出是删除表结构
    ##update                 加载hibernate自动更新数据库结构
    ##validate 启动时验证表的结构,不会创建表
    ##none  启动时不做任何操作
    spring.jpa.hibernate.ddl-auto=update
    ##控制台打印sql
    spring.jpa.show-sql=true
    #不能少
    spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
    

    实体类Users.java

    @Entity
    @Table(name="users")
    public class Users {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
        private String userName;
        private String password;
    //set.get方法省略
    }
    

    接口UserRepository.java继承JpaRepository

    public interface UserRepository extends JpaRepository<Users,Integer> {
    }
    

    控制器UserController.java

    @RestController
    public class UserController {
        @Autowired
        private UserRepository userRepository;
    
        @GetMapping(value ="findAllUser")
        public List findAll()
        {
            return userRepository.findAll();
        }
    
        @GetMapping(value = "getOne")
        public Users getOne(Integer id)
        {
    //        Users users= userRepository.findOne(id);
    //        return users;
            return userRepository.findOne(id);
        }
        @GetMapping(value = "delUserById")
        public String delUserById(int id)
        {
              userRepository.delete(id);
              return "delete success";
        }
        @GetMapping(value = "save")
        public String save(String userName,String password)
        {
    //        userRepository.save(userName,password);
            Users users=new Users(userName,password);
            userRepository.save(users);
            return "save success";
        }
    
    }
    

    接下来测试,这里用swagger生成的接口文档进行测试

    在这之前要在数据库添加几条数据
    测试findAllUser方法


    测试getOne方法

    测试save方法

    测试delUserById方法

    刷新数据库确认一下,证明测试确实成功了

    补充

    @Id:

    @Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
    @Id标注也可置于属性的getter方法之前。

    @GeneratedValue:

    @GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
    在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
    –IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
    –AUTO: JPA自动选择合适的策略,是默认选项;
    –SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
    –TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

    推荐的两种写法:

    属性之上:
    @Table(name="CUSTOMERS")
    @Entity
    public class Customer {
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Id
        private Integer id;
        private String name;
        private String email;
        private int age;
     
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
    

    getter方法之上:

    @Table(name="CUSTOMERS")
    @Entity
    public class Customer {
        private Integer id;
        private String name;
        private String email;
        private int age;
     
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Id
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
    
    但是不能某个注解在属性之上,某个注解在getter之上,将抛出异常,对其他注解也相同,下面这种做法就是错误的
    @Table(name="CUSTOMERS")
    @Entity
    public class Customer {
        @Id
        private Integer id;
        private String name;
        private String email;
        private int age;
     
        @GeneratedValue(strategy=GenerationType.AUTO)
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
    

    github代码

    个人网站

  • 相关阅读:
    【VS2013编译DirectX Tutorials时遇到的错误】"const wchar_t *" 类型的实参与 "LPCSTR" 类型的形参不兼容
    python3 登录接口
    Python-网络编程
    Python之mock接口开发
    python基础笔记(五):操作excel、mysql、redis
    python基础笔记(六):md5加密
    python3基础笔记(四):模块安装&os模块&时间模块
    python3基础笔记(三):函数
    python3基础笔记(二):文件操作、json操作
    Python3基础笔记
  • 原文地址:https://www.cnblogs.com/panbingwen/p/10765030.html
Copyright © 2011-2022 走看看