1.作用
简化spring,体现在它集成spring依赖减少依赖文件和配置xml
2.环境搭建
使用idea+mybatis+maven+Springboot
父pom.xml中引入依赖
<!--引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加。-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子pom.xml
<!--引入了Spring MVC和Tomcat的依赖--> <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> </dependency> <!--热部署,IDEA中修改完后Ctrl+F9刷新--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency> <!--tomcat支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!--连接池--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- mysql 数据库驱动. --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- spring-boot mybatis依赖: 请不要使用1.0.0版本,因为还不支持拦截器插件,使用最新版本即可--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--分页--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.0</version> </dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果没有该项配置,可能devtools不会起作用,即应用不会restart热部署 -->
<fork>true</fork>
<!-- spring-boot:run 中文乱码解决 -->
<!--增加jvm参数-->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>
</plugin>
</plugins>
</build>
在spring中需要配置spring.xml,在springboot中使用YAML(常用)或者properties代替
在resources中新建application.yml文件,配置视图解释器,数据库DataSource连接池,设置编码格式端口号,mybatis扫描路径
spring: mvc: view: prefix: /WEB-INF/views/ suffix: .jsp http: encoding: charset: UTF-8 enabled: true force: true messages: encoding: UTF-8 datasource: url: jdbc:mysql://localhost:3306/ssm username: root password: sc259 driver-class-name: com.mysql.jdbc.Driver server: tomcat: uri-encoding: utf-8 port: 8080
mybatis:
type-aliases-package: cn.cyf.myspringboot.domain,cn.cyf.myspringboot.query
若使用properties配置使用如下格式
#视图配置 spring.mvc.view.prefix=/WEB-INF/jsps/ spring.mvc.view.suffix=.jsp #tomcat的编码配置 server.tomcat.uri-encoding=UTF-8 spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true spring.messages.encoding=UTF-8
搭建结构domain,mapper,query,service,controller
新建启动类,放在与domain,service文件夹并列(配置扫描路径)
这样配置会导致war包有问题之后处理:
@SpringBootApplication//标识为springboot的一个应用
@MapperScan("cn.cyf.myspringboot.mapper") public class SpringbootJspApplication{ public static void main(String[] args) { SpringApplication.run(SpringbootJspApplication.class,args); } }
3.测试
测试类:
@RunWith(SpringRunner.class) @SpringBootTest(classes = SpringbootJspApplication.class) //这事一个Spring测试,要告诉它在哪儿加载Spring配置文件,其实告诉它应用类型就ok public class test { @Autowired private Usercontroller h; @Test public void test1()throws Exception{ User user = h.get(1); System.out.println(user); } }
结果:报错提示找不到Mapper中的get方法。
解决:经检查发现我resources中mapper.xml的路径与mapper.java的路径不一样,而在SpringbootJspApplication中我只配置了扫描mapper.java文件的路径
方案一:将resources中mapper.xml的路径改为和mapper.java的路径一直
方案二:在application.yml的mybatis下添加一行代码
mybatis: type-aliases-package: cn.cyf.myspringboot.domain,cn.cyf.myspringboot.query mapper-locations: classpath:mapper/*.xml
方案三:在SpringbootJspApplication中配置多个路径@MapperScan({"cn.cyf.myspringboot.mapper","mapper"})
分页测试:
UserService
public List<User> getpage(int i){ PageHelper.startPage(2,2); return userMapper.getpage(i); };
结果:查询了所有数据,分页无效
解决:查看之前的spring+mybatis项目发现引入过bean
新建一个java工具类,注入bean
@Configuration public class MyBatisConfiguration { @Bean public PageHelper pageHelper() { System.out.println("MyBatisConfiguration.pageHelper()"); PageHelper pageHelper = new PageHelper(); Properties p = new Properties(); p.setProperty("offsetAsPageNum", "true"); p.setProperty("rowBoundsWithCount", "true"); p.setProperty("reasonable", "true"); pageHelper.setProperties(p); return pageHelper; } }
web测试:
启动Tomcat,在springboot中不需要配置Tomcat,直接使用SpringbootJspApplication中的main方法就可以启动
在springboot类中中有个@RestController注解相当于@Controller+@ResponseBody
问题:使用@RestController注解后返回值为String的方法应该跳转一个string路径的页面,结果却在前台打印string
解决:返回值用Model或者ModelandView代替
4.事务
SpringBoot:注解式事务
所有配置springboot都已经实现了,只需打注解即可。
@Service @Transactional(propagation = Propagation.SUPPORTS,readOnly = true) public class UserService { @Autowired private UserMapper userMapper; @Transactional public void save(User u){ userMapper.save(u); // int i=1/0; }; }
5.jar运行和war部署
开发的时候在idea中直接main方法启动,实际使用时需要打包成jar和war
jar打包:
在pom路径下,运行cmd==>mvn clean package
打包到你这个项目的target目录
运行cmd==>java -jar xxx.jar
解决方案一:配置maven插件
<plugin> <!--springboot的maven插件--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.4.1.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
方案二:不配置的打包命令:mvn clean package spring-boot:repackage -e -DskipTests
成功后出现2个文件
war打包:
按照打jar包的方法陈功厚将war包放入Tomcat的webapps中启动Tomcat成功,却无法访问路径
解决方法:
修改main入口方法的代码
@SpringBootApplication @MapperScan("cn.cyf.myspringboot.mapper") public class SpringbootJspApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(SpringbootJspApplication.class); } public static void main(String[] args) { SpringApplication.run(SpringbootJspApplication.class,args); } }
除此以外还需要设置web.xml,否则el表达式无效:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Archetype Created Web Application</display-name> <jsp-config> <jsp-property-group> <url-pattern> </url-pattern> <!--不忽略el表示式--> <el-ignored>false</el-ignored> </jsp-property-group> </jsp-config> </web-app>
6.Spring Profiles多环境支持
作用:开发测试不同的环境能够使用的方法不同
在配置文件中指定 spring.profiles.active=dev
命令行:java -jar -Dspring.profiles.active=dev xxx.jar
7.自定义YAML
在application.yml中添加
#自定义
cyf:
name: 嘻嘻
在其他地方定义并赋值
@Value("${cyf.name}") private String name;