MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

世界上最昂贵的东西是“免费”。

为了降低项目成本,我们有一套完整的 MySQL 开源社区版集群。希望能在低成本的基础上,带来期望的收益。

然而,经过不停的填坑操作告诉我们一个道理。

“免费” === 无人维护,商业运用还是 Oracle 关系型数据库来的香。


01 背景

这里是凭爱发电的开源项目 oPos。

考虑到将来还要自己全栈做 dev-ops,为了不给自己挖太深的坑。本项目的数据库存储采用以下技术选型:

  1. Docker ✔︎

  2. MySQL ✔︎

  3. Oracle ✘

本文的主要作用是记录 MySQL 安装与 JPA 的建表操作过程。为以后的技术复盘、运维做准备。

PS.欢迎大家 star: https://github.com/FoamValue/oPos.git


02 Docker 安装

Docker 是个好工具。

它是一个开源的虚拟应用容器引擎。随着云计算、AI、大数据等技术浪潮下,可以自动化部署、运维成千上万台服务器的 Docker 容器与虚拟技术,成为一件新的技术“神器”。

个人使用非常简单,直接下载安装程序即可。


03 Docker 安装 MySQL

首先,我们使用 search 命令来感受下 Docker 的强大。

罗列了所有 MySQL 的版本,再也没有寻找安装包该在哪里下载的痛苦了。

商业项目建议使用相对稳定的老版本,例如 5.6、5.7。

但,既然是开源项目。那就勇猛直前的最新 latest 版本就好。顺便还能感受下新的版本特性。

下载完成之后,可以使用 images 命令查看本地的镜像版本。例如:mysql latest,zookeeper 3.4.14。

目前,还没有部署测试环境的概念。

所以,现在选用“不建立映射目录”的方式运行。也就是,存储数据会丢失。

使用 Navicat 配置 MySQL 的访问方式。

创建一个 utf8 编码格式的数据库 oPos。

到这里,一个名叫 oPos 的关系型数据库就创建好了。


04 JPA 配置

在国内使用 JPA 来操作数据库,这样的运用场景是非常少的。

  1. 历史原因,大量的老开发人员习惯于 iBatis 操作数据库的风格。

  2. MyBatis 的出现,继承了 iBatis 的基础上,又进行了大量的优化。

  3. 在商业运用中,大量的 SQL 查询需要手动干预进行优化。

虽然,有更优秀的操作数据库的解决方案。但是,JPA 真的就没有优点了吗?

答案当然是:我也不知道。

JPA 特别适合中小型项目,它能帮助后端开发工程师更好的理解数据设计,让后端开发工程师把更多的时间、精力放在代码设计与优化之上。

至于 SQL 查询的销量,就让 JPA 自身优化去吧。

首先,在项目中引入 JPA、mysql 依赖包。

<dependency>  <groupId>org.springframework.bootgroupId>  <artifactId>spring-boot-starter-data-jpaartifactId>dependency><dependency>  <groupId>mysqlgroupId>  <artifactId>mysql-connector-javaartifactId>dependency>

在 application-dev.yml 中增加数据库链接的配置。

spring:  profiles: dev  datasource:    jdbcUrl: jdbc:mysql://127.0.0.1:3306/oPos?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true    username: root    password: 123456    driverClassName: com.mysql.cj.jdbc.Driver    type: com.zaxxer.hikari.HikariDataSource    hikari:      poolName: hikari-local      autoCommit: true      connectionTestQuery: SELECT 1      connectionTimeout: 30000      idleTimeout: 30000      maxLifetime: 1800000      maximumPoolSize: 5      minimumIdle: 1  jpa:    hibernate:      ddl-auto: update    show-sql: true

增加一个 MySQL 工厂与 Spring 事务配置类。

