第5关:MyBatis一对一关联查询

任务描述

通过前面几关的学习,我们已经已经了解了MyBatis中最常用的部分。可是基本的增删改查操作虽然已经满足了我们大部分要求,但是我们在实际应用中还会遇到关联查询的问题。接下来将带领大家学习这一内容。

本关任务:根据人的id查询出查询这个公民的身份号码及其所有信息。

相关知识

为了完成本关任务,你需要掌握:

  1. 高级结果映射;
  2. 用注解的方式一对一查询。

 mm/src/main/resources/mybatis_config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--********** Begin **********-->
<!--给pojo包起别名-->
<typeAliases>
<package name="com.test.pojo"/>
</typeAliases>
<!--配置数据库连接环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123123"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件(mapper接口文件) -->
<mappers>
<mapper class="com.test.mapper.PersonMapper"/>
<mapper class="com.test.mapper.CardMapper"/>
</mappers>
<!--********** End **********-->
</configuration>

mm/src/main/java/com/test/mapper/CardMapper.java

package com.test.mapper;
import com.test.pojo.Card;
import org.apache.ibatis.annotations.Select;
public interface CardMapper {
/*********** Begin **********/
//查询
@Select("select * from card where pid = #{pid} ")
public Card getCard(int pid);
/*********** End **********/
}

mm/src/main/java/com/test/mapper/PersonMapper.java

package com.test.mapper;
import com.test.pojo.Person;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;
public interface PersonMapper {
/*********** Begin **********/
//关联查询
@Select("select * from person where pid = #{pid}")
@Results({
@Result(id=true,column="pid",property="pid"),
@Result(column="pName",property="pName"),
@Result(column="age",property="age"),
@Result(column="pid",property="card",one=@One(select="com.test.mapper.CardMapper.getCard",fetchType= FetchType.EAGER))
})
public Person getPerson(int pid);
/*********** End **********/
}

mm/src/main/java/com/test/test/PersonTest.java

package com.test.test;
import com.test.mapper.PersonMapper;
import com.test.pojo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
public class PersonTest {
/*********** Begin **********/
private static SqlSessionFactory sqlSessionFactory;
//初始化
public static void init() {
try {
//通过Resources工具类将mybatis_config.xml配置文件读入Reader.
Reader reader = Resources.getResourceAsReader("mybatis_config.xml");
//通过SqlSessionFactoryBuilder建造类使用Reader创建SqlSessionFactory工厂对象。在创建SqlSessionFactory对象的过程中,首先解析mybatis_config.xml
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
/*********** End **********/
//查询数据
public static Person selectCard(int pid) {
/*********** Begin **********/
SqlSession sqlSession = null;
Person person = null;
init();
try {
//通过SqlSessionFactory工厂对象获取sqlSession。
sqlSession = sqlSessionFactory.openSession();
//通过mapper接口类的方法查找到mapper.xml中id="addUser"的方法执行SQL。
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
person = mapper.getPerson(pid);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
//最后一定不要忘记关闭sqlSession。
sqlSession.close();
}
}
return person;
/*********** End **********/
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值