你我共知,jpa规范是基于hibernate的,对于单表操作的时候是非常的方便,但是对于多表操作的时候未免有点力不从心,于是在闲暇之余,自己做了一个小小的测试,集成mybatis。当然集成jpa规范在上篇博客中已经有了很详细的解说。如果有想要了解的请看我的上篇博客。
这篇博客的前提是建立在上篇博客的,于是那些个数据库的配置我也就不强调了。
第一步,引入mybatis的相关jar
<!--====================mybatis基础配置=============================================-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
接下来就是简单的写mapper的配置了。
不过这其中有个注意的小点就是在启动类上面添加mapper的扫描。@MapperScan注解后面跟随mapper文件的具体位置。
紧接着就是写Mapper接口。
public interface DemoMapper extends CrudRepository<Demo,Long>{
@Select("select * from Demo where name =#{name}")
public List<Demo> findByName(String name);
@Select("select * from Demo where id=#{id}")
public Demo getById(long id);
@Select("select name from Demo where id=#{id}")
public String getNameById(long id);
}
这个接口中继承了Jpa规范中的CrudRepository接口,其次是使用@Select注解写了一些额外的mybatis查询接口。写的比较简单,只是做个示例。
这里有个小小的坑,就是在命名接口的时候尽量用find这种常见的,其次By后面跟随实体的属性名,不要多也不要少,否则会有彩蛋的。
最后就是写了一个很简单的Controller来验证它。
@RestController
@RequestMapping("/demo")
public class DemoController {
@Autowired
private DemoMapper demoMapper;
@RequestMapping("findByName")
public List<Demo> findByName(String name){
return demoMapper.findByName(name);
}
@RequestMapping("add")
public Integer add(){
Demo demo = new Demo();
demo.setName("demo");
demoMapper.save(demo);
return demo.getId();
}
}
这样底层就有了两种,各取其长。