4. Springboot快速回顾(@Mapper和@MapperScan)

springboot最重要的注解之一,因为有了@Mapper注解,省去了在xml文件繁琐的配置
本文将对比介绍有无注解的区别,加深认识

项目结构
在这里插入图片描述

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注解了,接下来介绍如何使用这个注解。

针对上述案例,仅修改两处即可。

  1. 去掉@Mapper注解。
  2. 启动类添加@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);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值