spring boot 手动新增数据库表和数据库表字段

今天遇到一个问题,公司项目使用的spring boot 2.0,数据库是使用h2,这个项目是单机项目,每天电脑上面部署一个项目,每台电脑都有一个单独的数据库。

每次当新版本如果有新增表或者表字段时,都需要客户方把数据库删除,重新启动项目,项目会自动把数据库表创建出来,这么做,在测试阶段当然可以,但是在正式使用时,就不行了。

这个时候,就需要客户拿到新版本的项目时,启动项目,就可以把缺少的表和一些表的字段,自动新增到数据里面,这样客户的数据库数据就不会丢失了。

项目启动,新增数据库表:

配置文件:

spring.datasource.schema=classpath:create_table.sql  #初始化执行sql语句
create_table.sql
-- 2019年06月03日,新增的表:LAMP_CONFIG
-- 判断表是否存在,如果不存在就创建
CREATE TABLE IF NOT EXISTS `LAMP_CONFIG` (
  ID INT PRIMARY KEY,
  create_date 	timestamp(26,6),
  angle	integer(10)
);

项目启动,修改表的字段:

使用这个功能,需要引入spring boot关于jdbc的包:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
/**
 * 用于项目启动后,新增数据库中表的字段。create_table.sql 文件是用来新建数据表。
 * 创建顺序:create_table.sql执行  》  当前类的执行
 * 这个功能是因为客户需要系统无缝升级,就是当发布了一个新的版本后,如果新版本有新增了表,或者需要给表新增字段、删除字段等,就需要用到这个地方了。
 */
@Component
public class CreateColumnConfig {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    //当系统启动成功后,执行。
    @PostConstruct
    void init() {
        //2019年06月03日,表 LAMPS 新增 ERROR_CODE 字段
        //判断字段是否存在
        Integer i = jdbcTemplate.queryForObject("select count(*) from information_schema.columns where table_name = 'LAMPS' and column_name = 'ERROR_CODE';", Integer.class);
        if (i == 0){
            //新增字段
            jdbcTemplate.execute("alter table lamps ADD error_code integer(10);");
        }
        //2019年06月03日,表 LAMPS 新增 TEMPERATURE 字段
        i = jdbcTemplate.queryForObject("select count(*) from information_schema.columns where table_name = 'LAMPS' and column_name = 'TEMPERATURE';", Integer.class);
        if (i == 0){
            jdbcTemplate.execute("alter table lamps ADD temperature integer(10);");
        }

    }
}

如果大家有更好的实现方式,欢迎给我留言,谢谢。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个流行的 Java 框架,用于快速构建生产级的 Web 应用程序。它简化了与 JSON 数据库的交互,特别是当使用像 MongoDB、MySQL 或 PostgreSQL 这样的关系型数据库或 NoSQL 数据库时。 **1. 读取JSON数据:** 在 Spring Boot 中,你可以使用 `@RestController` 和 `@GetMapping` 注解来创建一个 REST API 接口,它可以从数据库查询 JSON 数据。例如,假设你有一个名为 "books" 的,你可以这样操作: ```java @RestController public class BookController { @Autowired private BookRepository bookRepository; // 假设这是JPA或MongoDB的仓库 @GetMapping("/api/books") public List<Book> getAllBooks() { return bookRepository.findAll(); // 查询所有书籍并返回JSON } } ``` 这里,`BookRepository` 是一个 Spring Data 提供的接口,它提供了方法来执行数据库查询。 **2. 写入JSON数据:** 要将 JSON 对象写入数据库,首先你需要一个 `Book` 实体类,然后使用 `@PostMapping` 和 `@RequestBody` 注解接收JSON数据: ```java @PostMapping("/api/books") public ResponseEntity<?> createBook(@RequestBody Book book) { bookRepository.save(book); // 保存到数据库 return ResponseEntity.ok().build(); // 返回成功响应 } ``` 这将把客户端发送的 JSON 数据转换为 `Book` 对象,并保存到数据库。 **相关问题--:** 1. Spring Boot如何处理JSON序列化和反序列化? 2. 如何在Spring Boot中配置JPA或MongoDB数据库连接? 3.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值