zoukankan      html  css  js  c++  java
  • JPA、Hibernate、Spring data jpa之间的关系,以及和springboot的整合

    什么么是JPA?

    全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。

    为我们提供了:

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

    如:@Entity、@Table、@Column、@Transient等注解。

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

    如:entityManager.merge(T t);

     3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

    如:from Student s where s.name = ?

    但是:

    JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。

    也就是说:

    JPA是一套ORM规范,Hibernate实现了JPA规范!如图:

    什么是spring data jpa?

    spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

    Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。如图:

    接口约定命名规则:

    实例:

    创建数据库: 

    在test数据库中创建user表

    -- ----------------------------
    -- Table structure for `user`
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(50) DEFAULT NULL,
      `password` varchar(50) DEFAULT NULL,
      `name` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
    INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

     添加Spring Data JPA的起步依赖

    <!-- springBoot JPA的起步依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

     添加数据库驱动依赖

    <!-- MySQL连接驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

     在application.properties中配置数据库和jpa的相关属性

    #DB Configuration:
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
    spring.datasource.username=root
    spring.datasource.password=root
    ​
    #JPA Configuration:
    spring.jpa.database=MySQL
    spring.jpa.show-sql=true
    spring.jpa.generate-ddl=true
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy

     创建实体配置实体

    @Entity
    public class User {
        // 主键
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        // 用户名
        private String username;
        // 密码
        private String password;
        // 姓名
        private String name;
     
        //此处省略setter和getter方法... ...
    }

     编写UserRepository

    public interface UserRepository extends JpaRepository<User,Long>{
        public List<User> findAll();
    }

     编写测试类

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes=MySpringBootApplication.class)
    public class JpaTest {
    ​
        @Autowired
        private UserRepository userRepository;
    ​
        @Test
        public void test(){
            List<User> users = userRepository.findAll();
            System.out.println(users);
        }
    ​
    }

     控制台打印信息

    注意:如果是jdk9,执行报错如下:

    原因:jdk缺少相应的jar

    解决方案:手动导入对应的maven坐标,如下:

    <!--jdk9需要导入如下坐标-->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>

    第二种整合:

    springboot集成spring data jpa只需两步:

    第一步:导入maven坐标

    第二步:yml配置文件中配置jpa信息

     

  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/appium/p/12020280.html
Copyright © 2011-2022 走看看