SpringBoot集成thymleaf
springboot 不推荐使用JSP , SpringBoot官方推荐使用的模版是Thymeleaf , FreeMarker , Groovy
当我们使用上述模板引擎中的任何一个,SpringBoot默认的模板配置路径为:src/main/resources/templates。
使用模版的时候我们需要在配置文件中添加几条配置,SpringBoot自动会读取默认的配置文件路径是在resources下的application.properties文件,这里我们在配置 配置参数如下
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
引入相关的jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在目录templates下新建一个index.html文件 ( 注意 后面的反斜线)
新创建一个Controller 类的注解上使用Controller 而不是RestController,RestController返回的是JSON,Controller注解返回的是页面; controller类内容如下
@Controller
public class PageController {
@RequestMapping("/index")
public String index() {
return "index";
}
}
访问http://localhost:8080/index 即可跳转到index.html页面
SpringBoot集成Mybatis
引入mybatis相关的包
<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.21</version>
</dependency>
在application.properties中填写我们的连接数据库相关的配置信息
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mybatis.mapper-locations=classpath:mapper/*.xml
创建一个实体类
package top.fuly.demo.entity;
public class User {
private int id;
private String username;
private String sex;
XXXget(){...}
XXXset(){...}
}
创建一个mapper
package top.fuly.demo.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import top.fuly.demo.entity.User;
@Mapper
public interface UserMapper {
@Select("select * from user where id = #{id}")
User selectUserById(@Param("id") Integer id);
@Insert("INSERT INTO user (`id`, `username`, `sex`) VALUES (NULL, #{name}, #{sex});")
int insert(@Param("name") String name, @Param("sex") String sex);
}
创建对应的数据库
调用
@RestController
public class FirstController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/user/get")
public String getUser(Integer id){
return userMapper.selectUserById(id).toString();
}
}
测试 http://localhost:8080/user/get?id=1
springboot事务
事务特性 (经常忘 手打一遍)
A 原子性 : 多条语句要么都执行,要么都不执行,不可分割
C 一致性: 事务提交后所有的所有的客户端取到的数据都一样
I 隔离性 :并发事务所作出的修改 必须与其他事务所做出的修改隔离
D 持久性 : 事务完成后,对数据的修改是永久性的
springboot中的事务比较简单
service中的方法 使用 @Transactional 注解
如:
@Transactional
public void transcationtest(Integer id) {
userMapper.update("DeleteTHIS", id);
userMapper.delete(id);
}
//这两条语句要么都执行,要么都不执行,如果中间出现错误,那么都不执行
集成Mybatis-Plus(MP)
MP是什么:是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
MP特性:无侵入,依赖少,损耗小,防SQL注入,通用CRUD,多种主键策略,代码生成,内置分页插件。。。。
导包
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.4</version>
</dependency>
添加一个配置文件(这个是定死的)
package top.fuly.demo.config;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.mybatis.spring.boot.autoconfigure.MybatisProperties;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import com.baomidou.mybatisplus.MybatisConfiguration;
import com.baomidou.mybatisplus.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
@Configuration
public class MybatisPlusConfig {
@Autowired
private DataSource dataSource;
@Autowired
private MybatisProperties properties;
@Autowired
private ResourceLoader resourceLoader = new DefaultResourceLoader();
@Autowired(required = false)
private Interceptor[] interceptors;
@Autowired(required = false)
private DatabaseIdProvider databaseIdProvider;
/**
* mybatis-plus分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor page = new PaginationInterceptor();
page.setDialectType("mysql");
return page;
}
/**
* 这里全部使用mybatis-autoconfigure 已经自动加载的资源。不手动指定
* 配置文件和mybatis-boot的配置文件同步
* @return
*/
@Bean
public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() {
MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
mybatisPlus.setDataSource(dataSource);
mybatisPlus.setVfs(SpringBootVFS.class);
if (StringUtils.hasText(this.properties.getConfigLocation())) {
mybatisPlus.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
}
mybatisPlus.setConfiguration(properties.getConfiguration());
if (!ObjectUtils.isEmpty(this.interceptors)) {
mybatisPlus.setPlugins(this.interceptors);
}
MybatisConfiguration mc = new MybatisConfiguration();
mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
mybatisPlus.setConfiguration(mc);
if (this.databaseIdProvider != null) {
mybatisPlus.setDatabaseIdProvider(this.databaseIdProvider);
}
if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) {
mybatisPlus.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
}
if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {
mybatisPlus.setTypeHandlersPackage(this.properties.getTypeHandlersPackage());
}
if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
mybatisPlus.setMapperLocations(this.properties.resolveMapperLocations());
}
return mybatisPlus;
}
}
改造mapper (就继承一个BaseMapper 传参)
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
使用
@Autowired
private UserMapper userMapper;
@RequestMapping("/user/get")
public String getUser(Integer id){
return userMapper.selectById(1).toString();
}
@RequestMapping("/user/add")
public String add(){
User user = new User();
user.setId(1);
user.setSex("不男不女");
user.setUsername("张三李四");
Integer integer = userMapper.updateById(user);
return "执行成功 "+integer;
}
卧槽 就这么简单
其余方法慢慢学吧!