spring-boot 使用 jpa 进行数据库访问

因为已经编写了 web 项目,此项目直接在 web 项目上新增数据库访问。此处使用的访问 orm 层是 spring 官方提供的 spring-data-jpa

spring-data-jpa 是官方通过使用 java 规范中的 jpa 标准,使用 hibernate 框架作为 orm 层进行的数据库层面的请求访问。众所周知, hibernate 框架是针对数据库层面的面向对象框架,编写一次兼容所有数据库,不过前提是都使用他提供的 hql 或者接口进行编写。 spring 还对其新增了对领域驱动设计的友好支持。

一. 在项目中引入依赖

  1. 引入 spring-boot-starter-data-jpa 框架,便已经让项目支持了数据库连接
  2. 数据库驱动
  3. 如若需要测试环境,再引入内存数据库以及测试驱动
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

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

<!-- 测试支持,可以使用内存数据库 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

Continue reading “spring-boot 使用 jpa 进行数据库访问”

spring-boot 的 web 开发项目

spring-bootweb 开发项目

一. 导入 spring-boot 父类依赖

通常来说,使用 官方脚手架 生成的 spring-boot 的父类依赖都是 spring 官方提供的 parent
然而,在实际生产中,这种方法,很少使用。我们更多的时候依赖自己项目中的父类进行生成。所以我们需要在自己的 pom.xml 中导入 spring 官方提供的 parent

即使现在 2.0.0 版本已经出来了,新增了 reactor 功能,但是如果不使用这套功能的话,我依然推荐 1.5.10.RELEASE 版。

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.10.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Continue reading “spring-boot 的 web 开发项目”

[译]Java Memory Model(Java内存模型)JMM与硬件内存模型

翻译自:Java Memory Model

  • Java内存模型
  • 硬件内存结构
  • JMM以及硬件内存结构的对应关系
    • 共享对象的可见性
    • 线程竞争情况

Java内存模型(后面简称JMM)定义了Java虚拟机如何通过计算机内存(RAM)进行工作的。JVM是整个计算机的模型,所以JVM中存在着内存模型(即JMM) – AKA(不知道怎么翻译)

如果你想要设计正确的并发程序,那理解JMM就很重要了。JMM定义了不同的线程什么时候以及怎样才能看到其他线程写入的共享变量值,并且在必要的情况下,如何去同步(synchronize)的访问这些共享的变量。

原来的JMM是不足的,所以在java 1.5的时候JMM被重新设计,并且这个模型现在依然在Java8中运行着。

Continue reading “[译]Java Memory Model(Java内存模型)JMM与硬件内存模型”

[docker]4. docker-compose简单实用

我们知道,Docker可以把环境+应用打包成一个镜像,然后通过镜像注入参数去启动无数个容器。然而,我们之前都是一个一个去操作的,当我们需要操作多个镜像并且是多态机器上面部署的时候,这种方式会显得特别无力。所以docker-compose的诞生就是为了解决这个问题。

一. 安装

1.1MacOS

OSX系统相对简单,只要安装了docker软件,那么docker-compose就已经自带在其中。可以通过docker-compose —version查看。

Continue reading “[docker]4. docker-compose简单实用”

[docker]3.dockerfile的使用以及通过maven插件构建Docker镜像

本文的目的

据我们所知,docker除了官方提供的镜像以外(通常都是一些基础环境的镜像,或者像WordPress这样著名的程序),也有很多自己的自定义的镜像,主要用来实现我们自己需要的定制需求。

Dockerfile就像是maven构建程序的pom.xml一样,通过定义一系列镜像(maven中的项目)所需要的条件,就可以轻松构建一个镜像(项目)。那么这篇文章就是为了掌握Dockerfile常规的几个语法,以便能够让我们通过定义的一系列指令构建出我们自己的定制镜像。

本文使用到的Java示例代码地址:https://github.com/WeidanLi/p-docker-demo

Continue reading “[docker]3.dockerfile的使用以及通过maven插件构建Docker镜像”

[docker]2.docker命令的使用

本文的目的

通过与git平台进行类比,快速理解和使用docker相关的命令。

1. Docker命令介绍

在Docker的使用过程中,我们需要使用Docker提供的命令与Docker进行对话,以便告诉Docker我们要完成的操作。

这些操作,可以与git或者svn的使用进行类比,因为道理都是从一个仓库中拉取相关的内容,然后进行操作。

Continue reading “[docker]2.docker命令的使用”

[docker]1.初识Docker

本文的目的

编写Docker的教程,并不是系统的对Docker进行了解,而是通过一个Java工程师的口吻,来快速入门了解Docker的内容。

本文的目的很简单

  1. 快速了解Docker几个概念,能够通过与Java相关的类比,快速勾勒Docker的模型
  2. 在自己的系统上面安装docker成功即可,由于CentOS是一个比较好的平台了解Docker的内容,所以期待对Docker的学习能够在Linux系的平台上进行,这样能够更加快速的学习。

Continue reading “[docker]1.初识Docker”

一个Java程序猿眼中的汇编

[TOC]

一、介绍

在计算机中,CPU只能识别二进制,当需要CPU做事情的时候,都需要通过二进制去指挥CPU做什么事情。古人觉得二进制实在是难以理解,所以才发明了汇编语言以及后面的高级语言,所以汇编语言可以称作为比较接近机器语言的语言了。

当然后面的古人依然觉得汇编语言难以理解,所以发明了C、C++、Java来解决难以理解的问题。所以后面的语言越来越偏于人类自然语言,并且使用面向对象的思想来设计程序。当然这期间经历的事情还挺多:C编译成汇编语言,汇编语言再翻译成二进制语言,这个过程即称为assembling。

学习汇编语言既需要下面两个概念的理解:内存模型寄存器

Continue reading “一个Java程序猿眼中的汇编”

[运维]Jenkins配合gitlab、maven、docker实现自动化部署

前言

要说什么人适合这个教程,那就是懒的人。

自从Docker出现以后,越来越多的项目以集装箱的形式进行项目的部署,测试和生产都在统一环境里面去实现,可以减少很多不必要的麻烦,像docker运行的容器,不像是项目在运行,而是Linux中的服务,所以多多少少也跟微服务这个词语扯上点关系吧。

但是像项目开发完成都需要手动去上传部署可以说很浪费时间了,所以这个事情可以交给强大的Git和Jenkins来实现。

不过有一点需要注意的是,我觉得该教程适合那种有规定分支(比如master)来生产的,要是直接在master上面开发的话,就没有太大必要,因为每次提交都会触发构建,会造成机器的效率问题,以及生产容易出现bug等等。

Continue reading “[运维]Jenkins配合gitlab、maven、docker实现自动化部署”

[jdk8] jdk8函数式编程思考

零、导读

(一)文章中心

我用jdk8已经半年多了,基本操作已经入门,但是jdk8魅力并非集合流以及线程等等,它要传输的更加是编程方式的改变,要知道像javascript是可以传递函数的,而在以前的jdk版本中,虽然可以但是并非十分的方便。现在官方已经可以通过传递行为的方式传递给函数,让编程中可以对一些基本的动作更加一步的抽象,而不需要写更多的重复代码。

文章中会提到常用的几个函数式接口,这几个接口无疑带来了很多方便。像之前用jdk8的时候写的第一篇文章《[jdk8]Lambda、JDK8接口使用、自定义函数接口》的时候还懵懵懂懂这个过程,所以这篇算是响应第一篇的使用了。

Continue reading “[jdk8] jdk8函数式编程思考”