MyBatis中的@Results

public interface MenuMapper {
	@Results(
		value={
			@Result(id=true,property="id",column="id"),
			@Result(property="name",column="name"),
			@Result(property="pid",column="pid"),//menu中的id是他的方法中的pid
			@Result(property="children",many=@Many(select="selByPid"),column="{uid=uid,pid=id}"),
			
		}
	)
	//把传过来的uid的值做常量列的值,并取名为UID
	@Select("select *,#{uid} uid from menu where id in (select mid from users_menu where uid=#{uid}) and pid=#{pid}")
	List<Menu> selByPid(Map<String,Object> map);

}

@Results:当数据库字段名和实体类所对应的属性名字不一致的时候,通过@Results将他们对应起来。其中column是数据库字段名,property是实体类的属性名。id表示是否是主键

public interface MenuMapper {
	@Results(id="MenuMap"
		value={
			@Result(id=true,property="id",column="id"),
			@Result(property="name",column="name"),
			@Result(property="pid",column="pid"),//menu中的id是他的方法中的pid
			@Result(property="children",many=@Many(select="selByPid"),column="{uid=uid,pid=id}"),//左侧是参数,右侧是数据库字段名
			
		}
	)
	//把传过来的uid的值做常量列的值,并取名为UID
	@Select("select *,#{uid} uid from menu where id in (select mid from users_menu where uid=#{uid}) and pid=#{pid}")
	List<Menu> selByPid(Map<String,Object> map);
	
	@Select("select *,#{uid} uid from menu")
	@ResultMap(value="menuMap")
	List<Menu> select();	

@ResultMap表示,如果@Results复用率比较高的时候。可以使用@ResultMap来复用这段代码。

@Many:需要通过查询到的字段值作为参数(查询出的内容是1对多的
),然后执行另一个方法来查询关联的内容

@One相对@Many来讲,@One的查询结果是1对1的。



关于@Param的注解

@Select("select * from user where id = #{id}")
User selById(@Param("id")int id);
@Select("select * from user where id = ${id}")
User selById(@Param("id")int id);
@Select("select * from user where id = #{id}")
User selById(User user);

@Param:三种使用方法,使用@Param注解声明参数的时候,可是使用#{}和${}。如果不使用@Param注解,参数只能使用JavaBean。


#{}和${}之间的区别:

#{}:在预处理的时候会将参数部位转换成占位符?参数替换发生在DBMS中。
而${}不会,所以容易发生sql注入问题。参数替换发生在动态解析过程中。
所以优先使用#{}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值