spring boot学习1 之 spring boot集成freemark、mybatis搭建项目

1. application.properties常用配置

server.port=9090 # 服务端口号
server.tomcat.uri-encoding=UTF-8 #以Tomcat为web容器时的字符编码

spring.application.name=customer # 应用名称,一般就是项目名称,这个名称在SpringCloud中比较关键
spring.profiles.active=dev #指定当前的活动配置文件,主要用于多环境多配置文件的应用中
spring.http.encoding.charset=UTF-8 #http请求的字符编码
spring.http.multipart.max-file-size=10MB #设置文件上传时单个文件的大小限制
spring.http.multipart.max-request-size=100MB #设置文件上传时总文件大小限制

spring.thymeleaf.prefix=classpath:/templates/ #配置在使用Thymeleaf做页面模板时的前缀,即页面所在路径
spring.thymeleaf.suffix=.html #设置在使用Thymeleaf做页面模板时的后缀
spring.thymeleaf.cache=false #设置在使用Thymeleaf做页面模板时是否启用缓存

spring.mvc.static-path-pattern=/test #设置静态资源的请求路径
spring.resources.static-locations=classpath:/static/,classpath:/public/ #指定静态资源的路径

##以下是使用MySQL数据库的配置
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect #指定数据库方言
hibernate.show_sql=true #是否显示sql语句
hibernate.hbm2dll.auto=update #设置使用Hibernate的自动建表方式
entitymanager.packagesToScan=com.zslin #设置自动扫描的包前缀

spring.datasource.url=jdbc:mysql://localhost:3306/customer?\
useUnicode=true&characterEncoding=utf-8&useSSL=true&autoReconnect=true #数据库链接
spring.datasource.username=root #数据库用户名
spring.datasource.password=123 #数据库用户对应的密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #数据库驱动名称

2. spring boot集成freemark、mybatis搭建项目开始了

2.1 pom.xml配置


org.springframework.boot
spring-boot-starter-freemarker
1.5.8.RELEASE




mysql
mysql-connector-java


org.springframework.boot
spring-boot-starter-jdbc


com.alibaba
druid-spring-boot-starter
1.1.0



org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0




com.alibaba
fastjson
1.2.8


2.2 application.yml配置
server:
  port: 8080

spring:
    datasource:
        name: test
        url: jdbc:mysql://127.0.0.1:3306/cms?characterEncoding=utf8&useSSL=true
        username: root
        password: 199215
        # 使用druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
    freemarker:
        #是否缓存页面
        cache: false
        #freemarker文件路径
        template-loader-path: classpath:/templates

mybatis:
    #扫描sql.xml文件
    mapper-locations: classpath:mapping/*.xml
    #自动扫描实体类
    type-aliases-package: com.pf.org.cms.entity
    
     
/*
简单介绍: 
(1)“server:”为服务器相关配置,这里先配了一个端口号为8080其他默认。 
(2)“spring:”为Spring相关配置,下面包含了数据源和freemarker两小类,需要注意的是
    datasource的url这里的?characterEncoding=utf8&useSSL=true
    设置的是字符集和是否SLL加密连接,useSSL针对的是高版本mysql的配置
    (5.5.45+, 5.6.26+ and 5.7.6+)。 
(3) freemarker的热部署需要配置cache: false。 
(4)“mybatis:”为mybatis的相关配置,具体说明注释均有说明,其他配置暂时默认,
		后面有需要时修改。
*/
2.3 实体类、mapper、mapper.xml编写和正常的一样,但是serviceImpl可以不一样
@Service(value = "demoServie")
//也就是可以另起一个名字
public class DemoServiceImpl implements DemoService {
    @Autowired
    private DemoMapper demoMapper;

    @Override
    public List getDemos() {
        return demoMapper.getDemos();
    }
}

​ 但是控制层老样子,唯一的不同就是可以用刚才新起的serviceimpl名字

@Controller
@RequestMapping(value =  "/demo")
public class DemoController {
    @Autowired
    DemoService demoService;

    @RequestMapping(value = "/getAll")
    public String testDemo(Map map) {
        List demos = demoService.getDemos();
        map.put("data", demos);
        System.out.println(demos.toString());
        return ("/testDemo");
    }
}
 
2.4 页面
//在resources/templates/testDemo.ftl。
//其中testDemo和控制层中的返回值要一样


    


hello world! this is my first springboot demo! <#list data as item>
${item.id}${item.name}${item.remark}
2.5 主程序入口添加mybatis扫描配置
@SpringBootApplication
// mybatis 支持
@MapperScan("com.pf.org.cms.mapper")
public class CmsApplication {

    public static void main(String[] args) {
        SpringApplication.run(CmsApplication.class, args);
    }
}
 

3. 事务配置的两种方法

3.1 主程序配置
  1. SpringBoot自身对事务进行了集成,关于事务管理器,

  2. 不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager

  3. 如果你添加的是spring-boot-starter-jdbc依赖,框架会默认注入DataSourceTransactionManager实例。

  4. 如果你添加的是spring-boot-starter-data-jpa依赖,框架会默认注入JpaTransactionManager实例。

  5. 所以我们需要做的仅是在配置中开启事务

  6. (使用注解@EnableTransactionManagement)即可使用@Transactional进行事务管理,

3.2注意增加配置需要编写配置类(增加配置类后可以省去步骤2.5也就是不用再添加扫描类了),如下
@Configuration
@EnableTransactionManagement
// mybatis 支持
@MapperScan("com.pf.org.cms.mapper")
public class BaseDataSource {

    private static final Logger log = LoggerFactory.getLogger(BaseDataSource.class);
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        log.debug("Configuring Datasource");
        return new DruidDataSource();
    }

    @Bean
    public PlatformTransactionManager txManager() {
        return new DataSourceTransactionManager(dataSource());
    }

}
 

@Transactional属性

  1. 属性 类型 描述
  2. value String 可选的限定描述符,指定使用的事务管理器
  3. propagation enum: Propagation 可选的事务传播行为设置
  4. isolation enum: Isolation 可选的事务隔离级别设置
  5. readOnly boolean 读写或只读事务,默认读写
  6. timeout int (in seconds granularity) 事务超时时间设置
  7. rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组
  8. rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组
  9. noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组

noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组

3.3 事务例子
@Transactional
(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
3.4@Transactional用法
  1. @Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

  2. 虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

  3. 默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。

4. mapper找不到的情况

  1. 检查xml文件所在package名称是否和Mapper interface所在的包名
    一致
  2. xxxMapper的方法在xxxMapper.xml中对应的id是不是一致
  3. xxxMapper的方法返回值是List<>,而select元素没有正确配置ResultMap,或者只配置ResultType!
    4.看下配置文件里mapper的XML配置路径是否正确

项目地址传送门

github地址
https://github.com/HouChenggong/springboot1.git
https://github.com/HouChenggong/springboot1

你可能感兴趣的:(SpringBoot)