@Mapper的使用

@Mapper注解,目的就是为了不再写mapper映射文件,是注解开发时用的。

在Dao层配置@mapper注解

@Mapper
public interface Inter {
    @Insert("insert into sysuser values('e212te','2','jjj','pwd','ljk','男',1)")
    int addUser();
}

有参数的情况

@Mapper
public interface Inter {
    @select("select * from sysuser where userid=#{id}")
    int queryUserByid(int id);
}

多参数情况

@Mapper
public interface Inter {
    @select("select * from sysuser where userid=#{id} and uanme=#{uname}")
    int queryUserByid(@param("id") int id,@param("uname") String uname);
}

如果是实体类呢

@Mapper
public interface Inter {
   @Select("select * from sysuser where userid=#{userid} or username=#{username}")
    List<Sysuser> selectUser(Sysuser u);
}

首先我们肯定要保证的是数据库连接成功,IOC环境一切正常
我们可以不用扫描mapper的映射文件,直接进行接口包扫描

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="A"/>
    </bean>

其实可以猜测,当进行MapperScan的时候,扫描到@Mapper,就拦截,生成代理类加入集合中,当执行该类的某一个方法时,检查方法的注解和参数,获取相应的值,执行方法和sql。

不足的是,每一个接口都需要配置mapper注解,所以说懒是技术发展的中间力量,后来有又了@MapperScan注解

下面进行测试

public class InterTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-dao.xml");
        Inter bean = applicationContext.getBean(Inter.class);
        int i = bean.addUser();
        System.out.println(i);
    }
}
"C:\Program Files\Java\jdk1.8.0_144\bin\java.exe" "-javaagent:D:\IntelliJ IDEA\IntelliJ IDEA 2018.2.4\lib\idea_rt.jar=59005:D:\IntelliJ IDEA\IntelliJ IDEA 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;C:\Program bin\rep\org\springframework\spring-tx\5.2.4.RELEASE\spring-tx-5.2.4.RELEASE.jar" 
九月 22, 2020 7:10:12 下午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
1

Process finished with exit code 0

在mapper加@mapper或者@repository注解这两种注解的区别在于:

  1. 使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。

  2. @repository则需要在Spring中配置扫描包地址(@MapperScannerConfigurer),然后生成dao层的bean,之后被注入到ServiceImpl中@Repository不可以单独使用,否则会报错误。

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值