JPA在springboot中的使用demo

四联问

  • 什么是JPA
  • 解决什么问题
  • 怎么用?使用场景是哪些
  • 有哪些优缺点

什么是JPA

JPA(Java persistence API )java持久性应用程序接口;可以通过xml或者注解描述对象-关系表之间的隐射关系;可以将对象持久化到数据库中;

解决什么问题

日常编程过程中,我们需要操作数据库,通常controller、service、serviceImpl、dao、mapper写一通才可以去操作数据库;有了jpa就可以省略mapper层,不需要自己去写sql,只要写dao层就可以实现对数据库的访问和操作,除了日常的CRUD之外的功能,还提供了分页,排序、复杂查询等等;

怎么用?使用场景

JPA其实是一种标准和规范,在这个标准规范之上,需要有一种技术或者说框架来实现JPA,那么常见的Spring data jpa 应运而生,spring data jpa就是一种基于jpa标准规范的开发框架,只需要写dao层接口就可以在不写接口实现的情况下对数据库进行访问和操作。

  • 引入jpa的jar包
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
  • 增加yml配置
  jpa:
  #数据库类型
    database: mysql
    #是否显示sql
    show-sql: true
    hibernate:
    #ddl-auto的参数有none、update、create、create-drop、validate;none默认值:表示什么都不做,不会对数据库进行任何操作;update:表示每次启动时都会根据entity中定义的属性去更新数据库中的表,有则更新,没有则创建表;create:表示每次启动时都会去创建表,如果表内有数据,则会被清除,create-drop:标志每次都会先清空;validate:表示每次启动都会去校验,不一致则会报错;
      ddl-auto: update
    properties:
      hibernate:
      #数据库方言:主要解决MyISAM不支持外键,如果有外键的话就会创建失败的问题
        dialect: org.hibernate.dialect.MySQL5Dialect
  • 创建entity
    注意:@id是必须的
package com.ht.erp.entity;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 * jpa test entity
 * @author yugan
 */
@Entity
@Getter
@Setter
public class Test {

    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    Integer id;

    String mark;
}

然后启动项目;在控制台上面会看到如下日志:说明jpa已经通过我们定义的test帮我们创建好了表,

2021-07-01 10:11:29 |INFO  |restartedMain |Dialect.java:175 |org.hibernate.dialect.Dialect |HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Hibernate: create table hibernate_sequence (next_val bigint) engine=MyISAM
Hibernate: insert into hibernate_sequence values ( 1 )
Hibernate: create table test (id integer not null, mark varchar(255), primary key (id)) engine=MyISAM

在这里插入图片描述

  • 下面以已创建好的t_message表为例:CRUD
@Service
public interface IMessageService {
    /**
     * findById
     * @param id
     * @return
     */
    void findById(int id);

	
}

@Service
public class MessageServiceImpl implements IMessageService {

    @Autowired
    MessageMapper messageMapper;

    /**
     * findById
     *
     * @param id
     * @return
     */
    @Override
    public void  findById(int id) {

        Message message  = messageMapper.findById(Integer.valueOf(1)).get();
        System.out.println(JSONObject.toJSONString(message));


    }
}

MessageMapper 要继承JpaRepository才可以

@Repository
public interface MessageMapper extends JpaRepository<Message,Integer> {

}

test 类


public class MessageTest  extends ErpApplicationTests {

    @Resource
    IMessageService iMessageService;

    @Test
    public void findById(){
    iMessageService.findById(1);

    }

}

在这里插入图片描述

使用JPA有什么优缺点

优点:

  1. 方便,省去了繁琐的JDBC去操作数据库。直接通过ORM技术去操作数据库,使我们更关注业务逻辑的实现,而不必去写复杂的SQL语句;
  2. 简单集成;只需要通过简单的注解@Table、@entity、@Id等注解即可将java对象与数据库之间的关系映射好;使用JPA不需要去关注使用的是什么数据库;
  3. JAP可持久化djava对象;
  4. JPA规范标准。
  5. JAP性能比直接JDBC操作数据库的性能再访问大数据量时更高;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值