SPRINGBOOT配置事物注解和@MAPPER注意

MAPPER接口要使用@Mapper注解,不能用@Compent @Repository,否则没有效果

一、开启事物

在启动类上加

@EnableTransactionManagement //如果mybatis中service实现类中加入事务注解,需要此处添加该注解

在service类上加

@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)

最好加在方法上

加上@Transactional 注解,如果你加在类上,那该类所有的方法都会被事务管理,如果你加在方法上,那仅仅该方法符合具体的事务。当然我们一般都是加在方法上。因为只有增、删、改才会需要事务。 

二、注入mapper是注意在启动类上加注解;必须加这个,不加报错,如果不加,也可以在每个mapper上添加@Mapper注释

@MapperScan("cloud.kafka.mapper") //扫描的是mapper.xml中namespace指向值的包位置

(1)方式一:使用@Mapper注解

为了让DemoMapper能够让别的类进行引用,我们可以在DemMapper类上添加@Mapper注解:

Java代码  

@Mapper  

public interface DemoMapper {  

    @Insert("insert into Demo(name) values(#{name})")  

    @Options(keyProperty="id",keyColumn="id",useGeneratedKeys=true)  

    public void save(Demo demo);  

}  

直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦。

(2)方式二:使用@MapperScan注解

 通过使用@MapperScan可以指定要扫描的Mapper类的包的路径,比如:

Java代码  

@SpringBootApplication  

@MapperScan("com.kfit.*.mapper") 

public class App {   

  public static void main(String[] args) 

      {     

       SpringApplication.run(App.class, args);   

       }

  }  

或者:

Java代码  

@SpringBootApplication  

@MapperScan("com.kfit.mapper")  

public class App {   

  public static void main(String[] args) 

  {         

    SpringApplication.run(App.class, args);   

    } 

 }  

 可以根据包的结构指定不同的表达式。

使用@MapperScan注解多个包

可以使用如下的方式指定多个包:

Java代码  

@SpringBootApplication  

@MapperScan({"com.kfit.demo","com.kfit.user"})  

public class App {  

  public static void main(String[] args) {  

       SpringApplication.run(App.class, args);  

    }  

}  

 如果mapper类没有在Spring Boot主程序可以扫描的包或者子包下面,可以使用如下方式进行配置:

Java代码  

@SpringBootApplication  

@MapperScan({"com.kfit.*.mapper","org.kfit.*.mapper"})  

public class App {    

  public static void main(String[] args) 

  {     

      SpringApplication.run(App.class, args);   

   } 

 }  

三、使用mybatis要识别pojo的方式

1、mapper.xml中的resultType中经常会用到一些自定义POJO,你可以用完全限定名来指定这些POJO的引用,例如

    <select id="getUsers" resultType="com.majing.learning.mybatis.entity.User">,

2、通过在application.properties中指定POJO扫描包来让mybatis自动扫描到自定义POJO,如下:

    mybatis.type-aliases-package=com.majing.learning.mybatis.entity
    但是,请千万注意,不要再mybatis.type-aliases-package=后面接classpath这个单词,否则,mybatis会找不到POJO。

原文地址:https://www.cnblogs.com/h-c-g/p/10252121.html