@Autowired与@Resource
1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
2、@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired() @Qualifier("baseDao")
private BaseDao baseDao;
3、@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Resource(name="baseDao")
private BaseDao baseDao;
我喜欢用 @Resource注解在字段上,且这个注解是属于J2EE的,减少了与spring的耦合。最重要的这样代码看起就比较优雅。
@param
描述: 记录传递给一个函数的参数。
概述
@param标签提供了对某个函数的参数的各项说明,包括参数名、参数数据类型、描述等。@param标签要求您指定要描述参数的名称。您还可以包含参数的数据类型,使用大括号括起来,和参数的描述。
参数类型可以是一个内置的JavaScript类型,如string或Object,或是你代码中另一个标识符的JSDoc
namepath(名称路径)。如果你已经在这namepath(名称路径)上为标识符添加了描述,JSDoc会自动链接到该标识符的文档。您还可以使用type的表达式来表示,例如,该参数不能为空或可以接受任何类型;详见@type
标签文档。如果您提供的描述,在描述之前插入一个连字符,可以使JSDoc注释更具可读性。请务必在连字符后加一个空格。
mybatis中使用@param和不使用区别
1,使用@Param注解
当以下面的方式进行写SQL语句时:
@Select("select column from table where userid = #{userid} ")
public int selectColumn(int userid);
当你使用了使用@Param注解来声明参数时,如果使用 #{} 或 ${} 的方式都可以。
@Select("select column from table where userid = ${userid} ")
public int selectColumn(@Param("userid") int userid);
当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。
@Select("select column from table where userid = ${userid} ")
public int selectColumn(@Param(“userid”) int userid);
2,不使用@Param注解
不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。
// 这里id是user的属性
@Select("SELECT * from Table where id = ${id}")
Enchashment selectUserById(User user);
spring和mybatis中@param使用区别
1.spring中@param
/**
* 查询指定用户和企业关联有没有配置角色
* @param businessId memberId
* @return
*/
int selectRoleCount(@Param("businessId") Integer businessId,@Param("memberId") Long memberId); 123456
2.mybatis中的param
/**
* 查询指定用户和企业关联有没有配置角色
* @param businessId memberId
* @return
*/
int selectRoleCount(@Param("businessId") Integer businessId,@Param("memberId") Long memberId);
从表面上看,两种并没有区别,但是在xml文件中使用的时候是有区别的,Spring中的@param在xml需要如下这样引用变量
<select id="selectRoleCount" resultType="java.lang.Integer" >
count(tbm.id) from t_business_member_relation tbm where tbm.business_id = #{0,jdbcType=INTEGER}
and tbm.member_id = #{1,jdbcType=INTEGER}
and tbm.role_business_id is not null
</select>```
是根据参数的顺序来取值的,并且从0开始。而在mybatis @param在xml中则是如下这样引用变量的
```java
<select id="selectRoleCount" resultType="java.lang.Integer" >
count(tbm.id) from t_business_member_relation tbm where tbm.business_id = #{businessId,jdbcType=INTEGER}
and tbm.member_id = #{memberId,jdbcType=INTEGER}
and tbm.role_business_id is not null
</select>
是通过参数名来引用的
注:如果Mapper.java文件中引用的是Spring的
org.springframework.data.repository.query.Param;
但是Mapper.xml中使用的是mybatis 的用法,那么就会如下的错误
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'businessId' not found. Available parameters are [1, 0, param1, param2]
所以在使用的时候一定要注意@param引用和使用的一致性
@TableName
@TableName("t_user")
public class User
@TableId
@TableField
字段名为user_name
// 指定属性所对应的字段名
@TableField("user_name")
private String name;
@TableLogic
逻辑删除可以在数据库添加字段
然后在实体类写入该注解
然后实现该字段一开始为0,如果被删除把该字段改为1
这样在客户端看来就是已经删除但是在数据库只是修改了该字段,并没有删除改信息