1、MyBatis整合步骤
2、案例实操
2.1 要求
读取本地数据库ry-vue中sys_user表中相应字段
2.2 步骤
①pom文件中引入相关依赖如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.5</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.1</version> </dependency> <!--数据库相关配置启动器 jdbctemplate 事务相关--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--druid启动器的依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-3-starter</artifactId> <version>1.2.18</version> </dependency> <!--驱动类--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.28</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
②创建application.yaml配置文件,如下:
# druid连接池 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource # 使用druid连接池 druid: url: jdbc:mysql://localhost:3306/ry-vue username: root password: aishangfei34. driver-class-name: com.mysql.cj.jdbc.Driver # mybatis -彻底mybatis-config.xml # mapperxml文件的位置 settings的配置 别名的配置...... mybatis: mapper-locations: classpath:/mappers/*.xml type-aliases-package: com.shangfei.pojo configuration: map-underscore-to-camel-case: true auto-mapping-behavior: full log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
③在resource文件目录下创建mappers文件目录,并配置userMapper.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" > <!--namespace = 接口的全限定符--> <mapper namespace="com.shangfei.mapper.UserMapper"> <select id="queryAll" resultType="user"> select user_id,dept_id,user_name,email from sys_user; # 要查询的字段 </select> </mapper>
④创建启动类,引入注解@SpringBootApplication和@MapperScan("com.shangfei.mapper")//指定mapper接口所在的位置!
@MapperScan("com.shangfei.mapper")//指定mapper接口所在的位置! @SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication.run(Main.class,args); } }
⑤在根包(启动类所在的包)下创建pojo包,并在该包下创建实体类User,给该类引入@Data注解:
@Data public class User { private Integer userId; //!!!!!!!!!!!驼峰命名 如果写user_id,在最后返回数据的时候会是空值 private Integer deptId; private String userName; private String email; }
⑥在根包下创建mapper包,并在该包下创建userMapper接口(该接口的包路径需要用在第②步namespace里!),定义方法:
public interface UserMapper { List<User> queryAll(); }
⑦在根包下创建controller包,并在该包下创建userController类,给该类引入:@RestController和@RequestMapping("user")
@RestController @RequestMapping("user") public class UserController { @Autowired private UserMapper userMapper; @GetMapping public List<User> query(){ return userMapper.queryAll(); } }
⑧由于springboot3还不兼容druid,所以需要在resources文件下创建META-INF/spring目录,在该目录下导入org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,文件内容如下:
com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
⑨测试运行启动类,在网页输入localhost:端口名/路径
3、遇到的问题
①在application.xml配置文件中配置日志时,因为将
“log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl”写成“log-impl: org.apache.ibatis.logging.slf4j.Slf4jLoggerImpl”导致一直报“Error creating bean with name 'sqlSessionFactory' defined”错误;
②由于MyBatis映射关系,在实体类User中属性必须要用驼峰命名,若用下划线方式,则会导致返回的数据为null的情况,但其实数据库中的数据并不是空。