MyBatis 框架学习与实践

引言

MyBatis 是一个流行的 Java 持久层框架,它提供了简单的方法来处理数据库中的数据。本文将结合笔记和图片内容,详细讲解 MyBatis 的使用,包括配置、注解、优化技巧以及如何处理特殊字符和参数。

1. MyBatis 基础

1.1 引入依赖

首先,我们需要在项目中引入 MyBatis 和数据库驱动的依赖。这通常在 Maven 的 pom.xml 文件中完成。

1.2 配置文件

MyBatis 需要一个配置文件来设置数据源和映射文件。配置文件通常名为 mybatis-config.xml

xml

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/day1211" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/TeacherMapper.xml"/>
    </mappers>
</configuration>

1.3 映射文件

映射文件用于定义 SQL 语句和 Java 接口方法之间的映射关系。

xml

<mapper namespace="com.ykq.dao.TeacherDao">
    <select id="getById" resultType="Teacher">
        select * from tbl_teacher where id=#{id}
    </select>
</mapper>

2. 注解模式

MyBatis 支持使用注解来编写 SQL 语句,这可以减少 XML 配置的复杂性。

java

public interface TeacherDao {
    @Select("select * from tbl_teacher where id=#{id}")
    Teacher getById(int id);
}

3. MyBatis 优化

3.1 添加 SQL 日志

通过引入 Log4j 依赖并在 log4j.properties 文件中配置,可以在控制台显示 SQL 执行语句,帮助调试。

properties

log4j.rootLogger=DEBUG, Console
log4j.logger.java.sql=DEBUG

3.2 实体类别名

为实体类起别名可以简化映射文件中的配置。

xml

<typeAliases>
    <typeAlias type="com.ykq.entity.Teacher" alias="t"/>
</typeAliases>

3.3 提取数据源信息

将数据源信息提取到属性文件中,便于管理和修改。

properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/day1211
jdbc.username=root
jdbc.password=root

4. 处理多个参数

当方法有多个参数时,可以使用 @Param 注解为参数命名,避免 MyBatis 自动生成的 param1, param2 等。

java

public Userinfo selectByNameAndPwd(@Param("name") String name, @Param("password") String password);

5. 处理特殊字符

在 XML 中处理特殊字符,可以使用转义符或 CDATA 标签。

xml

<select id="selectByAge" resultType="Userinfo">
<![CDATA[select * from tbl_userinfo where age>#{minAge} and age<#{maxAge}]]>
</select>

6. 获取主键递增的值

使用 useGeneratedKeyskeyProperty 属性,可以在插入数据后获取数据库自动生成的主键值。

xml

<insert id="add" useGeneratedKeys="true" keyProperty="id">
    insert into tbl_teacher(name,age,salary) values(#{name},#{age},#{salary})
</insert>

7. 模糊查询

使用 SQL 的 LIKE 语句和 MyBatis 的字符串拼接功能,可以实现模糊查询。

xml

<select id="selectByLike" resultType="Teacher">
    select * from tbl_teacher where name like concat('%',#{name},'%')
</select>

8. 解决列名和属性名不一致的问题

8.1 为列起别名

在查询时为列起别名,使其与实体类的属性名一致。

xml

<select id="selectByAge" resultType="Userinfo">
    select id as id, username as name, password, ... from tbl_userinfo where age>#{minAge}
</select>

8.2 使用 resultMap 标签

resultMap 可以更灵活地映射列名和属性名。

xml

<resultMap id="baseMapper" type="Userinfo">
    <id column="id" property="id"/>
    <result column="name" property="username"/>
</resultMap>

结语

MyBatis 作为一个功能强大的持久层框架,通过本文的介绍,相信读者已经对其有了更深入的了解。在实际开发中,合理利用 MyBatis 的各种特性,可以极大地提高开发效率和代码的可维护性。希望本文能为读者在 MyBatis 的学习和实践中提供帮助。

上一篇:[Unity] AppLovin Max接入Native 广告 Android篇