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 开发项目”

[jdk8] jdk8函数式编程思考

零、导读

(一)文章中心

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

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

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

[多线程]Java多线程05_Lock类使用

一. Lock介绍

jdk5中新增了Lock对象,可以用来更加精确的控制线程之间的安全以及线程之间的通讯。

二. ReentrantLock类的使用

通过生产者和消费者来示范ReentrantLock类的使用,这个例子中包含了Lock加锁解锁的使用以及线程之间的通讯

通过创建5个生产者和5个消费者,对同一个资源进行操作,一个生产者一次生产5个,一个消费者一次生产一个。

Continue reading “[多线程]Java多线程05_Lock类使用”

[多线程]Java多线程04_多个线程协作以及线程私有数据

一、线程间的通讯

前面说完了线程的工作、线程的安全等等,那么多个线程的协同工作,线程之间的通讯就是接下来的话题了。

线程之间的等待通知,简而言之就是一个线程做完了自己该做的一件事情,然后通知另外一个线程继续需要的业务操作,实现一个任务由多个线程异步进行从而提升软件性能。

$seq
线程A->线程A: 执行任务
Note right of 线程B: 等待线程A执行完成通知
线程A->线程B: 执行完成,通知线程B启动
Note right of 线程B: 继续执行任务
$

Continue reading “[多线程]Java多线程04_多个线程协作以及线程私有数据”

[多线程]Java多线程03_线程同步及可见性

一、线程安全问题

线程安全问题是个经典的问题,主要涉及的方面就是对变量的修改以及读取。因为修改读取并不是一步完成,而计算机在切换线程的时候也没有清楚哪个时候可以切换,这时候就需要程序来给计算机指定道路说,你什么时候可以切换什么时候不行。特别是在对值修改的过程中,是不能够切换到读取线程的,要不然会出现脏读(即数据的错误)的问题。而Java对线程安全的控制主要是synchronized以及Lock锁。

关于变量安全控制的问题,我们现在大部分说到的变量安全问题均是类全局变量的安全问题,方法内部的局部变量,因为jvm在执行一个方法的时候都会进行线程栈之间的隔离,所以一个线程中对一个变量的修改创建并不会到另外一个线程对变量的修改创建。

Continue reading “[多线程]Java多线程03_线程同步及可见性”

[多线程]Java多线程01_初入门

1. 线程与进程的区别

进程 > 线程

进程:相当于启动一个软件,就启动了一个进程。当启动了QQ以及微信,那么这两个不同软件运行的独立任务就是两个不同的进程

线程:一个软件了里面,为了进行多个任务,就需要多个线程来协同工作,以可以尽可能多的使用计算机的资源。

注:由于CPU在线程、进程之间切换非常快,所以给人一种这些进程、线程都是在一起工作的错觉。

Continue reading “[多线程]Java多线程01_初入门”

[jdk8] jdk8 多线程处理的使用

github地址:jdk8-future

一、Future接口

Future是jdk5的时候被引入的,目的是为了把耗时的操作解放出来,可以同时使用多核的优势进行并行处理。比如,我有一个页面,需要从多方获取数据比如说从Twitter和Facebook获取数据,然后一起渲染的页面上。这时候如果等待Twitter的数据获取完在获取FB的数据,就显得比较慢了,这时候可以通过Future来让这两个任务并行处理。

Continue reading “[jdk8] jdk8 多线程处理的使用”

[jdk8]jdk8并行处理数据

一、简述

JDK8为了让处理大数据量集合更快速,使用了并行的形式来进行处理。在上面的例子中我们也看到了,如果我们需要一个并行流的话,只要对一个集合打开parallelStream即可。在JDK7以前,想要对一个集合进行并行处理似乎是一件困难的事情。所以这一篇文章我们可以看看JDK8是怎么实现并行处理的。

Continue reading “[jdk8]jdk8并行处理数据”