<!--
spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
java.version 指定jdk版本号:
<properties>
<java.version>1.8</java.version>
</properties>
添加spring-boot-starter-web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
1.1.1. 编码测试
新建一个Controller类
新建启动类(App – Main方法)
测试代码
运行:App
浏览器:http://localhost:8080/hello
2. Spring boot web
2.1. 跳转Jsp
步骤:
创建Maven web project
引入依赖
配置application.properties对jsp支持
编写测试Controller
编写JSP
编写启动App
2.1.1. 创建Maven Web Project
使用Eclipse新建一个Maven Web Project ,项目取名为:spring-boot-jsp
2.1.2. 导入Maven依赖
<!-- spring boot parent节点,引入这个之后,在下面和spring boot相关的就不需要引入版本了; -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<!-- 指定一下jdk的版本 ,这里我们使用jdk 1.8 ,默认是1.6 -->
<java.version>1.8</java.version>
<!-- 依赖配置-->
<!-- web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- servlet 依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat 的支持. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
2.1.3. 配置application.properties对jsp支持
添加src/main/resources/application.properties:
#tomcat server port
server.port=80
# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp
2.1.4. 编写测试Controller
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String helloJsp(Model model){
System.out.println("HelloController.helloJsp().hello=hello");
model.addAttribute("hello", "你好");
return "hello";
}
}
2.1.5. 编写JSP
在 src/main 下面创建 webapp/WEB-INF/jsp 目录用来存放我们的jsp页面:helloJsp.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
helloJsp
<hr>
${hello}
</body>
</html>
2.1.6. 编写启动App
2.1.7. 启动App并测试
2.2. 获取Json数据
要把Java对象转换为Json框架,使用的是JackSon,maven依赖的jar也有
@RequestMapping("/json")
@ResponseBody
public Person json(){
return new Person(1L,"倪先华");
}
3. Spring boot 持久化
3.1. Spring boot JdbcTemplate
引入spring-boot-starter-jdbc
那么只需要在需要使用的类中加入:
@Resource
private JdbcTemplate jdbcTemplate;
3.1.1. 引入Maven依赖-mysql,jdbc
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
3.1.2. 数据库信息配置
在application.properties文件中配置mysql连接配置文件
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
3.1.3. 代码示例
1) Dao
声明为:@Repository,引入JdbcTemplate
public Demo getById(long id){
String sql = "select *from Demo where id=?";
RowMapper<Demo> rowMapper = new BeanPropertyRowMapper<Demo>(Demo.class);
return jdbcTemplate.queryForObject(sql, rowMapper,id);
}
2)Service
声明为:@Service 引入dao
@Resource
private DemoDao demoDao;
public void getById(Long id){
demoDao.getById(id);
}
3)Controller
@Resource
private DemoService demoService;
@RequestMapping("/getById")
public Demo getById(long id){
return demoService.getById(id);
}
页面访问测试
3.2. Spring boot-spring data Jpa
3.2.1. 引入Maven依赖-mysql,springdatajpa
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
3.2.2. 配置jdbc spring data jpa
在application.properties文件中配置mysql连接配置文件
#tomcat server port
server.port=80
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### Java Persistence Api
########################################################
# 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
#[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy]
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
3.2.3. 代码示例
(1) 创建实体类User。
package cn.itsource.springboot.datajpa.domain;
import java.io.Serializable;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity @Table(name="t_user") //加上json转换时忽略的属性,否则出错 @JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"}) public class User implements Serializable{ @Id @GeneratedValue private Long id; @Column private String name; //Getter/setter } |
(2) 创建repository操作持久化接口(继承自JpaRepository)。
import org.springframework.data.jpa.repository.JpaRepository;
import cn.itsource.springboot.datajpa.domain.User;
public interface UserRepository extends JpaRepository<User, Long>{ public User getByName(String name); } |
(3) 创建service类。
package cn.itsource.springboot.datajpa.service;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
import cn.itsource.springboot.datajpa.dao.UserRepository; import cn.itsource.springboot.datajpa.domain.User;
@Service public class UserService { @Autowired private UserRepository userRepository; public User get(Long id){ return userRepository.getOne(id); } public User getByName(String name){ return userRepository.getByName(name); } public User save(User user){ return userRepository.save(user); }
public User update(User user) { return userRepository.save(user); } public void delete(Long id){ userRepository.delete(id); } }
|
(4) 创建restful controller。
package cn.itsource.springboot.datajpa.controller;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;
import cn.itsource.springboot.datajpa.domain.User; import cn.itsource.springboot.datajpa.service.UserService;
@RestController public class UserController {
@Autowired private UserService userService;
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET) @ResponseBody public User get(@PathVariable Long id) { User user = userService.get(id); System.out.println("user=" + user); return user; }
@RequestMapping(value = "/user/name/{name}", method = RequestMethod.GET) @ResponseBody public User get(@PathVariable String name) { User user = userService.getByName(name); System.out.println("user=" + user); return user; }
@RequestMapping(value = "/user/add", method = RequestMethod.GET) @ResponseBody public User add() { User user = new User(); user.setName("itsource"); user = userService.save(user); return user; }
@RequestMapping(value = "/user/update", method = RequestMethod.GET) @ResponseBody public User update() { User user = new User(); user.setId(2L); user.setName("源码时代"); user = userService.update(user); return user; }
@RequestMapping(value = "/user/delete", method = RequestMethod.GET) @ResponseBody public String delete() { userService.delete(2L); return "success"; } } |
(5) 启动类
package cn.itsource.springboot.datajpa;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } |
(6) 测试;
启动项目分别测试对应的Restful接口功能。
(7) 注意事项
JSON转换异常处理:
① 在Domain类中排除注入的特殊属性hibernateLazyInitializer和handler
@Entity
@Table(name="t_user")
//加上json转换时忽略的属性,否则出错
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"})
public class User implements Serializable{....}
② 增加Jackson配置类
package cn.itsource.springboot.datajpa.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.List; /** * 防止在使用jpa/hibernate,如果实体字段上加有FetchType.LAZY,并使用jackson序列化为json串时, * 会遇到SerializationFeature.FAIL_ON_EMPTY_BEANS异常 * @author nixianhua * */ @Configuration public class JacksonConfiguration extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonMessageConverter()); super.configureMessageConverters(converters); }
private MappingJackson2HttpMessageConverter jacksonMessageConverter() { MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Hibernate4Module()); messageConverter.setObjectMapper(mapper); return messageConverter; } } |