spring boot
套用网上的简要说明:
Spring Boot 是由 Pivotal 团队开发的框架,其作用是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,简单理解就是springboot并不是什么新型的框架,而是整合了spring,springmvc等框架,默认了很多配置,从而减少了开发者的开发时间。
Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用。 Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置。
SpringBoot有点:
使用 Spring 项目引导页面可以在几秒构建一个项目支持关系数据库和非关系数据库支持运行期内嵌容器,如 Tomcat、Jetty强大的开发包,支持热启动自动管理依赖自带应用监控支持各种 IED,如 IntelliJ IDEA 、NetBea
SpringBoot能带来哪些便捷?
用SpringBoot 单元测试更简单:
我们只需要在项目中引入spring-boot-start-test依赖包,加上注解,就可以对数据库、Web 等各种情况进行测试,十分方便。
用SpringBoot 配置变得更简单:
springboot最显著的有点就是让本来繁琐的配置,变的十分简单,使得程序开发者有更多的时间去写真正的业务代码。
说到底 spring boot就是作为工具一样 内置了很多包 方便开发而不需要像以前那样配置tomcat druid web.xml等 因为在spring boot中遵循着约定大于配置 所以它提供了很多的默认配置。
开发可以使用eclipse 和 IDEA 就在昨天 我的eclipse被我玩坏了 在换jdk1.7-》jdk1.8的时候所有的。class文件都没了我只能换个eclipse版本或者用IDEA。。。
这里说一下开始第一个spring boot的应用吧
在 idea中:
选择project-》
这里选一下jdk如果有用jdk1.7的话是不行的,换jdk1.8吧 idea貌似有内置的jdk spring boot也最后用jdk1.8以上的版本
选择 spring initializer的原因是他会帮我们部署好项目的目录 不用操心其他的 还生成spring.properties文件,也可以使用yaml文件作为配置文件 当两者都存在是 .properties的优先级高于.yaml配置的优先级
正常情况下目录是这样子的
找到项目名的那个main方法 启动即可 是不是太简单了。。。 说实话我刚开始也不能接收 spring boot内置tomcat这种操作,但用着用着就会习惯的。
然后进行常规的开发 就在主方法的文件夹下新建一些常规的包分层,然后如果使用页面的模板引擎的话要把静态文件什么的放在
这个mapper 包可以忽略 自己建的 static存放css picture js等,templates故名思意 放需要渲染的页面的 ,这里有必要提一下 不建议用jsp,因为springboot推荐使用“thymeleaf” 也很好用 不能写java代码 前后耦合更小 性能也要好一点在pom.xml中添加依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
就类似于这样在我的目录中:
Controller包中有这个
package com.dabai.springtest.controller;
import com.dabai.springtest.Service.UserService;
import com.dabai.springtest.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import java.util.List;
@Controller
@RequestMapping("user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/test")
public String test(Model moded){
List<User> users=userService.findAll();
moded.addAttribute("users",users);
return "users";
}
}
service包中有这个 一个接口
package com.dabai.springtest.Service;
import com.dabai.springtest.User;
import java.util.List;
public interface UserService {
// User findById(Integer id);
List<User> findAll();
}
serviceimpl中就是实现类
package com.dabai.springtest.serviceimpl;
import com.dabai.springtest.Service.UserService;
import com.dabai.springtest.User;
import com.dabai.springtest.repository.UserRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Resource
private UserRepository userRepository;
@Override
public List<User> findAll() {
List<User> users = userRepository.findAll();
return users;
}
}
repository层中 也就是DAO层 有这个
package com.dabai.springtest.repository;
import com.dabai.springtest.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User,Integer> {
}
这个JpaRepository是个springboot提供的对持久层操作封装类,怎么说呢 有点懒人开发的感觉 我不是很喜欢
JapRepository中的代码是这样的
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.springframework.data.jpa.repository;
import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
要用的话 需要在pom.xml中添加依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
然后还有实体类
package com.dabai.springtest;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name="user")
public class User implements Serializable{
private static final long serialVersionUID = -577784609508630288L;
@Id
private Integer id;
private String username;
private Date birthday;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", address='" + address + '\'' +
'}';
}
}
最后需要对数据库操作的话 还需要添加依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在properties中配置
spring.datasource.url=jdbc:mysql:///test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=dabai
spring.datasource.password=dabai
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#thymeleaf
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
这里注意一下 可以把
spring.datasource.url=jdbc:mysql:///test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8中?后面的删掉 如果启动报错说什么 timezone 有错的话再加上我这些。。