引言
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. 获取主键递增的值
使用 useGeneratedKeys
和 keyProperty
属性,可以在插入数据后获取数据库自动生成的主键值。
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 的学习和实践中提供帮助。