Springboot整合mybatise的mapper.xml放dao层目录下

Springboot整合mybatise的mapper.xml放dao层目录下

分不使用spring和使用spring,这里一律是考虑springboot整合下,其他情况不具有参考意义

本内容在springboot整合mybatise基础上改动

一、依赖

同上

添加 build内容,让程序编译 dao/mapper下的xml,否则不会编译这里面的xml文件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>

    <!-- ......用于扫描 dao 文件下的mapper 文件................. start -->
    <resources>

        <!-- 编译 src/main/java 目录下的 mapper 文件 -->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
    <!-- ......用于扫描 dao 文件下的mapper 文件................. end -->

</build>

二、配置文件

server:
  port: 8080

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/group?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

注意:mapper-locations的不同

三、代码内容

domain类

public class Doctor {
          
   

    private String id;
    private String sname;
    private String age;

    public String getId() {
          
   
        return id;
    }

    public void setId(String id) {
          
   
        this.id = id;
    }

    public String getSname() {
          
   
        return sname;
    }

    public void setSname(String sname) {
          
   
        this.sname = sname;
    }

    public String getAge() {
          
   
        return age;
    }

    public void setAge(String age) {
          
   
        this.age = age;
    }
}

mapper

@Repository
public interface DoctorMapper {
          
   

    String getDoctorName(int id);
}

service

@Service
public class DoctorService {
          
   

    @Autowired
    private DoctorMapper doctorMapper;

    public String getDoctorName(int id){
          
   
        return doctorMapper.getDoctorName(id);
    }
}

controller

@RestController
@RequestMapping("/testBoot")
public class DoctorController {
          
   

    @Autowired
    private DoctorService doctorService;

    @GetMapping("/getName/{id}")
    public String getDoctorName(@PathVariable int id){
          
   
        return doctorService.getDoctorName(id);
    }

}

DoctorMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pingan.mapper.DoctorMapper">

    <select id="getDoctorName" parameterType="java.lang.Integer" resultType="java.lang.String">
        select sname from doctor where id = #{id}
    </select>
</mapper>

主启动类

@MapperScan("com.pingan.mapper")
@SpringBootApplication
public class Application {
          
   
    public static void main(String[] args) {
          
   
        SpringApplication.run(Application.class, args);
    }
}

目录

区别

1.

这里将mapper.xml放在dao的同目录下,resources里面没有mapper.xml

2.

然后 依赖里面加了 打包的内容,

3.

再把mapper的路径在配置文件里修改下

mybatis: mapper-locations: classpath:mapper/*Mapper.xml

上面的指代的是mapper.xml的位置,

注意与主启动上扫描的目的不同,

4.

主启动上是为了扫描mapper接口

5.

dao层用 @Mapper还是 @Repository都行

经验分享 程序员 微信小程序 职场和发展