spring Boot注解SQL

更多详细用法,可以参考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


 

发布了43 篇原创文章 · 获赞 57 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_40437152/article/details/85103361