springboot 是否是你下一个项目应当考虑的框架选型

  1. 简介

在最近几年的企业级构架使用方面,大部分是基于Spring,JEE框架。它们的使用场景很丰富,成熟度高,被广大开发人员普遍接受。Spring在最近几年也有不少的改进和提高,从基于XML文件的配置到基于Annotation的配置开辟了对部署文件以及注入依赖的新方法。


Spring包括了很多内容,其中大家比较熟悉的当属Spring Data JPA,你可以用它连接到数据持久层而不需要写ADO。它不光支持关系行数据库的持久化而且还支持各种主流的NoSQL 数据仓库。除此之外,Spring还包括AMQP Message Queue,企业级框架集成,而这些只需要做一些配置工作即可,甚至不需要写一行代码。你可以把你的工程连接到第三方社交媒体的API上,也可以发布到Web应用或者是Android应用上。如此多样的继承环境和运行环境使得启动Spring工程变得令人困惑和无从下手。

由于Spring Boot的出现,让我们部署运行Spring程序变得非常简单,Spring Boot内置了多种主流、成熟的Web框架和持久层框架,你可以通过Spring Boot的命令轻松的把程序启动在例如Tomcat,Jetty等Web容器上,也可以使用内置的数据库进行开发阶段的数据持久层开发,还可以连接到JMS,AMQP等通讯平台,甚至可以部署到OSGi和CloudFoundry上面。这样为开发人员省下了大量的部署时间,从而我们可以更专注的工作在业务逻辑端。

       2.  例子

       2.1 数据库表结构

记下来我会列举一个简单的例子给大家参考,这个例子包括了Browser端,后端Spring Boot以及数据库,例子虽小五脏具全,希望能给大家一点启发。

首先先创建一个数据库表(PERSON),其中包括人员的基本信息,以mySql为例,表的结构如下:


mysql> desc person;

+--------+--------------+------+-----+---------+-------+

| Field  | Type         | Null | Key | Default | Extra |

+--------+--------------+------+-----+---------+-------+

| ID     | int(11)      | NO   |     | NULL    |       |

| NAME   | varchar(100) | NO   |     | NULL    |       |

| GENDER | char(1)      | YES  |     | NULL    |       |

+--------+--------------+------+-----+---------+-------+

3 rows in set (0.00 sec)


接下来 这个例子就是要在页面上操作这个数据表。

      2.2 创建Spring工程

Spring提供了Spring Initializer帮助大家创建Spring 工程,打开http://start.spring.io/ 连接,根据需要选择工程使用的Build工具,我这里使用gradle作为开发管理工具,至于maven由于已经流行很多年,相信网上可以找到大量关于Maven的使用方法,这里就不再用Maven了。接下来为项目添加依赖,加上Web和JPA两项以来。然后下载生成的工程文件,解压缩到本地目录中。打开build.gradle文件可以看到已经包括了项目所需要的依赖和插件

项目插件:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot' 
apply plugin: 'io.spring.dependency-management' 

项目依赖:可以看到下面的依赖关系,已经包括了Web和JPA两个依赖包。这两个正是我们上一步选择的工程依赖模块。

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test') 
}

Spring插件配置buildscript:

buildscript {
    ext {
        springBootVersion = '1.2.7.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
        classpath('io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE')
    }
}

   2.3 数据持久层Spring Data JPA

传统的JPA(Java Persistence API)需要开发人员写很多额外的代码,而且要依赖JPA Provider例如Hibernate。但是Spring Data JPA在上面提供了一层逻辑用于数据访问。这样程序员不需要编写过多的数据访问层的代码,所有的工作都有Spring提供。

我们根据上面创建的Person表,写与这个表对应的Java Entity如下所示:

@Entity
public class Person {

    private int id;

    private String name;

    private String gender;

    public Person(String name, String gender) {
        this.name = name;
        this.gender = gender;
    }

    public Person() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return super.toString();
    }
}

如果用传统的JPA方式,还需要写于数据库相关的操作代码,如果使用Spring Data JPA,就可以省略掉这个步骤,只需要定义操作数据库的接口文件,如下所示:

public interface PersonRepository extends CrudRepository<Person, Integer>{

    List<Person> findByName(String name);

    List<Person> findAll();
}

注意,这个接口只有定义不需要写具体的实现类,其中CrudRepository中定义了Person范型类型,说明了使用访问数据库映射的Entity Clas为Person。其中定义的两个方法直接从方法名称就可以猜到他的使用用途,Spring内部会提供具体实现。

之后,我们定义CommandLineRunner实现用来向数据库添加数据,如下:

@Controller
public class DBInitializer implements CommandLineRunner {

    @Autowired
    private PersonRepository pRepository;

    @Override
    public void run(String... args) throws Exception {
        System.out.println("run command line runner in "+this.getClass());
        pRepository.save(new Person("John", "M"));
        pRepository.save(new Person("Sara", "F"));
        pRepository.save(new Person("Raja", "M"));
        pRepository.save(new Person("Cris", "F"));
        pRepository.save(new Person("Henry", "M"));

        List<Person> personList = pRepository.findAll();
        for(Person p : personList){
            System.out.println(p.getName());
        }
    }
}

我们向数据表插入了5条记录,并通过findAll()方法打印查询结果。最后完成Main函数:

@RestController
@EnableAutoConfiguration
@ComponentScan
@SpringBootApplication
public class Main {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Main.class, args);
  }
}

完善工程的依赖:

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-actuator:1.2.7.RELEASE'
    compile "org.springframework.boot:spring-boot-starter-web:1.2.7.RELEASE"
    compile "org.springframework.boot:spring-boot-starter-data-jpa:1.2.7.RELEASE"
    compile 'org.springframework.data:spring-data-jpa'
    compile 'com.h2database:h2'
    compile 'org.springframework.boot:spring-boot-autoconfigure:1.2.7.RELEASE'
    compile 'org.springframework.boot:spring-boot-starter:1.2.7.RELEASE'
    compile 'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final'
    compile 'mysql:mysql-connector-java:5.1.6'
}

其中的<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);"> h2database是Spring内嵌的数据库,使用他来测试我们的程序。如果要连接外部数据库,需要在config/application.properties文件中加入数据库的连接:</span></span>
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);">
</span></span>
<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);"></span></span><pre name="code" class="java">spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

最后,运行gradle bootRun查看结果

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值