从零到一Mybatis-flex框架之路(二)

 前言

        今天我们就来一起学习简单使用注解方式和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);
    }

5deba91a9f8342de8f96ebf47f88dd09.png

 2.xml方式进行查询教师授课情况测试:

 @Test
    void selectByName() {
        List<Course> courses = courseMapper.selectByName("张三");
        System.out.println(courses);
    }

38ae45bdb55f4cd8888c8e3d482b4772.png

3.xml方式进行课程分页测试:

@Test
    void page() {
        List<Course> list = courseMapper.page(2, 4);
        System.out.println(list);

427a2a403b5e4667aac71f8546d97a93.png

4.xml方式进行查询用户分页

 @Test
    void page1() {
        List<User> list = userMapper.page1(0, 2);
        System.out.println(list);
    }

bf576aa29b794d1b8017992fb709d7c8.png

总结 

  • 选择 XML:适合需要灵活复杂 SQL 或大规模配置的场景,尤其在团队开发中,XML 可以提升可读性和一致性。
  • 选择注解:适合简单的 SQL 操作以及小型项目,注解方式简洁明了,便于快速开发。

        在实践中,你可以根据项目的需求、团队的习惯以及个人的偏好选择使用 XML 或注解,甚至可以将两者结合使用,以发挥各自的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值