spring boot java app_利用spring boot创建java app
利用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相关推荐
- Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式1
0. 前言 之前帐号认证用过自己写的进行匹配,现在要学会使用标准了.准备了解和使用这个OAuth2.0协议. 1. 配置 1.1 配置pom.xml 有些可能会用不到,我把我项目中用到的所有包都贴出来 ...
- [Java][web]利用Spring随时随地获得Request和Session
利用Spring随时随地获得Request和Session 一.准备工作: 在web.xml中加入 <listener> <listener-class> org.spring ...
- maven java archetype_使用Maven Archetype创建Java项目模板
1.over view 简而言之,Archetype是一个Maven项目模板工具包.原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的.当我们试图提供一个提供生成Maven项目的一致方 ...
- 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )
文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...
- java nashorn maven_使用mvn创建java工程的极简教程
最近开始集中精力搞java的开源项目,在这时记录一下使用mvn创建java工程的比较简单的流程,以备不时之需,适用于我等java小白~~~ 使用mvn创建java工程 安装mvn 创建java工程命令 ...
- java二维数组的创建,java二维数组创建方法
java动态创建二维数组,从零学java笔录-第31篇 图解二位数组在内存中存储,java二维数组动态赋值,java二维数组创建方法 二维数组的定义 type arrayName[ ][ ]; typ ...
- java商城pom,使用maven创建Java购物商城系统的common工程
common工程,主要为Java的购物商城系统提供一些工具类,比如cookie管理类,id生成类等. 具体的创建过程如下 第一步: 在idea中依次单击"File"→"N ...
- jdt 解析java语句,利用JDT 回分析java 源代码
项目里需要扫代码的sql,主要是想找出所有用到的sql. 将相关的sql 提交给DBA 来分析,希望在最早的时间发现潜在的查询性能问题. 想想eclipse 里面用到的JDT 能分析java 源代码, ...
- 【JAVA】使用IntelliJ IDEA创建Java控制台工程
1.File->New->Project 2.选择Java,下一步 3.模板有两个:Command Line App和Java Hello World,没有太大区别 4.命名: 5.结果: ...
最新文章
- 计算机 程序 原理,计算机储存程序和程序原理是谁提出来的
- IAP的原理和stm8的IAP
- .NET的一点历史故事:误入歧途,越陷越深
- spring mvc学习(44):springMVC运行原理
- 我竟然用git send-mail通过QQ邮箱提交了push request
- springcahce集成redis 设置过期时间
- C语言程序设计实践-C语言应用实践
- Linux面试题附答案
- mysql中single是什么意思_single是什么意思
- 如何降低数字信号和模拟信号间的相互干扰
- 1-十八烷基-3-三乙氧基丙基硅烷咪唑溴盐离子液体([ODTIm]Br)修饰Fe3O4磁性纳米颗粒
- 全国计算机竞赛保送清华,竞赛入清华_是不是如果获得全国各学科竞赛的一等奖就能保送清华_淘题吧...
- pdf怎么删除其中一页与添加新页面
- io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
- java基本微信小程序的快递代收派送系统 uniapp小程序
- 大公司还是大城市该怎么选择?
- 配置windows系统中 PHP的环境变量
- 2012年移动互联网小心倒春寒
- 11款Windows必装软件,每一款都非常好用
- 微信中被举报的网页怎么打开 怎么打开被拦截的网址
热门文章
- 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...
- git commit撤销_Git 实用操作:撤销 Commit 提交
- 正则表达式,删除空行,删除特定字符所在行
- 领域驱动设计(DDD)的实践经验分享之持久化透明
- 【原创】SharePoint中如何判断任务是否已经延期
- SQL2000无法建立管理单元
- 技巧实例:如何在.NET中访问MySQL数据库
- BLIP:用更干净更多样的数据进行多模态预训练,性能超越CLIP!代码已开源!...
- 复旦大学提出《Meta-FDMixup》解决跨域小样本学习中的域偏移问题
- 如何找出光纤微米级别的脏污?女朋友的一个举动给了我灵感