👨🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的!
👋大家好!我是你们的老朋友Java学术趴。
@Service注解一般写在业务层的接口实现类上,而不是接口上。
@Service : @Service注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容中。
@Service
public class CourseDAOImpl extends HibernateDaoSupport implements CourseDAO{
...
}
复制
@Service("courseDAOImpl") :这个表示给类命名一个别名,方便注入到其他类中。不加这个参数值的话,默认别名就是当前类名,但是首字母小写。
在实际开发中,我们一般都直接使用 @Sevice
@Scope :Spring IOC 容器中的一个作用域,在 Spring IOC容器中,他用来配置Bean实例的作用域对象。
@Scope的几种作用域:
默认的作用域是:singleton(单实例)
@Reponsitory :@Reponsitory的作用与@Controller,@Service的作用都是把对象交给Spring管理。@Reponsitory是标注在Dao层接口上,作用是将接口的一个实现类交给Spring管理。
注意:
这个 @Repository 完全可以省略不写,也完全可以实现自动注入,但是在IDEA中会存在一个红色的波浪线。原因如下:
@Mapper : 这个注解一般使用在Dao层接口上,相当于一个mapper.xml文件,它的作用就是将接口生成一个动态代理类。加入了@Mapper注解,目的就是为了不再写mapper映射文件。这个注解就是用来映射mapper.xml文件的。
@Mapper使用的原理:
注意:
在实际开发中,如何使用@Mapper、@MapperSacn、@Reponsitory注解???
建议:
@Select :该注解的目的是为了取代mapper.xml中的select标签,只作用于方法上面。此时就不要在写mapper.xml文件了。
@Select注解的源码
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Select
{
String[] value();
}
复制
从上述可以看到两点信息:
所以,@Select注解的用法是这样的:
@Select({ "select * from xxx", "select * from yyy" })
Person selectPersonById(Integer id);
复制
虽然@Select注解的值是字符数组,但是真正生效的应该是最后那条SQL语句。这一点请大家要留意一下。
普通的字符串值,只能实现变量的替换功能,实现简单的SQL语句,如下所示,
@Select("select * from t_person where id = #{id}")
Person selectPersonById(Integer id);
复制
如果要想实现复杂的逻辑判断,则需要使用标签 ,如下所示:
@Select("<script> select * from t_person where id = #{id}
<when test='address !=null'> and address = #{address}
</when> </script>")
Person selectPersonById(Integer id);
复制
其实,标签 注解专用的,其他的注解,例如@Insert、@Update、@Delete等等,都可以使用的。
@Param : 动态代理接口向映射文件中传递参数的时候,会使用@Param注解,并且如果动态代理接口使用了@Param这个注解,那么映射文件中的标签中可以不用写parameterType属性,可以直接接收@Param中传递来的参数值。
先来看一下动态代理接口中是怎样写的,如下图:
再来看一下与动态代理接口对应的映射文件中是怎样接收参数的,如下图:
mapper中的方法:
public User selectUser(@Param("userName") String name,@Param("password") String pwd);
复制
映射到xml中的标签 <select id="selectUser" resultMap="User"> select * from user where user_name = #{userName} and user_password=#{password} </select> 其中where user_name = #{userName} and user_password = #{password}中的userName和password都是从注解@Param()里面取出来的,取出来的值就是方法中形式参数 String name 和 String pwd的值。 重点:当只存在一个参数的时候,此时可以省略这个 @@Param注解,但是两个参数必须使用这个注解。 5.4.2 @Param注解JavaBean对象 SQL语句通过@Param注解中的别名把对象中的属性取出来然后复制 mapper中的方法: public List<User> getAllUser(@Param("user") User u); 映射到xml中的标签
<select id="getAllUser" parameterType="com.vo.User" resultMap="userMapper">
select
from user t where 1=1
and t.user_name = #{user.userName}
and t.user_age = #{user.userAge}
</select>
复制
注意点:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。