• 在 Spring Boot 中使用 Spring Data JPA


    准备工作

    所需依赖:

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</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>
                <scope>runtime</scope>
                <version>8.0.21</version>
            </dependency>
    
    

    application.properties 配置文件如下:

    # 连接数据库的基本配置
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.username=root
    spring.datasource.password=Test@123456
    spring.datasource.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/example?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
    
    # JPA的一般配置
    # 打印 SQL 语句
    spring.jpa.show-sql=true
    # 指定数据库平台
    spring.jpa.database=mysql
    spring.jpa.database-platform=mysql
    # 每次使用时,如果表已经存在,使用更新模式,而不是重新创建一个表
    spring.jpa.hibernate.ddl-auto=update
    # 指定MySQL的方言版本
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
    

    示例

    实体类

    新建 bean 包,在 bean 下,新建实体类 Book:

    @Data
    @Entity(name = "t_book")
    public class Book {
        @Id
        // IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式,mysql 支持这种方式
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
        private String name;
        private String author;
    }
    

    注解 @Data,来自依赖 lombok,作用是自动生成 getting/setting 方法和 tostring 方法。

    注解 @Entity(name = "t_book")表示这是个实体类,并自动在数据库中生成名为 t_book 的表。

    注解 @Id 表示 该表的主键是id。

    注解 @GeneratedValue(strategy = GenerationType.IDENTITY),表示主键由数据生成,采用数据库自增长。

    关于 @GeneratedValue 的详细用法,参考文章:@GeneratedValue 注解详解

    数据访问层(Dao层)

    新建 dao 包,在 dao 下,新建接口 BookDao:

    /**
     *  接口 BookDao 继承接口 JpaRepository
     *  JpaRepository有两个参数:一个是实体类的名称,一个是主键的数据类型
     */
    public interface BookDao extends JpaRepository<Book,Integer> {
    
    }
    

    运行启动类,即可在数据库创建出对应的表。

    测试

    接口 JpaRepository 的源码如下:

    @NoRepositoryBean
    public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
        List<T> findAll();
    
        List<T> findAll(Sort var1);
    
        List<T> findAllById(Iterable<ID> var1);
    
        <S extends T> List<S> saveAll(Iterable<S> var1);
    
        void flush();
    
        <S extends T> S saveAndFlush(S var1);
    
        void deleteInBatch(Iterable<T> var1);
    
        void deleteAllInBatch();
    
        T getOne(ID var1);
    
        <S extends T> List<S> findAll(Example<S> var1);
    
        <S extends T> List<S> findAll(Example<S> var1, Sort var2);
    }
    

    如上,它自带了增删改查的方法。

    在测试类中,写一个增加数据的方法:

    @SpringBootTest
    class JpaApplicationTests {
        @Autowired
        BookDao bookDao;
    
        @Test
        void contextLoads() {
            Book book = new Book();
            book.setName("三国演义");
            book.setAuthor("罗贯中");
            bookDao.save(book);
        }
    }
    

    类似的,更新的方法如下:

        @Test
        public void update(){
            Book book = new Book();
            book.setAuthor("luoguanzhong");
            book.setName("sanguoyanyi");
            book.setId(1);
            bookDao.saveAndFlush(book);
        }
    

    删除的方法如下:

        @Test
        public void delete(){
            bookDao.deleteById(2);
        }
    

    查询方法如下:

        @Test
        public void find1(){
            // 按照 id 查询
            Optional<Book> byId = bookDao.findById(2);
            System.out.println(byId.get());
            // 查询所有
            List<Book> all = bookDao.findAll();
            System.out.println(all);
        }
    

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    django变量使用-在模板中使用视图函数中的变量
    django创建app、在视图函数及url中使用参数、url命名、通过redirect实现网页路径跳转
    第一个django项目-通过命令行和pycharm两种方式
    python安装虚拟环境virtualenvwrapper
    装饰器案例由来例子
    转发:python 装饰器--这篇文章讲的通俗易懂
    JVM调优之jstack找出最耗cpu的线程并定位代码
    mysql视图定义、原理、创建、使用
    列表生成 加1四种方法
    【good】在CentOS 6.x上安装GlusterFS
  • 原文地址:https://www.cnblogs.com/youcoding/p/13870900.html
Copyright © 2020-2023  润新知