前言
今天我们就来一起学习简单使用注解方式和xml的方式入个门,一般来说比较不复杂的语句就可以使用注解的方式来运用,首先,注解方式比较简便,适合处理简单的 SQL 语句。你可以直接在 Mapper 接口的方法上使用注解。对于动态 SQL 或者复杂的操作,通常使用 XML 配置方式。它可以更灵活地构建 SQL 语句,比如通过条件动态生成 SQL。
步骤
第 1 步:创建数据库表
user表的SQL语句
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`age` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES (1, 'admin', '123', 18);
INSERT INTO `user` VALUES (2, 'cc', '123', 22);
INSERT INTO `user` VALUES (3, 'aa', '111', 11);
INSERT INTO `user` VALUES (4, 'bb', '222', 11);
SET FOREIGN_KEY_CHECKS = 1;
course表的SQL语句
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`course` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`course_id` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `course` VALUES (1, '张三', '语文', 1);
INSERT INTO `course` VALUES (2, '李四', '数学', 2);
INSERT INTO `course` VALUES (3, '王五', '数学', 2);
INSERT INTO `course` VALUES (4, '李六', '语文', 1);
SET FOREIGN_KEY_CHECKS = 1;
第 2 步:创建 Spring Boot 项目,并添加 Maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.9.7</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version> <!-- 请根据你的项目需求调整版本 -->
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
第 3 步:对 Spring Boot 项目进行配置
在 application.yml 中配置数据源:
server:
port:
8080
# DataSource Config
spring:
datasource:
url: jdbc:mysql://localhost:3306/course
username: root
password: 123456
url: jdbc:mysql://localhost:3306/(改成自己的数据库名称)
username: root(改自己数据库的用户名)
password: 123456(改自己数据库的密码)
在 Spring Boot 启动类中添加 @MapperScan
注解,扫描 Mapper 文件夹:
@SpringBootApplication
@MapperScan("com.wzf.coursetest.mapper")
第 4 步:编写实体类和 Mapper 接口
这里使用了 Lombok 来进行简化代码。
Course实体类
@Data
@Table("course")
public class Course {
private Integer id;
private Integer courseId;
private String name;
private String course;
}
User实体类
@Data
@Table("user")
public class User {
@Id(keyType = KeyType.Auto)
private Integer id;
private String username;
private String password;
private Integer age;
}
- 使用
@Table("tb_account")
设置实体类与表名的映射关系 - 使用
@Id(keyType = KeyType.Auto)
标识主键为自增 User实体类
CourseMapper 接口:
@Mapper
public interface CourseMapper extends BaseMapper<Course> {
/**
* 分页查询
*
* @param start
* @param pageSize
* @return
*/
List<Course> page(@Param("start") Integer start, @Param("pageSize") Integer pageSize);
/**
* 查询授课的情况
* @param name
* @return
*/
List<Course> selectByName(@Param("name")String name);
}
UserMapper接口:
@Mapper
public interface UserMapper extends BaseMapper<User> {
/**
* 登录方法
*
* @param username
* @param password
* @return
*/
@Select("select * from user where username=#{username} and password=#{password}")
User login(@Param("username") String username, @Param("password") String password);
/**
* 分页查询
*
* @param start
* @param pageSize
* @return
*/
List<User> page1(@Param("start") Integer start, @Param("pageSize") Integer pageSize);
}
第 5步:xml文件创建的注意事项
在 Spring Boot 项目中,XML 文件(如 MyBatis 的映射文件)通常需要放在特定的文件夹中,以确保能够正确加载。以下是几种推荐的文件夹创建位置以及相关注意事项:
1. 放置在 resources
目录下
最常见的做法是将 XML 文件放在 src/main/resources
目录下。在该目录下,你可以创建一个 mapper
文件夹来存放 MyBatis 的映射文件。例如:
src/main/resources/mapper/UserMapper.xml
2. Maven 配置
在 pom.xml
文件中,你可能需要确保资源目录被正确加载。通常可以在 <build>
节点下添加以下配置来确保 Maven 编译时能正确识别 XML 文件:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
3. MyBatis 配置
在你的配置文件(如 application.properties
或 application.yml
)中,确保设置了 mybatis.mapper-locations
,这样 MyBatis 才能正确找到 XML 文件。例如:
mybatis.mapper-locations=classpath:mapper/*.xml
4. 文件位置的注意事项
- XML 与 Mapper 接口的放置:建议将 Mapper 接口与对应的 XML 文件放在同一包内或相近的包中,这样可以简化配置,Spring Boot 通常能够自动扫描到它们。例如,如果你的接口
UserMapper
放在com.example.mapper
包中,那么相应的 XML 文件最好放在src/main/resources/mapper
下。 - IDE 设定:在使用 IDE(如 IntelliJ IDEA)时,默认情况下,XML 文件应该放在
resources
下。如果放在java
目录中,它可能无法被编译或加载。因此,确保文件放置在resources
下是非常重要的 。
5. 常见错误
如果 Mapper 接口和 XML 文件放在不当位置,可能导致 Spring Boot 无法启动或无法找到映射文件,从而导致运行时错误。因此,遵循上述目录结构和配置是非常关键的 。
总之,确保将 XML 文件放置在 src/main/resources/mapper
下,并在配置文件中正确指向这些文件,可以帮助你避免许多常见问题。
第 6步:xml文件创建
这边我这采用第一种方式 将 XML 文件放在 src/main/resources
目录下。
CourseMapper.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.wzf.coursetest.mapper.CourseMapper">
<!-- 分页查询-->
<select id="page" resultType="com.wzf.coursetest.pojo.Course">
select *
from course
limit ${start}, ${pageSize}
</select>
<select id="selectByName" resultType="com.wzf.coursetest.pojo.Course">
select *
from course
where name = #{name}
</select>
</mapper>
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" >
<mapper namespace="com.wzf.coursetest.mapper.UserMapper">
<!-- 分页查询-->
<select id="page1" resultType="com.wzf.coursetest.pojo.User">
select *
from user
limit ${start}, ${pageSize}
</select>
</mapper>
namespace
用于定义当前 XML 映射文件的命名空间,通常是与对应 Mapper 接口的全限定类名相同。resultType
用于指定 SQL 查询返回的结果应该映射到哪个 Java 类型。它帮助 MyBatis 将 SQL 查询结果转换为合适的 Java 对象。
第 7步:开始单元测试
1.登录测试:
@Test
void login() {
User user = userMapper.login("admin", "123");
System.out.println(user);
}
2.xml方式进行查询教师授课情况测试:
@Test
void selectByName() {
List<Course> courses = courseMapper.selectByName("张三");
System.out.println(courses);
}
3.xml方式进行课程分页测试:
@Test
void page() {
List<Course> list = courseMapper.page(2, 4);
System.out.println(list);
4.xml方式进行查询用户分页
@Test
void page1() {
List<User> list = userMapper.page1(0, 2);
System.out.println(list);
}
总结
- 选择 XML:适合需要灵活复杂 SQL 或大规模配置的场景,尤其在团队开发中,XML 可以提升可读性和一致性。
- 选择注解:适合简单的 SQL 操作以及小型项目,注解方式简洁明了,便于快速开发。
在实践中,你可以根据项目的需求、团队的习惯以及个人的偏好选择使用 XML 或注解,甚至可以将两者结合使用,以发挥各自的优势。