1. 程式人生 > >springboot專案底層整合jpa規範與mybatis

springboot專案底層整合jpa規範與mybatis

    你我共知,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();
    }
}
這樣底層就有了兩種,各取其長。