** * Application config. *  * @author chenxinjie * @date 2020-08-01 */@Configuration@EnableJpaRepositories@EnableTransactionManagementpublic class ApplicationConfig {  /**   * data source.   *    * @return   */  @Bean  @ConfigurationProperties(prefix = "spring.datasource")  public DataSource dataSource() {    return DataSourceBuilder.create().build();  }  /**   * entity manager factory.   *    * @return   */  @Bean  public LocalContainerEntityManagerFactoryBean entityManagerFactory() {    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();    vendorAdapter.setGenerateDdl(true);    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();    factory.setJpaVendorAdapter(vendorAdapter);    factory.setPackagesToScan("cn.live.opos");    factory.setDataSource(dataSource());    return factory;  }  /**   * transaction manager.   *    * @param entityManagerFactory manager factory.   * @return   */  @Bean  public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {    JpaTransactionManager txManager = new JpaTransactionManager();    txManager.setEntityManagerFactory(entityManagerFactory);    return txManager;  }}

以上,JPA 操作数据库的配置就结束了。


05 JPA 创建表

上一节说到,JPA 可以帮助后段开发工程师更好的理解数据库设计,就体现这里。

以下是一张导购表的 JPA 实体 Java 类。

UscGuideEntity 使用了大量的 javax.persistence.* 注解进行修饰,这样的目的是在应用启动的过程中,程序会主动的像数据库中创建指定的表。

/** * usc_guide. *  * @author chenxinjie * @date 2020-08-01 */@Entity@Table(name = "usc_guide", uniqueConstraints = { @UniqueConstraint(columnNames = "no") })public class UscGuideEntity {  private static final long serialVersionUID = -5648617800765002770L;  @Id  @GeneratedValue(strategy = GenerationType.AUTO, generator = "uuid")  @GenericGenerator(name = "uuid", strategy = "uuid2")  @Column(name = "id", length = 32)  private String id;  @Column(name = "no", length = 20, nullable = false)  private String no;  @Column(name = "name", length = 40, nullable = false)  private String name;  @Column(name = "gender", columnDefinition = "int default 0", nullable = false)  private int gender;  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")  @Temporal(TemporalType.TIMESTAMP)  @Column(name = "ts", columnDefinition = "timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP()", nullable = false)  private Date ts;  public final String getId() {    return id;  }  public final void setId(String id) {    this.id = id;  }  public final String getNo() {    return no;  }  public final void setNo(String no) {    this.no = no;  }  public final String getName() {    return name;  }  public final void setName(String name) {    this.name = name;  }  public final int getGender() {    return gender;  }  public final void setGender(int gender) {    this.gender = gender;  }  public final Date getTs() {    return ts;  }  public final void setTs(Date ts) {    this.ts = ts;  }  public static final long getSerialversionuid() {    return serialVersionUID;  }}

使用 Java 类来创建数据库表,这样的方式。将数据库表对象化,让后端开发人员非常的舒服。

当然,JPA 并不仅仅如此。它还有更加贴合手动建表的配置方式,例如:

1. 指定表名、唯一约束:

@Table(name = "usc_guide", uniqueConstraints = { @UniqueConstraint(columnNames = "no") })

2. 程序自动生成主键:

@Id@GeneratedValue(strategy = GenerationType.AUTO, generator = "uuid")@GenericGenerator(name = "uuid", strategy = "uuid2")@Column(name = "id", length = 32)private String id;

3. 字段长度、是否为空,等自定义配置:

@Column(name = "gender", columnDefinition = "int default 0", nullable = false)

4. 时间戳配置:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@Temporal(TemporalType.TIMESTAMP)@Column(name = "ts", columnDefinition = "timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP()", nullable = false)private Date ts;

5. 懒加载的一对多、多对多、一对一等配置:

@OneToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE,      CascadeType.REMOVE }, fetch = FetchType.LAZY, mappedBy = "orderEntity")private Set orderItems; @OneToOne@JoinColumn(name = "sku", referencedColumnName = "sku", insertable = false, updatable = false)private PscSkuEntity skuEntity;

6. 不挑数据库、换个数据库配置,就能自动建表。

7. 等等


06 小结

今天先写到这里。

夜深了,让我们下周再见。?

这个周末,又一次成功“强迫”自己学习。

