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。