#暑期创作大赛#
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相关文章: