Springboot(笔记)
Eclipse调优:
format - assis - font - text editor - workspace - jsp - file association
eclipse.int 增加 -Dfile.encoding=utf-8
一. Basic1/Basic2(拆分)
1) pom.xml
<!-- starter-parent --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent> <dependencies> <!-- starter-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2)IndexController.java
@Controller
public class IndexController {
}
@Controller
@EnableAutoConfiguration // 启动main()进行测试
public class IndexController {
public static void main(String[] args) {
SpringApplication.run(IndexController.class, args);
System.out.println("Welcom SpringBoot!");
}
}
@Controller
@EnableAutoConfiguration // 标注main()所在的类
public class IndexController {
public static void main(String[] args) {
SpringApplication.run(IndexController.class, args);
System.out.println("Welcom SpringBoot!");
}
@ResponseBody // 返回json格式, 支持restfull风格访问
@RequestMapping("/index") // 访问: localhost:8080/index
public String index() {
return "SUCCESS!";
}
}
重要:Basic2(拆分)
App.java
@EnableAutoConfiguration
@ComponentScan(basePackages = {"cn.mayi.springboot.basic2.controller"}) // 扫描组件
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
IndexController.java
@Controller
public class IndexController {
@ResponseBody
@RequestMapping("/index")
public String index() {
return "SUCCESS!";
}
}
json格式响应: IndexController.java
@RestController // 相当于 @Controller + @ResponseBody
public class IndexController {
@RequestMapping("/index")
public String index() {
return "SUCCESS!";
}
@RequestMapping("/list")
public List<String> list() {
List<String> list = new ArrayList<String>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
return list;
}
}
二. 全局异常处理
1)IndexController.java
@RestController
@RequestMapping("/index")
public class IndexController {
@RequestMapping("/error") // 访问测试: localhost:8080/index/error?id=55
public Integer mockError(HttpServletRequest request) {
String ID = request.getParameter("id");
Integer id = Integer.parseInt(ID);
return id;
}
}
2)编写全局异常处理类: GlobalExceptionHandler.java
@RestController
@ControllerAdvice // Controller通知
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class) // 处理运行式异常
public Map<String, Object> exceptionHandler() {
Map<String, Object> ex = new HashMap<String, Object>();
ex.put("error404", "404");
ex.put("error500", "500");
ex.put("errorMsg", "代码错误!");
return ex;
}
}
App.class
@EnableAutoConfiguration
@ComponentScan(basePackages = {"cn.mayi.springboot.basic2.controller", "cn.mayi.springboot.basic2.exception"}) // 扫描全局异常类所在的包
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
三. 修改默认端口号: application.properties
server.port=8080
四. 访问静态资源:
1) 新建目录: static/hj
2) localhost:8080/hj/hj01.jpg
五. 定时器
IndexController.java
@RestController
@RequestMapping("/index")
public class IndexController {
}
SchedulingConfig.java
@Configuration // 将类注入到SpringBoot容器中
@EnableScheduling // 标注定时组件
public class SchedulingConfig {
private int count = 0;
@Scheduled(cron = "0/1 * * * * ?") // 定时计划
public void scheduler() {
System.out.println("定时任务已触犯, 这是第 " + (++count) + " 次执行, SUCCESS!");
}
}
App.java
@EnableAutoConfiguration
@ComponentScan(basePackages = {"cn.mayi.springboot.basic2.controller", "cn.mayi.springboot.basic2.util"}) // 扫描定时任务组件
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
--------------------------------------------
AppBoot.java
@SpringBootApplication // 相当于 @EnableAutoConfiguration + @Configuration + @Component("当前类")
public class AppBoot {
public static void main(String[] args) {
SpringApplication.run(AppBoot.class, args);
}
}
六. 整合(页面)模板引擎freemarker
1) pom.xml
<!-- starter-freemarker(freeMarker模板引擎) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
2) application.properties
### Freemarker模板引擎配置 spring.freemarker.allow-request-override=false spring.freemarker.cache=true spring.freemarker.check-template-location=true spring.freemarker.charset=UTF-8 spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.expose-spring-macro-helpers=false spring.freemarker.suffix=.ftl spring.freemarker.template-loader-path=classpath:/web/freemarker
3)IndexController.java(注意: freemarker无法解析json格式数据)
@Controller // 注意: freemarker无法解析json格式数据
public class IndexController {
@RequestMapping("/index")
public String index(Map<String, Object> result) {
result.put("username", "AAA");
result.put("age", 18);
result.put("sex", 0); // 0代表女, 1代表男
List<String> list = new ArrayList<String>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
result.put("usernameList", list);
return "index";
}
}
index.ftl
<hr/> ${username}你好, 欢迎来到英雄联盟! <br/>
年龄: ${age} <br/>
性别:
<#if sex == 0>
女
<#elseif sex == 1>
男
<#else>
其他
</#if> <br/>
<hr/> 用户列表如下:
<#list usernameList as username> <br/>
${username}
</#list>
AppBoot.java
@SpringBootApplication // 相当于 @EnableAutoConfiguration + @Configuration + Component("当前类")
public class AppBoot {
public static void main(String[] args) {
SpringApplication.run(AppBoot.class, args);
}
}
七. 整合JdbcTemplate
1) pom.xml
<!-- starter-jdbc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
2) application.properties
### 数据库参数(JdbcTemplate) spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///springboot_jdbctemplate spring.datasource.username=root spring.datasource.password=root
3) 创建表:
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; /*Data for the table `user` */ insert into `user`(`id`,`name`,`email`) values (11,'aaa','aaa@sina.com'); insert into `user`(`id`,`name`,`email`) values (12,'bbb','bbb@sina.com');
4) User.java
public class User {
private Integer id;
private String name;
private String email;
// get / set 方法省略 ...
}
IUserService.java
public interface IUserService {
void addUser(User user);
}
UserServiceImpl.java
@Service
@Transactional
public class UserServiceImpl implements IUserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void addUser(User user) {
jdbcTemplate.update("INSERT INTO USER(id, name, email) VALUES(null, ?, ?)", user.getName(), user.getEmail());
// 事务演示
// int i = 1 / 0;
// System.out.println(i);
}
}
UserController.java
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
// localhost:8080/user/add?name=xxx&email=xxx@qq.com
@RequestMapping("/add")
public String addUser(String name, String email) {
User user = new User();
user.setName(name);
user.setEmail(email);
userService.addUser(user);
return "SUCCESS!";
}
}
八. 整合JPA(Java持久层API)
1) pom.xml
<!-- starter-data-jpa --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
2) application.properties
### 数据库连接参数(JPA) spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///springboot_jpa spring.datasource.username=root spring.datasource.password=root
3) 创建表:
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; /*Data for the table `user` */ insert into `user`(`id`,`name`,`email`) values (11,'aaa','aaa@sina.com'); insert into `user`(`id`,`name`,`email`) values (12,'bbb','bbb@sina.com');
4) User.java
@Entity(name = "user")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column
private String name;
@Column
private String email;
// get / set 方法省略 .... ....
@Override
public String toString() {
return "ID: " + id + ", Name: " + name + ", Email: " + email;
}
}
IUserDao.java
public interface IUserDao extends JpaRepository<User, Integer> {
// 实现了单表的增/删/改/查
}
IUserService.java
public interface IUserService {
User getOne(Integer id);
}
UserServiceImpl.java
@Service
@Transactional
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
public User getOne(Integer id) {
return userDao.getOne(id);
}
}
UserController.java
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
//localhost:8080/user/getOne?id=11
@RequestMapping("/getOne")
public String getOne(Integer id) {
User user = userService.getOne(id);
System.out.println(user);
return "SUCCESS!";
}
}
AppBoot.java
@SpringBootApplication
@EntityScan("cn.mayi.springboot.entity")
@EnableJpaRepositories(basePackages = "cn.mayi.springboot.dao")
public class AppBoot {
public static void main(String[] args) {
SpringApplication.run(AppBoot.class, args);
}
}
九. 整合Mybatis
1) pom.xml
<!-- mybatis-spring-boot --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency>
2) application.properties
### 数据库参数(Mybatis) spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///springboot_mybatis spring.datasource.username=root spring.datasource.password=root
3) 数据表:
DROP TABLE IF EXISTS `pay_order`; CREATE TABLE `pay_order` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '自动增长', `orderId` VARCHAR(100) DEFAULT NULL COMMENT '订单ID', `amountoMoney` DECIMAL(10,2) DEFAULT NULL COMMENT '金额', `source` VARCHAR(200) DEFAULT NULL COMMENT '来源 1.mustpay支付', `userId` VARCHAR(50) DEFAULT NULL COMMENT '用户userId', `transactionMessage` VARCHAR(5000) DEFAULT NULL COMMENT '交易报文', `state` VARCHAR(2) DEFAULT NULL COMMENT '0待支付 1支付成功 2支付失败', `cerateDate` VARCHAR(100) DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8 COMMENT='订单支付信息表'; /*Data for the table `pay_order` */ INSERT INTO `pay_order`(`id`,`orderId`,`amountoMoney`,`source`,`userId`,`transactionMessage`,`state`,`cerateDate`) VALUES (NULL,'Order001','100.00','1','User001',NULL,'0',NULL); INSERT INTO `pay_order`(`id`,`orderId`,`amountoMoney`,`source`,`userId`,`transactionMessage`,`state`,`cerateDate`) VALUES (NULL,'Order002','200.00','1','User001',NULL,'1',NULL); INSERT INTO `pay_order`(`id`,`orderId`,`amountoMoney`,`source`,`userId`,`transactionMessage`,`state`,`cerateDate`) VALUES (NULL,'Order003','300.00','1','User001',NULL,'2',NULL); SELECT * FROM pay_order;
4) PayOrder.java
public class PayOrder {
// ID
private long id;
// 订单ID
private String orderId;
// 充值金額
private BigDecimal amountoMoney;
// 交易来源
private String source;
// 用戶UserId
private String userId;
// 交易状态
private String state;
// 交易报文
private String transactionMessage;
// 创建时间
private Date cerateDate;
// get / set 方法省略 ... ...
@Override
public String toString() {
return "OrderId: " + orderId + ", AmountoMoney: " + amountoMoney + ", Source: " + source + ", UserId: " + userId;
}
}
IPayOrderDao.java
public interface IPayOrderDao {
/**
* 查询所有订单列表
*/
@Select("SELECT * FROM PAY_ORDER")
public List<PayOrder> findAll();
}
IPayOrderService.java
public interface IPayOrderService {
/**
* 查询支付订单列表
*/
public List<PayOrder> selectList();
}
PayOrderServiceImpl.java
@Service
@Transactional
public class PayOrderServiceImpl implements IPayOrderService {
@Autowired
private IPayOrderDao payOrderDao;
public List<PayOrder> selectList() {
return payOrderDao.findAll();
}
}
PayOrderController.java
@RestController
@RequestMapping("/payorder")
public class PayOrderController {
@Autowired
private IPayOrderService payOrderService;
@RequestMapping("/list")
public List<PayOrder> list() {
List<PayOrder> list = payOrderService.selectList();
for (PayOrder payOrder : list)
System.out.println(payOrder);
return list;
}
}
十. 整合jsp
1) 新建一个maven(web)项目
2) pom.xml
<!-- starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<!-- starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- starter-tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<!-- tomcat-embed -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
3) application.properties
### SpringBoot整合JSP页面(JSP不能解析控制器发过来的json格式数据)
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
在 main/webapp/ 目录下新建 WEB-INF/jsp (级联)目录
4) AppBoot.java
@SpringBootApplication
public class AppBoot {
public static void main(String[] args) {
SpringApplication.run(AppBoot.class, args);
}
}
IndexController.java
@Controller
public class IndexController {
@RequestMapping("/index")
public String index() {
return "index";
}
}
5) 在 main/webapp/WEB-INF/jsp/ 目录下, 新建 index.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>Index</title>
</head>
<body>
<h1>JSP, HelloWorld!</h1>
</body>
</html>

浙公网安备 33010602011771号