1. 程式人生 > >SpringBoot和Mybatis的整合

SpringBoot和Mybatis的整合

全註解版

SpringBoot配置檔案

這裡使用yml格式的配置檔案,將application.properties改名為application.yml。

#配置資料來源
spring:
  datasource:
     url: jdbc:mysql://127.0.0.1:3306/dianping?useUnicode=true&characterEncoding=utf8
     username: root
     password: 123
     driver-class-name: com.mysql.jdbc.Driver

SpringBoot會自動載入application.yml相關配置,資料來源就會自動注入到sqlSessionFactory中,sqlSessionFactory會自動注入到Mapper中。

實體類

public class Happiness {
    private Long id;
    private String city;
    private Integer num;

    //getters、setters、toString
}

對映類

@Mapper
public interface HappinessDao {
    @Select("SELECT * FROM happiness WHERE city = #{city}")
    Happiness findHappinessByCity(@Param("city") String city);

    @Insert("INSERT INTO happiness(city, num) VALUES(#{city}, #{num})")
    int insertHappiness(@Param("city") String city, @Param("num") Integer num);
}

Service類

事務管理只需要在方法上加個註解:@Transactional

@Service
public class HappinessService {
    @Autowired
    private HappinessDao happinessDao;

    public Happiness selectService(String city){
        return happinessDao.findHappinessByCity(city);
    }

    @Transactional
    public void insertService(){
        happinessDao.insertHappiness("西安", 9421);
        int a = 1 / 0; //模擬故障
        happinessDao.insertHappiness("長安", 1294);
    }
}

Controller類

@RestController
@RequestMapping("/demo")
public class HappinessController {
    @Autowired
    private HappinessService happinessService;

    @RequestMapping("/query")
    public Happiness testQuery(){
        return happinessService.selectService("北京");
    }

    @RequestMapping("/insert")
    public Happiness testInsert(){
        happinessService.insertService();
        return happinessService.selectService("西安");
    }
}

測試

http://localhost:8080/demo/query
http://localhost:8080/demo/insert

註解xml合併版

專案結構

SpringBoot配置檔案

#配置資料來源
spring:
  datasource:
     url: jdbc:mysql://127.0.0.1:3306/dianping
     username: root
     password: 123
     driver-class-name: com.mysql.jdbc.Driver

#指定mybatis對映檔案的地址
mybatis:
  mapper-locations: classpath:mapper/*.xml

對映類

@Mapper
public interface HappinessDao {
    Happiness findHappinessByCity(String city);
    int insertHappiness(HashMap<String, Object> map);
}

對映檔案

<mapper namespace="com.example.demo.dao.HappinessDao">
    <select id="findHappinessByCity" parameterType="String" resultType="com.example.demo.domain.Happiness">
        SELECT * FROM happiness WHERE city = #{city}
    </select>

    <insert id="insertHappiness" parameterType="HashMap" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO happiness(city, num) VALUES(#{city}, #{num})
    </insert>
</mapper>

Service類

事務管理只需要在方法上加個註解:@Transactional

@Service
public class HappinessService {
    @Autowired
    private HappinessDao happinessDao;

    public Happiness selectService(String city){
        return happinessDao.findHappinessByCity(city);
    }

    @Transactional
    public void insertService(){
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("city", "西安");
        map.put("num", 9421);

        happinessDao.insertHappiness(map);
        int a = 1 / 0; //模擬故障
        happinessDao.insertHappiness(map);
    }
}

Controller類

@RestController
@RequestMapping("/demo")
public class HappinessController {
    @Autowired
    private HappinessService happinessService;

    @RequestMapping("/query")
    public Happiness testQuery(){
        return happinessService.selectService("北京");
    }

    @RequestMapping("/insert")
    public Happiness testInsert(){
        happinessService.insertService();
        return happinessService.selectService("西安");
    }
}

測試

http://localhost:8080/demo/query
http://localhost:8080/demo/insert