springboot最重要的注解之一,因为有了@Mapper注解,省去了在xml文件繁琐的配置
本文将对比介绍有无注解的区别,加深认识
目录
- 1 初次使用@Mapper
- 1.1 创建实体类Stu
- 1.2 创建dao层接口
- 1.3 创建service层接口和实现
- 1.5 创建StuMapper.xml文件
- 1.4 创建controller类
- 2 初次使用@MapperScan
项目结构
1 初次使用@Mapper
前提是数据库已经自己创建了表,在配置文件中连接数据库
1.1 创建实体类Stu
public class stu {
String name;
Integer age;
String sex;
Integer id;
public stu() {
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String toString() {
return "stu{name='" + this.name + '\'' + ", age=" + this.age + ", sex='" + this.sex + '\'' + ", id=" + this.id + '}';
}
}
1.2 创建dao层接口
//根据stuid查询学生全部信息
@Mapper
public interface StuDao {
stu selectById(@Param("stuId") Integer id);
}
重点解释:为何这里使用@Mapper注解,它有什么作用,以及怎么用?
比如我想添加一个查询功能,就需要创建一个dao接口,在接口中定义一个查询函数。当我需要写这个查询函数的sql语言时,就需要创建对应的StuMapper.xml文件,在这个文件里面写。但是这个文件此时无法被扫描到,因此还需要在核心mapper.xml文件中配置路径,以便程序找到我们创建的那些xml文件。
核心mapper.xml文件配置路径案例
> <!--mapper扫描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--如果需要扫描多个包,中间使用半角逗号隔开-->
<property name="basePackage" value="com.liuyanzhao.ssm.blog.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
>
使用@Mapper就是省去了在核心mapper.xml文件中配置的过程。
在每个Dao接口上添加@Mapper文件,会托管给容器,容器自然会找到
1.3 创建service层接口和实现
public interface StuService {
stu queryStudent(Integer id);
}
@Service
public class StuServiceImpl implements StuService {
@Resource
private StuDao stuDao;
public StuServiceImpl() {
}
public stu queryStudent(Integer id) {
stu stu = this.stuDao.selectById(id);
return stu;
}
}
1.5 创建StuMapper.xml文件
<!--namespace是此mapper对应的dao接口-->
<mapper namespace="com.zjh.dao.StuDao">
<!--resultType是此mapper对应的实体类-->
<select id="selectById" resultType="com.zjh.model.stu">
select
*
from
stu
where
id=#{stuId};
</select>
</mapper>
1.4 创建controller类
@Controller
public class stuController {
@Resource
private StuService stuService;
public stuController() {
}
@RequestMapping({"/mapper"})
@ResponseBody
public String selectById(Integer id) {
stu stu = this.stuService.queryStudent(id);
return stu.toString();
}
}
结束,测试运行即可!
2 初次使用@MapperScan
上述案例仅提供了一个dao接口,实现根据id查学生信息
若我现在需要10个,100个和学生相关的增删改查操作,就得在每个dao接口上写@Mapper注解,这就显得十分啰嗦。因此直接使用一个@MapperScan,就不需要写那么多@Mapper注解了,接下来介绍如何使用这个注解。
针对上述案例,仅修改两处即可。
- 去掉@Mapper注解。
- 启动类添加@MapperScan注解
@SpringBootApplication
//本来需要在多个Dao接口上写多个@Mapper注解,现在只需要写一个扫描注解,扫描Dao接口 所在的包
//所有的.xml文件在 “com.zjh.dao" 路径下
//如果在A路径下有Dao接口,B路径下有Dao接口,那么 basePackages = {"A路径",”B路径“},因为basePackages底层是数组
@MapperScan(basePackages = "com.zjh.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}