springboot集成springjpa+h2轻量级内嵌式数据库

什么是H2 database?

H2是一个短小精干的嵌 入式数据库引擎,主要的特性包括:

1、免费、开源、快速;

2、嵌入式的数据库服务器,支持集群;

3、提供JDBC、ODBC访问接口,提供基于浏览器的控制台管理程序;

4、Java编写,可使用GCJ和IKVM.NET编译;

5、短小精干的软件,1M左右。

引入maven依赖

		
        
            com.h2database
            h2
            ${h2.version}
            runtime
        
        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        

application.yml 如果开启了浏览器访问一定要记得表单要跟配置一样

server:
  port: 2020
spring:
  profiles:
    active: dev
  application:
    name: ai
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:~/ai
    username: ai
    password: 123456
  jpa:
    # create 每次加载hibernate删除表重新建立
    # create-drop 每次加载hibernate根据model生产表,sessionFactory关闭之后删除表
    # update 每次加载hibernate更新表结构,不影响数据库(常用)
    # validate 每次加载hibernate验证表结构,只和数据库内的表比较,不创建新表,但会插入新值
    properties.hibernate.hbm2ddl.auto: update
    show-sql: true
  #在浏览器中开启控制台 localhost:2020/h2-console
  h2.console.enabled: true

映射模型

  • 使用了lombok插件依赖自行添加
/**
 * @author xiaojian
 * @description 报警模型
 * @date 2019/3/28
 **/
@Data
@NoArgsConstructor
@Entity(name = "helmet_alarm")
@DynamicInsert
@DynamicUpdate
public class AlarmModel {
    /**
     * 自增id
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    /**
     * 摄像头表主键
     */
    @Column(name = "config_id",nullable=false)
    private Integer configId;
    /**
     * 摄像头名称
     */

    @Transient
    private String name;
    /**
     * base64编码图片
     */
    @Column(updatable = false,columnDefinition = "text")
    private String picture;
    /**
     * 创建时间
     */
    @Column(name = "create_time",updatable = false,columnDefinition="TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP")
    private String createTime;

    public AlarmModel(Integer configId,String picture,String createTime){
        this.configId = configId;
        this.picture = picture;
        this.createTime = createTime;
    }
}

4. 数据库操作层

  • Pageable 分页注意事项
    Page< model > findAll(Pageable pageable);
    查询结果为空的问题,大概有两个原因:
    1、页码应从0开始,见PageRequest对象源码构造函数的javadoc;
    2、继承PagingAndSortingRepository接口,该接口已提供分页的findAll;
    通常会选择继承JpaRepository接口,提供了基础CRUD、分页、排序等自动实现。
    自定义的分页查询你只需方法最后一个参数为Pageable,返回类型定义为Page即可。
public interface AlarmRepository extends JpaRepository<AlarmModel,Integer> {
}

你可能感兴趣的:(java)