@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注解这两种注解的区别在于:
-
使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。
-
@repository则需要在Spring中配置扫描包地址(@MapperScannerConfigurer),然后生成dao层的bean,之后被注入到ServiceImpl中@Repository不可以单独使用,否则会报错误。