欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

后续再补 CAD加密 文章填坑

点击: 次  来源:宝鼎软件 时间:2017-07-05

原文出处: 翟永超

在上一篇《 Spring中利用JdbcTemplate会见数据库 》中先容了一种根基的数据会见方法,团结构建RESTful API和利用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App处事端和Web站点的开拓任务了。

然而,在实际开拓进程中,对数据库的操纵无非就“增删改查”。就最为普遍的单表操纵而言,除了表和字段差异外,语句都是雷同的,开拓人员需要写大量雷同而枯燥的语句来完成业务逻辑。

为了办理这些大量枯燥的数据操纵语句,我们第一个想到的是利用ORM框架,好比:Hibernate。通过整合Hibernate之后,我们以操纵Java实体的方法最终将数据改变映射到数据库表中。

为了办理抽象各个Java实体根基的“增删改查”操纵,我们凡是会以泛型的方法封装一个模板Dao来举办抽象简化,可是这样依然不是很利便,软件开发,我们需要针对每个实体编写一个担任自泛型模板Dao的接口,再编写该接口的实现。固然一些基本的数据会见已经可以获得很好的复用,可是在代码布局上针对每个实体城市有一堆Dao的接口和实现。

由于模板Dao的实现,使得这些详细实体的Dao层已经变的很是“薄”,有一些详细实体的Dao实现大概完全就是对模板Dao的简朴署理,而且往往这样的实现类大概会呈此刻许多实体上。Spring-data-jpa的呈现正可以让这样一个已经很“薄”的数据会见层酿成只是一层接口的编写方法。好比,下面的例子:

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
    @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);
}

我们只需要通过编写一个担任自JpaRepository的接口就能完成数据会见,下面以一个详细实例来体验Spring-data-jpa给我们带来的强大成果。

利用示例

由于Spring-data-jpa依赖于Hibernate。假如您对Hibernate有必然相识,下面内容可以绝不艰辛的看懂并上手利用Spring-data-jpa。假如您照旧Hibernate新手,您可以先按如下方法入门,再发起转头进修一下Hibernate以辅佐这部门的领略和进一步利用。

工程设置

在pom.xml中添加相关依赖,插手以下内容:

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

在application.xml中设置:数据库毗连信息(如利用嵌入式数据库则不需要)、自动建设表布局的配置,譬喻利用mysql的环境如下:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的设置属性,其主要浸染是:自动建设、更新、验证数据库表布局。该参数的几种设置如下:

  • create:每次加载hibernate时城市删除上一次的生成的表,然后按照你的model类再从头来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  • create-drop:每次加载hibernate时按照model类生成表,可是sessionFactory一封锁,表就自动删除。
  • update:最常用的属性,第一次加载hibernate时按照model类会自动成立起表的布局(前提是先成立好数据库),今后加载hibernate时按照model类自动更新表布局,纵然表布局改变了但表中的行仍然存在不会删除以前的行。要留意的是当陈设随处事器后,表布局是不会被顿时成立起来的,是要等应用第一次运行起来后才会。
  • validate:每次加载hibernate时,验证建设数据库表布局,只会和数据库中的表举办较量,不会建设新表,可是会插入新值。
  • 至此已经完成基本设置,假如您有在Spring下整合利用过它的话,相信你已经感觉到Spring Boot的便利之处:JPA的传统设置在persistence.xml文件中,可是这里我们不需要。虽然,最亏得构建项目时候凭据之前提过的最佳实践的工程布局来组织,这样以确保各类设置都能被框架扫描到。

    建设实体

    建设一个User实体,包括id(主键)、name(姓名)、age(年数)属性,通过ORM框架其会被映射到数据库表中,由于设置了hibernate.hbm2ddl.auto,在应用启动的时候框架会自动去数据库中建设对应的表。

    @Entity
    public class User {
        @Id
        @GeneratedValue
        private Long id;
        @Column(nullable = false)
        private String name;
        @Column(nullable = false)
        private Integer age;
        // 省略结构函数
        // 省略getter和setter
    }

    建设数据会见接口