利用spring boot创建java app

背景

在使用spring框架开发的过程中,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置和复杂的bean依赖关系,特别是在使用mvc的时候各种配置文件错综复杂。随着spring3.0的发布,spring IO团队开始放弃使用XML配置文件,而使用"约定优先配租"的思想来代替。

spring boot 就是在这样的背景中抽象出来的开发框架。它和sping已经大量的常用第三方库集成在一起,几乎可以零配置使用,使开发流程更方便

Hello world

使用传统的spring mvc,需要配置web.xml, applicationContext.xml,然后打包为war 在tomcat中运行, 而如果使用 spring boot, 一切都变得简单起来了。

下面使用Maven来创建spring boot 的web app工程

pom.xml

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework

gs-spring-boot

0.1.0

org.springframework.boot

spring-boot-starter-parent

1.3.3.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

1.8

org.springframework.boot

spring-boot-maven-plugin

HelloController

package hello;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

@RequestMapping("/")

public String index() {

return "Greetings from Spring Boot!";

}

}

其中:

@RestController 表示使用spring mvc 来接收request请求

@RequestMapping 映射到主页

当请求返回的时候,是纯文本,那是因为@RestController是由@Controller 和 @ResponseBody组成

Application

@SpringBootApplication

public class Application {

public static void main(String[] args) {

ApplicationContext ctx = SpringApplication.run(Application.class, args);

System.out.println("Let's inspect the beans provided by Spring Boot:");

}

}

其中:

@SpringBootApplication 代表了其有四个注解组成: @Configuration, @EnableAutoConfiguration, @EnableWebMvc, @ComponentScan

在SpringApplication.run中会去自动启动tomcat

run 方法返回上下文, 在这个上下文中可以拿到所有的bean

没有一行配置代码、也没有web.xml。基于Spring Boot的应用在大多数情况下都不需要我们去显式地声明各类配置,而是将最常用的默认配置作为约定,在不声明的情况下也能适应大多数的开发场景。

总体而言spring boot 是对 java web app 开发的简化

单元测试

@RunWith(SpringJUnit4ClassRunner.class)

@SpringApplicationConfiguration(classes = MockServletContext.class)

@WebAppConfiguration

public class HelloControllerTest {

private MockMvc mvc;

@Before

public void before() throws Exception {

mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();

}

@After

public void after() throws Exception {

}

/**

*

* Method: index()

*

*/

@Test

public void testIndex() throws Exception {

//TODO: Test goes here...

mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))

.andExpect(status().isOk())

.andExpect(content().string(equalTo("Greetings from Spring Boot!")));

}

}

建立restfullweb服务器

接上, 使用srping boot建立web服务器就非常简单了, 首先建立一个pojo类

public class Greeting {

private final long id;

private final String content;

}

然后使用control来handle http请求

@RestController

public class GreetingController {

private static final String template = "Hello, %s!";

private final AtomicLong counter = new AtomicLong();

@RequestMapping("/greeting")

public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {

return new Greeting(counter.incrementAndGet(),

String.format(template, name));

}

}

其中:

@RequestParam 表明了参数要求,如果要必填则设置required=true

返回是一个对象,会被自动转换为json

当我们访问:

http://localhost:8080/greeting 时候返回 {"id":1,"content":"Hello, World!"}

数据库访问

另一个非常常用的问题。在传统开发中, 我们需要配置:

类路径上添加数据访问驱动

实例化DataSource对象, 指定url, username, password

注入JdbcTemplate对象,如果使用Mybatis,还要配置框架信息

下面一个例子讲述用用spring boot来代替。 数据访问层我们将使用Spring Data JPA和Hibernate(JPA的实现之一)。

开始之前先介绍两个概念

spring data

为了简化程序与数据库交互的代码,spring提供了一个现成的dao层框架,spring家族提供的spring-data适用于关系型数据库和nosql数据库 ;

例如 Spring Data JPA, Spring Data Hadoop, Spring Data MongoDB ,Spring Data Solr 等;

具体的可以参考官网:http://projects.spring.io/spring-data/;

他们的共同特点是给我们提供了框架代码,spring Data能自动创建实体dao的实现类和自定义查询,不再需要我们自己去实现了

jpa

JPA全称为Java持久性API(Java Persistence API),JPA是Java EE 5标准之一,是一个ORM规范,由厂商来实现该规范,目前有hibernate、OpenJPA、TopLink、EclipseJPA等实现

然后我们进入配置环节, 配置很简单:

一: pom.xml映入 data-jpa 和mysql-connetor

org.springframework.boot

spring-boot-starter-data-jpa

mysql

mysql-connector-java

二: 配置application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/testor

spring.datasource.username=root

spring.datasource.driverClassName = com.mysql.jdbc.Driver

spring.datasource.password = xxx

# Specify the DBMS

spring.jpa.database = MYSQL

# Show or not log for each sql query

spring.jpa.show-sql = true

# Hibernate ddl auto (create, create-drop, update)

spring.jpa.hibernate.ddl-auto = update

# Naming strategy

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

# stripped before adding them to the entity manager)

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

其中, hibernate的ddl-auto=update配置表名,数据库的表和列会自动创建

写下实体类:

@Entity

@Table(name="student")

public class Student {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private long id;

@NotNull

private String name;

private String age;

}

@Entity,说明被这个注解修饰的类应该与一张数据库表相对应,表的名称可以由类名推断,当然了,也可以明确配置,只要加上@Table(name = "books")即可。需要特别注意,每个Entity类都应该有一个protected访问级别的无参构造函数,用于给Hibernate提供初始化的入口。

