1.为类配置别名
<!-- 类型别名,xml不需要写入全包名类名 -->
<typeAliases>
<typeAlias type="com.jym.bean.User" alias="User"/>
</typeAliases>
2.根据实体类在mapper 里配置resultMap
实体类:省略getter setter
package com.jym.bean;
import java.util.List;
public class User {
private String id;
private String email;
private String hopeJob;
private String name;
private String personalEvaluation;
private Education education;
private String personalSkills;
private String phoneNumber;
private List<WorkExperience> workExperienceList;
private byte[] userImage;
}
mapper.xml resultMap
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="email" column="email"/>
<result property="hopeJob" column="hope_job"/>
<result property="name" column="name"/>
<result property="personalEvaluation" column="personal_evaluation"/>
<result property="personalSkills" column="personal_skills"/>
<result property="phoneNumber" column="phone_number"/>
<!-- 一对一标签 -->
<association property="education" javaType="Education">
<id property="id" column="id"/>
<result property="educationText" column="education_text"/>
<result property="educationTitle" column="education_title"/>
</association>
<!-- 一对多标签 -->
<collection property="workExperienceList" ofType="WorkExperience">
<id property="id" column="id"/>
<result property="workExperienceText" column="work_experience_text"/>
<result property="workExperienceTitle" column="work_experience_title"/>
</collection>
</resultMap>
xml动态sql:用 resultMap代替resultType
<!-- 名字为selectUserById,与接口方法名相对应 接受一个 String类型的参数,并返回一个 User 类型的对象
Mybatis 会自动创建一个resultMap,将属性映射到javabean属性上,如果属性名没有精确匹配,可以取别名
-->
<select id="selectUserById" parameterType="String" resultMap="userMap">
SELECT
u.*,
e.id,
e.education_text,
e.education_title,
w.id,
w.work_experience_text,
w.work_experience_title
FROM
`user` u
LEFT JOIN education e ON u.education_id = e.id
LEFT JOIN workexperience w ON u.experience_id = w.id
where u.id = #{id}
</select>
测试代码:
@Test
public void sqlTest() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
UserDao mapper = session.getMapper(UserDao.class);
User user = mapper.selectUserById("0");
System.out.println(user.toString());
}
世界上有10种人,一种是懂二进制的,一种是不懂二进制的。
感谢您的收看,如有哪里写的不对 请留言,谢谢。