MyBatis映射配置:XML配置、注解配置、动态SQL
一、引言
MyBatis是一款优秀的持久层框架,它提供了灵活多样的映射配置方式,包括XML配置、注解配置以及强大的动态SQL功能,这些配置方式帮助开发者高效地实现数据库操作。
二、XML配置
1. 配置文件结构
在MyBatis中,XML映射文件通常与Mapper接口相对应。以查询用户信息为例,XML文件中包含<mapper>
标签,其中的namespace属性值与Mapper接口的全限定名一致,这样可以建立接口与映射文件的关联。
2. SQL语句定义
在<mapper>
标签内,通过<select>
、<insert>
、<update>
、<delete>
等标签定义SQL语句。例如:
<mapper namespace="com.example.dao.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.example.entity.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
这里id
是SQL语句在Mapper接口中的方法名,parameterType
指定传入参数类型,resultType
指定返回结果类型。
3. 结果映射
当数据库表字段与实体类属性名不一致时,可使用<resultMap>
进行结果映射。比如:
<resultMap id="userResultMap" type="com.example.entity.User">
<id property="userId" column="id"/>
<result property="userName" column="name"/>
</resultMap>
<select id="getUserById" parameterType="int" resultMap="userResultMap">
SELECT id, name FROM users WHERE id = #{id}
</select>
三、注解配置
1. 简单注解
MyBatis提供了一系列注解用于简化配置。例如,@Select
注解用于定义查询语句:
import org.apache.ibatis.annotations.Select;
import com.example.entity.User;
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(int id);
}
2. 复杂注解
对于更复杂的操作,如插入数据时返回自增主键,可使用@Options
注解配合@Insert
注解:
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import com.example.entity.User;
public interface UserMapper {
@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertUser(User user);
}
四、动态SQL
1. <if>
标签
动态SQL允许根据不同条件生成不同的SQL语句。例如,根据用户姓名和年龄进行条件查询:
<select id="findUsers" parameterType="com.example.entity.User" resultType="com.example.entity.User">
SELECT * FROM users
<where>
<if test="name != null and name != ''">
name = #{name}
</if>
<if test="age != null">
and age = #{age}
</if>
</where>
</select>
2. <choose>
、<when>
、<otherwise>
标签
类似于Java中的switch - case
语句,用于多条件选择。如:
<select id="getUserByCondition" parameterType="com.example.entity.User" resultType="com.example.entity.User">
SELECT * FROM users
<where>
<choose>
<when test="name != null and name != ''">
name = #{name}
</when>
<when test="age != null">
age = #{age}
</when>
<otherwise>
1 = 1
</otherwise>
</choose>
</where>
</select>
五、总结
XML配置适合复杂的SQL定义和结果映射;注解配置简洁直观,适用于简单的数据库操作;动态SQL则极大地提高了SQL语句的灵活性和复用性。开发者可根据实际需求选择合适的映射配置方式,以提升开发效率和代码质量。
本文链接:https://blog.runxinyun.com/post/545.html 转载需授权!
留言0