spring boot data

本文详细介绍了Java Persistence API (JPA)的概念及其与Hibernate的关系,探讨了对象关系映射(ORM)在Java领域的应用。通过具体示例,讲解了如何在Spring Boot项目中集成Spring Data JPA,实现数据库的CRUD操作,包括配置Mysql数据库连接、编写实体类、创建JpaRepository接口以及服务类和服务控制器,最后展示了完整的代码实例。
  1. 概念

JPA:

它用于在Java对象关系数据库之间保存数据 JPA充当面向对象的领域模型和关系数据库系统之间的桥梁。

由于JPA只是一个规范,它本身不执行任何操作 需要一个实现 因此,像HibernateTopLinkiBatis这样的ORM工具实现了JPA数据持久性规范。

Hibernate:

  Hibernate是一个开放源代码对象关系映射框架;

  它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

ORM: object relational mapping ,对象关系映射的意思,用于Java语言里不同类型的系统之间的数据转换

Spring data

  用于简化数据库访问,并支持云服务的开源框架。例如:可以在几乎不写实现的情况下,实现对数据的访问和操作。除crud,还包括分页排序等一些常用功能。

  Spring data JPA: 是该框架的一个模块。

 

 

  1. 使用 spring boot jpa

步骤:

在pom.xml添加mysql,spring-data-jpa依赖;

在application.properties文件中配置mysql连接配置文件;

在application.properties文件中配置JPA配置信息;

编写测试用例;

1、在pom.xml添加mysql,spring-data-jpa依赖:

Mysql数据库驱动依赖包:

<dependency>

                 <groupId>mysql</groupId>

                 <artifactId>mysql-connector-java</artifactId>

</dependency>

Spring-data-jpa依赖

<dependency>

                     <groupId>org.springframework.boot</groupId>

                     <artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

 

Idea 创建资源目录文件

https://blog.youkuaiyun.com/ycg33/article/details/82947718

2、在application.properties文件中配置mysql连接配置文件;

在application.properties文件中配置JPA配置信息

########################################################
###datasource --
配置 mysql 数据库连接信息
########################################################

spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

########################################################
### Java Persistence Api --  Spring
配置信息
########################################################
# Specify the DBMS

spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

 

 

 

  1. 编写测试用例

(1)   创建实体类Demo,如果已经存在,可以忽略。

(2)   创建jpa repository类操作持久化(CrudRepository)。

(3)   创建service类。

(4)   创建restful请求类。

(5)   测试;

创建多级目录技巧:分别在上级目录com.renshou下创建 deom.bean和demo.service包

 

  1. mysql数据库排序规则

https://blog.youkuaiyun.com/u011403848/article/details/81163311

utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。
utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会造成不良后果
utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

utf8_general_ci校对速度快,但准确度稍差。
utf8_unicode_ci准确度高,但校对速度稍慢。

用一句话概况上面这段话:utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了

 

Idea自动导入对应的包:
alt + enter 导入,使用enter来选择

 

  1. 具体程序

Cat.java

/**

 * 如何持久化呢?

 * 1、使用@Entity进行实体类的持久化操作,当JPA检测到我梦实体类有@Entity时,

 * 会在数据库中生产对应的表结构信息

 * 2、如何指定主键及主键的生产策略

 */

    @Entity

    public class Cat {

    /**

     *      使用@Id指定主键.

     * 使用代码@GeneratedValue(strategy=GenerationType.AUTO)

     * 指定主键的生成策略,mysql默认的是自增长。

     */

    @Id

    @GeneratedValue(strategy = GenerationType.AUTO)

    private int id;//主键

    private String catName;//姓名

    private int catAge;//年龄

 

//上面程序会自动创建对应的表

 

CatRepository.java

public interface CatRepository extends CrudRepository<Cat,Integer>{

}

 

CatService.java

@Service

    public class CatService {

    @Resource

    private CatRepository catRepository;

    

    /**save,update ,delete 方法需要绑定事务.

     * 使用@Transactional进行事务的绑定.

     * @param cat

     */

    

    //保存数据.

    @Transactional

    public void save(Cat cat){

        catRepository.save(cat);

    }

    

    //删除数据》

    @Transactional

    public void delete(int id){

        catRepository.delete(id);

    }

    

    //查询数据.

    public Iterable<Cat> getAll(){

        return catRepository.findAll();

    }

}

 

CatController.java

@RestController

@RequestMapping("/cat")

    public class CatController {

    

   //@resource相当于 @autowire 和 @quailfier 加起来的功能

   @Resource

   private CatService catService;

   

   @RequestMapping("/save")

   public String save(){

      Cat cat = new Cat();

      cat.setCatName("jack");

      cat.setCatAge(3);

      catService.save(cat);

      return "save ok.";

   }

上述 会 在表中自动插入数据

 

CrudRepository接口

CrudRepository 接口提供了最基本的对实体类的添删改查操作

  •  --T save(T entity);//保存单个实体   
  •   --Iterable<T> save(Iterable<? extends T> entities);//保存集合         
  •   --T findOne(ID id);//根据id查找实体          
  •   --boolean exists(ID id);//根据id判断实体是否存在          
  •   --Iterable<T> findAll();//查询所有实体,不用或慎用!          
  •   --long count();//查询实体数量          
  •   --void delete(ID id);//根据Id删除实体          
  •   --void delete(T entity);//删除一个实体   
  •   --void delete(Iterable<? extends T> entities);//删除一个实体的集合          
  •   --void deleteAll();//删除所有实体,不用或慎用!   

-------------------------------------------

orm映射元数据:对象与数据库表的映射
方式:xml+注解
API:操作实体对象来执行curd
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("bafc_building_risk_level")
public class BafcBuildingRiskLevel extends Model<BafcBuildingRiskLevel> {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 楼栋编码
     */
    @TableField("building_code")
    private String buildingCode;

    @TableField(exist = false)
    private Integer riskLevelNumber;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("expect_arrive_time")
    private Date expectArriveTime;


    @Override
    protected Serializable pkVal() {
        return this.id;
    }

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值