目录
1.eclipse 安装sts的插件
2.spring-boot启动方式
3.项目属性配置
4.thymeleaf视图
5.jpa数据库访问
6.jdbc数据库访问
7.全局异常捕捉
8.freemarker视图
9.添加jsp
10.添加mybatis
1.eclipse 安装sts的插件
在线安装参考路径:https://spring.io/tools/sts/all
打开eclipse菜单项
Help>Install New SoftWare添加http://dist.springsource.com/release/TOOLS/update/e4.7/
勾选所有带有IDE的复选框
Eclipse 安装sts插件
2.spring-boot启动方式
http://blog.csdn.net/my__Sun_/article/details/72866329
1.开发工具右键运行
2.mvn spring-boot:run
3. 先到项目根目录
mvn install
cd target
java -jar xxxx.jar
3.项目属性配置
常用配置
application.yml
server:
context-path: /demo2 #项目名称,默认是/
port: 8081 #端口
配置参数
方式一.
application.yml
girl:
a: A
b: B is ${girl.a}
controller
@Value("${girl.a}")
private String a;
方式二.
application.yml
boy:
id: 1
name: myname is ${boy.id}
Boy.java
@Component
@ConfigurationProperties(prefix="boy")//在yml中配置以boy开头的配置
public class Boy {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
controller
@Autowired
private Boy boy;
@RequestMapping("/hello")
public String hello() {
return "hello-2016-12-11.v.0 " +" "+boy.getId() +","+boy.getName();
}
4.thymeleaf视图
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
application.yml
########################################################
###THYMELEAF (ThymeleafAutoConfiguration)
########################################################
#spring.thymeleaf.prefix=classpath:/templates/
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.mode=HTML5
#spring.thymeleaf.encoding=UTF-8
# ;charset=<encoding> is added
#spring.thymeleaf.content-type=text/html
# set to false for hot refresh
spring.thymeleaf.cache=false #关闭thymeleaf缓存
controller
@Controller
@RequestMapping("/girl")
public class GirlController {
@RequestMapping(value="/say")
public String say() {
return "index";
}
}
index.html
5.jpa数据库访问
pom.xml
<!-- jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver #数据库连接池
url: jdbc:mysql://localhost:3306/eshop #数据库url
username: root #用户名
password: root #密码
jpa:
hibernate:
ddl-auto: create #如果不存在,就创建表
show-sql: true #是否显示sql语句
实体
@Entity//使用@Entity进行实体化的持久化操作,当JPA检测到我们的实体类当中有@Entity注解的时候,会在数据库中生成对应的表结构信息。
public class Girl {
@Id//使用@Id指定主键
@GeneratedValue//指定主键的生成策略,mysql默认的是自增长
private Integer id;
private String cupSize;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCupSize() {
return cupSize;
}
public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}
}
jpa数据库访问
public interface IPersonRepository extends JpaRepository<Girl,Integer>{
}
controller
CrudRepository接口
接口提供了最基本的对实体类的添删改查操作
--T save(T entity);//保存单个实体
--Iterable<T> save(Iterable<? extends T> entities);//保存集合
--T findOne(ID id);//根据id查找实体
--boolean exists(ID id);//根据id判断实体是否存在
--Iterable<T> findAll();//查询所有实体,不用或慎用!
--long count();//查询实体数量
--void delete(ID id);//根据Id删除实体
--void delete(T entity);//删除一个实体
--void delete(Iterable<? extends T> entities);//删除一个实体的集合
--void deleteAll();//删除所有实体,不用或慎用!
PagingAndSortingRepository
该接口提供了分页与排序功能
--Iterable<T> findAll(Sort sort); //排序
--Page<T> findAll(Pageable pageable); //分页查询(含排序功能)
其它接口
JpaRepository:查找所有实体,排序、查找所有实体,执行缓存与数据库同步
JpaSpecificationExecutor:不属于Repository体系,实现一组 JPA Criteria 查询相关的方法,封装 JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象。
自定义 Repository:可以自己定义一个MyRepository接口。
6.jdbc数据库访问
在pom.xml加入jdbcTemplate的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
如果在JPA已经加入的话,则可以不用引入以上的配置。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
@Resource
private JdbcTemplate jdbcTemplate;
声明为:@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);
}
7.全局异常捕捉
在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢?新建一个类GlobalDefaultExceptionHandler,
在class注解上@ControllerAdvice,
在方法上注解上@ExceptionHandler(value = Exception.class)
package com.ldgx.eshop.config;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 1.新建一个Class,这里取名为GlobalDefaultExceptionHandler
* 2.在Class上添加注解,@ControllerAdvice
* 3.在class中添加一个方法
* 4.在方法上注解为@ExceptionHandler,拦截相应的一场信息
* 5.如果返回的是View,方法的返回值是ModelAndView
* 6.如果返回的是String 或者json数据,那么需要在方法上添加@RequestBody注解
* @author Administrator
*
*/
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public String defaultExceptionHandler(HttpServletRequest req,Exception e) {
//如果返回的是String
return "对不起,服务器繁忙,请稍后再试";
}
}
8.freemarker视图
pom.xml
<!-- freemarker的依赖配置信息 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
application.yml
server:
context-path: /demo2 #项目名称,默认是/
port: 8081 #端口
spring:
freemarker:
suffix: .html #ftl文件名后缀
#view-names: org.springframework.web.servlet.view.freemarker.FreeMarkerView
#content-type: text/html; charset=utf-8 #编码
#expose-request-attributes: true #将请求和会话属性作为变量暴露给FreeMarker模板使用 ,要做到这一点,可以设置exposeRequestAttributes或者exposeSessionAttributes为true
#expose-session-attributes: true
#expose-spring-macro-helpers: true # 使用这些宏,必须设置FreeMarkerViewResolver的exposeMacroHelpers属性为true
#allow-session-override: true
#cache: true #缓存
#template-loader-path: classpath:admin # 模板地址,加上classpath,文件就放在src.main.resource.admin下面
template-loader-path: admin
controller中
mv.setViewName("hh");
file1:
文件路径:src/main/resources/templates/hh.ftl
说明: 如果application.yml什么都没有配置,是这个地址
file2
文件路径:src/main/resources/templates/hh.html
说明: applicaiton.yml中配置spring.freemarker.suffix: .html #ftl文件名后缀
file3
文件路径:src/main/resources/admin/hh.html
说明: applicaiton.yml中配置
spring.freemarker.suffix: .html #ftl文件名后缀
spring.freemarker.template-loader-path: classpath:admin
file4
文件路径:src/main/webapp/admin/hh.html
说明: applicaiton.yml中配置
spring.freemarker.suffix: .html #ftl文件名后缀spring.freemarker.template-loader-path: admin
9.添加jsp
<!-- 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>
pom.xml
<dependencies>
<!-- web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- servlet 依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。 -->
<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>
</dependencies>
application.yml
server:
context-path: /demo2 #项目名称,默认是/
port: 8081 #端口
spring:
mvc:
view:
prefix: /WEB-INF/jsp/ #页面默认前缀目录
suffix: .jsp # 响应页面默认后缀
controller
mv.setViewName("hh");
跳转到的文件路径:src/main/webapp/WEB-INF/jsp/hh.jsp
10.添加mybatis
pom.xml
(1)基本依赖,jdk版本号;
(2)mysql驱动,mybatis依赖包,mysql分页PageHelper:
<!-- web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql 数据库驱动. -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- MyBatis提供了拦截器接口,我们可以实现自己的拦截器,将其作为一个plugin装入到sqlSessionFactory中
Github上有位开发者写了一个分页插件,我觉得使用起来还可以,挺方便的。
Github项目地址: https://github.com/pagehelper/Mybatis-PageHelper
-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
启动类
加@MapperScan注解
package com.ldgx.eshop;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.ldgx.eshop.mapper")//Mapper扫描地址
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
application.yml
server:
context-path: /demo2 #项目名称,默认是/
port: 8081 #端口
spring:
datasource:
url: jdbc:mysql://localhost:3306/eshop #url
driver-class-name: com.mysql.jdbc.Driver #驱动
username: root #用户名
password: root #密码
tomcat:
max-active: 20 #一个线程持有一个连接的最长时间(默认5分钟,单位毫秒),管这个连接是否处于 active 状态,到达时间就会被清除掉。
max-idle: 8
min-idle: 8
initial-size: 10
实体类,表结构也是和实体类一样
package com.ldgx.eshop.entity;
public class Goods {
private Integer id;
private Integer admin_id;
private String name;
private String remark;
private String content;
//getter,setter方法
}
mapper
package com.ldgx.eshop.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.ldgx.eshop.entity.Goods;
public interface GoodsMapper {
/**
* 根据名称查询
* @param name
* @return
*/
@Select("select * from tbl_goods where name = #{name}")
public List<Goods> listName(String name);
}
Controller
package com.ldgx.eshop.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ldgx.eshop.entity.Goods;
import com.ldgx.eshop.mapper.GoodsMapper;
@RestController
@RequestMapping("/cc")
public class CController {
@Autowired
private GoodsMapper mapper;
@RequestMapping("/query")
public List<Goods> query() {
return mapper.listName("name2 zangren");
}
}