整合Mybatis框架
- 在pom.xml导入依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency>
- 配置application文件,以连接数据库(/demo是连接的数据库的名称,可以根据实际情况替换)
spring: datasource: username: xxx password: xxxx url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimeZone=UTC driver-class-name: com.mysql.cj.jdbc.Driver
- 实现一个实体类area,每一个属性都对应数据库表tb_area中的一列(可以根据自己本地数据库的实际情况替换)
@Data @AllArgsConstructor @NoArgsConstructor public class area { private int areaId; private String areaName; private int priority; private Date createTime; private Date lastEditTime; }
- 新建一个mapper包,并新建一个AreaMapper的接口
注意这里要加上:package com.example.demo.mapper; import com.example.demo.pojo.area; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; @Mapper // 这个注解表示这是一个mybatis的mapper类 @Repository public interface AreaMapper { List<area> queryAreaList(); area queryAreaById(int id); }
- @Mapper注解,表示该接口类的实现类对象交给mybatis底层创建,然后交由Spring框架管理。
- @Repository注解,@Repository注解和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。
- 在resources目录下面创建mybatis/mapper目录,用来存放具体的sql语句的实现
上面的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.example.demo.mapper.AreaMapper"> <select id="queryAreaList" resultType="area"> select * from tb_area </select> <select id="queryAreaById" resultType="area"> select * from tb_area where id=#{id} </select> </mapper>
是固定的,记住即可。<?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">
注意namespace后面要绑定步骤四中的接口 - 继续配置application文件,将resources下的mapper与实体类绑定在一起
mybatis: type-aliases-package: com.example.demo.pojo mapper-locations: classpath:mybatis/mapper/*.xml
- 最后实现controller层,将AreaMapper通过@Autowired注解注入
@RestController public class AreaController { @Autowired private AreaMapper areaMapper; @GetMapping("/list") public List<area> queryAreaList(){ return areaMapper.queryAreaList(); } }
- 运行项目并访问http://localhost:8080/list就可以得到数据库中的内容
这里我们直接通过controller层调用dao层,但在实际项目中一般是controller层调用service层,service层调用dao层