更多詳細用法,可以參考mybatis中文網的專門介紹
http://www.mybatis.org/mybatis-3/zh/statement-builders.html
1、在我們寫的動態sql前面添加@Seclect
@Select("select * from d_technician")
@Results(id = "techniciansMap",
value = {
@Result(id = true, property = "id", column = "id"),
@Result(property = "userId", column = "user_id"),
@Result(property = "skilful", column = "skilful"),
@Result(property = "company", column = "company"),
@Result(property = "workYear", column = "work_year"),
@Result(property = "resume", column = "resume"),
@Result(property = "star", column = "star"),
@Result(property = "deal", column = "deal"),
@Result(property = "likeNum", column = "like_num"),
})
List<Technician> getTechnicians();
條件查詢,對條件進行非空判斷,在sql語句中拼接<script></script>
@Select("<script>select * from user <if test=\"id !=null \">where id = #{id} </if></script>")
public List<User> findUserById(User user);
2.可以在接口中 創建內部類實現,當然也可以新建一個類
class TechnicianMapperProvider{
//結構化sql
public String selectTechnicianByPara(Technician technician) {
return new SQL() {
{
SELECT("*");
FROM("d_technician");
if (technician.getSkilful() != null) {
WHERE("skilful = #{skilful}");
}
if (technician.getWorkYear() != null) {
WHERE("work_year = #{workYear}");
}
if (technician.getStar() != null) {
WHERE("star = #{star}");
}
}
}.toString();
}
}
//增改刪對應@InsertProvider、@UpdateProvider、@DeleteProvider
@SelectProvider(type = TechnicianMapperProvider.class,method = "selectTechnicianByPara")
List<Technician> getTechnicians();
//結構化sql 看着高大上,但是多表查詢 貌似不行,ON 字段沒有(如果有遇到,用上面可以實現的,歡迎評論 )
public String selectTechnicianByPara(Technician technician) {
String sql = "select * from d_technician";
if (technician.getSkilful() != null) {
sql+="where skiful = #{skiful}";
}
return sql;
}
//如果覺得麻煩,可以直接編寫xml腳本,可能更方便些
關於Mapper接口的註解
注意:使用註解版需要在類上加上@Mapper註解,讓SpringBoot自動掃描能識別
@Mapper
public interface UserMapper {
一次行掃描所有mapper 在程序啓動入口加入註解:
@MapperScan(basePackages= {"com.lqy.springboot.mapper"})
@SpringBootApplication
public class SpringbootApplication {
對於上面Mapper結果的映射
注意:@Results 在@Select前後都沒有關係
聲明時給id賦值爲techniciansMap
在其他 方法中,重複使用id爲techniciansMap的結果映射
@ResultMap("techniciansMap")
如果是通過xml文件來配置的話,只需要開啓駝峯命名轉換
<setting name="mapUnderscoreToCamelCase" value="true"/>
mybatis:
configuration:
map-underscore-to-camel-case: true