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>

 

posted @ 2018-06-22 15:56  enocyon  阅读(159)  评论(0)    收藏  举报