天天看点

Java技术干货|MyBatis实现将SQL执行结果封装为目标对象并返回

作者:运维木子李

#暑期创作大赛#

MyBatis使用映射器接口和XML配置文件来将SQL执行结果封装为目标对象并返回。

首先,我们需要定义一个映射器接口。

例如:

public interface UserMapper {
    User getUserById(int id);
}           

接下来,在XML配置文件中定义SQL语句和结果映射关系。

例如:

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <select id="getUserById" resultType="com.example.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>           

在以上示例中,id为getUserById的SQL语句会将查询结果映射为com.example.User类型的对象。然后,我们需要配置MyBatis来加载映射器接口和XML配置文件。

例如,在mybatis-config.xml文件中添加以下配置:

<configuration>
    <mappers>
        <mapper class="com.example.UserMapper"/>
    </mappers>
</configuration>           

最后,我们可以在代码中使用MyBatis的SqlSession接口来执行SQL语句并获取结果。

例如:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);

sqlSession.close();           

在以上示例中,我们通过SqlSession的getMapper方法获取到了UserMapper的实例,并调用其方法来执行SQL语句,并将查询结果封装为User对象并返回。

至于映射形式,MyBatis提供了以下几种映射方式:

1)属性映射:将查询结果的列映射到目标对象的属性上。

<!-- UserMapper.xml -->
<resultMap id="userMap" type="com.example.User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <result property="age" column="user_age"/>
</resultMap>

<select id="getUserById" resultMap="userMap">
    SELECT id AS user_id, name AS user_name, age AS user_age FROM users WHERE id = #{id}
</select>           

2)构造函数映射:将查询结果的列通过构造函数来创建目标对象。

<!-- UserMapper.xml -->
<resultMap id="userMap" type="com.example.User">
    <constructor>
        <idArg column="user_id" javaType="int"/>
        <arg column="user_name" javaType="String"/>
        <arg column="user_age" javaType="int"/>
    </constructor>
</resultMap>

<select id="getUserById" resultMap="userMap">
    SELECT id AS user_id, name AS user_name, age AS user_age FROM users WHERE id = #{id}
</select>           

3)关联映射:将查询结果的列映射到关联对象的属性上。

<!-- UserMapper.xml -->
<resultMap id="userMap" type="com.example.User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <result property="age" column="user_age"/>
    <association property="address" javaType="com.example.Address">
        <id property="id" column="address_id"/>
        <result property="city" column="address_city"/>
        <result property="street" column="address_street"/>
    </association>
</resultMap>

<select id="getUserById" resultMap="userMap">
    SELECT u.id AS user_id, u.name AS user_name, u.age AS user_age, a.id AS address_id, a.city AS address_city, a.street AS address_street
    FROM users u
    JOIN addresses a ON u.address_id = a.id
    WHERE u.id = #{id}
</select>           

以上是MyBatis将SQL执行结果封装为目标对象并返回的示例代码,以及常见的映射形式的示例代码。

java相关文章:

继续阅读