感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。

docker oracle navicat_拥抱开源从零开始 Docker、Mysql amp; JPA相关推荐

  1. mysql主从复制测试,【拥抱开源2】MYSQL主从复制以及切换测试

    主库:192.168.1.20 从库:192.168.1.21 grant replication client,replication slave on *.* to rep@'192.168.1. ...

  2. java jpa @joincolumn 字段不为空_拥抱开源从表设计到 JPA 实现

    long may the sunshine. 今天的我拿起键盘就是猛敲代码. 果然,十分钟后各种 JPA 报错开始了.跟新手党一样,看到一个错误就解决一个,没有好好思考为什么会出现这样的错误. 于是乎 ...

  3. jpa onetoone_拥抱开源从表设计到 JPA 实现

    long may the sunshine. 今天的我拿起键盘就是猛敲代码. 果然,十分钟后各种 JPA 报错开始了.跟新手党一样,看到一个错误就解决一个,没有好好思考为什么会出现这样的错误. 于是乎 ...

  4. Ranger开源流水线docker化实践案例

    1.背景 开发部门决定在Apache Ranger开源社区贡献代码,目标是个人国内排名Top1,世界排名Top2,并且在已经成为Ranger项目的Committer情况下,争取成为Ranger项目的P ...

  5. 本地虚拟机上的docker安装mysql_Linux虚拟机上安装docker,并使用docker安装mysql,tomcat...

    1.序言 现在在Linux虚拟机上安装程序,越来越多的人都使用docker完成,本次就记录下在虚拟机上安装docker的过程. 如果你的windows系统上还没有安装Linux虚拟机,请参考我的上一篇 ...

  6. VMware Harbor 开源的Docker Registry管理项目

    一.简介 Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP ...

  7. docker 离线安装 mysql_Oracle数据库之docker 离线环境安装oracle

    本文主要向大家介绍了Oracle数据库之docker 离线环境安装oracle,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 因测试需要,需在内网的测试环境搭建一套docker ...

  8. 「实战篇」开源项目docker化运维部署-后端java部署(七)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...

  9. docker yum php mysql_Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本)

    Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本) 2年前 阅读 6556 评论 0 喜欢 0 ### 一.先安装Dokcer: 1.安装一些必要的系统工具: `s ...

最新文章

  1. javascript中select的常用操作
  2. 主成分分析(Principal components analysis)
  3. nginx定制header返回信息模块ngx_headers_more
  4. Https 加密原理分析
  5. win10+tomcat+php+配置环境变量配置,Win10系统Tomcat环境变量配置方法
  6. jdbc驱动程序_JDBC操作数据库的步骤
  7. 安卓案例:Volley用法演示
  8. python sql查询返回记录_干货!Python与MySQL数据库的交互实战
  9. css的基本定位机制
  10. android 开发书签大全
  11. l360废墨收集垫更换视频_爱普生l353废墨收集垫在哪个位置
  12. build lavas 失败_vue lavas的项目在IE下显示空白
  13. Mac入门(四)写给Mac新人
  14. i7 8750h支持linux,i7-9750H和i7-8750H性能对比:差距仅5%,日常使用无区别
  15. C# 之 带你玩转命令行版《2048》 -- 附源码分享
  16. Scan Context回环检测解读和使用
  17. 春季早晚温差大,提醒您注意及时加减衣服——附“感冒食疗方”若干,供收藏。
  18. java热词_生成热词
  19. 图书管理系统的数据库设计
  20. 设计模式“6”大原则!

热门文章

  1. Django实战之添加markdown编写文章的支持
  2. import win32api 安装pip install pypiwin32
  3. openpyxl模块介绍
  4. jquery版本冲突问题
  5. Power Shell03 在PowerShell 3.0重新启动计算机指令
  6. seajs学习心得和新产品福利
  7. 用Debug函数实现API函数的跟踪
  8. C语言与数据库操作入门(Win版)
  9. 在eclipse中使用JDBC连接MySQL5.7.24
  10. String字符串类的获取功能