@Id and @GeneratedValue:@Id注解修饰的属性应该作为表中的主键处理、@GeneratedValue修饰的属性应该由数据库自动生成,而不需要明确指定。

@ManyToOne, @ManyToMany表明具体的数据存放在其他表中,在这个例子里,书和作者是多对一的关系,书和出版社是多对一的关系,因此book表中的author和publisher相当于数据表中的外键;并且在Publisher中通过@OneToMany(mapped = "publisher")定义一个反向关联(1——>n),表明book类中的publisher属性与这里的books形成对应关系。

@Repository 用来表示访问数据库并操作数据的接口,同时它修饰的接口也可以被component scan机制探测到并注册为bean,这样就可以在其他模块中通过@Autowired织入。

dao:

@Repository

public interface CustomerRepository extends CrudRepository {

List findByLastName(String lastName);

}

详细的可以看 spring jpa的具体介绍。

最后使用:

@RestController

public class DbController {

@Autowired

private StudentDao dao;

@RequestMapping("/get-student-counts")

@ResponseBody

public String getAllStudents(){

List students = (List) dao.findAll();

return String.format("%d", students.size());

}

}

主要一点是: 我在CustomerRepository 实现中每天添加方法:findByLastName, @Autowired 就会一直报错。

spring boot java app_利用spring boot创建java app相关推荐

  1. Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式1

    0. 前言 之前帐号认证用过自己写的进行匹配,现在要学会使用标准了.准备了解和使用这个OAuth2.0协议. 1. 配置 1.1 配置pom.xml 有些可能会用不到,我把我项目中用到的所有包都贴出来 ...

  2. [Java][web]利用Spring随时随地获得Request和Session

    利用Spring随时随地获得Request和Session 一.准备工作: 在web.xml中加入 <listener> <listener-class> org.spring ...

  3. maven java archetype_使用Maven Archetype创建Java项目模板

    1.over view 简而言之,Archetype是一个Maven项目模板工具包.原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的.当我们试图提供一个提供生成Maven项目的一致方 ...

  4. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )

    文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...

  5. java nashorn maven_使用mvn创建java工程的极简教程

    最近开始集中精力搞java的开源项目,在这时记录一下使用mvn创建java工程的比较简单的流程,以备不时之需,适用于我等java小白~~~ 使用mvn创建java工程 安装mvn 创建java工程命令 ...

  6. java二维数组的创建,java二维数组创建方法

    java动态创建二维数组,从零学java笔录-第31篇 图解二位数组在内存中存储,java二维数组动态赋值,java二维数组创建方法 二维数组的定义 type arrayName[ ][ ]; typ ...

  7. java商城pom,使用maven创建Java购物商城系统的common工程

    common工程,主要为Java的购物商城系统提供一些工具类,比如cookie管理类,id生成类等. 具体的创建过程如下 第一步: 在idea中依次单击"File"→"N ...

  8. jdt 解析java语句,利用JDT 回分析java 源代码

    项目里需要扫代码的sql,主要是想找出所有用到的sql. 将相关的sql 提交给DBA 来分析,希望在最早的时间发现潜在的查询性能问题. 想想eclipse 里面用到的JDT 能分析java 源代码, ...

  9. 【JAVA】使用IntelliJ IDEA创建Java控制台工程

    1.File->New->Project 2.选择Java,下一步 3.模板有两个:Command Line App和Java Hello World,没有太大区别 4.命名: 5.结果: ...

最新文章

  1. 计算机 程序 原理,计算机储存程序和程序原理是谁提出来的
  2. IAP的原理和stm8的IAP
  3. .NET的一点历史故事:误入歧途,越陷越深
  4. spring mvc学习(44):springMVC运行原理
  5. 我竟然用git send-mail通过QQ邮箱提交了push request
  6. springcahce集成redis 设置过期时间
  7. C语言程序设计实践-C语言应用实践
  8. Linux面试题附答案
  9. mysql中single是什么意思_single是什么意思
  10. 如何降低数字信号和模拟信号间的相互干扰
  11. 1-十八烷基-3-三乙氧基丙基硅烷咪唑溴盐离子液体([ODTIm]Br)修饰Fe3O4磁性纳米颗粒
  12. 全国计算机竞赛保送清华,竞赛入清华_是不是如果获得全国各学科竞赛的一等奖就能保送清华_淘题吧...
  13. pdf怎么删除其中一页与添加新页面
  14. io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
  15. java基本微信小程序的快递代收派送系统 uniapp小程序
  16. 大公司还是大城市该怎么选择?
  17. 配置windows系统中 PHP的环境变量
  18. 2012年移动互联网小心倒春寒
  19. 11款Windows必装软件,每一款都非常好用
  20. 微信中被举报的网页怎么打开 怎么打开被拦截的网址

热门文章

  1. 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...
  2. git commit撤销_Git 实用操作:撤销 Commit 提交
  3. 正则表达式,删除空行,删除特定字符所在行
  4. 领域驱动设计(DDD)的实践经验分享之持久化透明
  5. 【原创】SharePoint中如何判断任务是否已经延期
  6. SQL2000无法建立管理单元
  7. 技巧实例:如何在.NET中访问MySQL数据库
  8. BLIP:用更干净更多样的数据进行多模态预训练,性能超越CLIP!代码已开源!...
  9. 复旦大学提出《Meta-FDMixup》解决跨域小样本学习中的域偏移问题
  10. 如何找出光纤微米级别的脏污?女朋友的一个举动给了我灵感