第三天Mybatis学习总结——多表开发(一对一)

一 回顾一下sql中的连接查询(已经比较模糊,项目中运用较少)
引用一下别人的博客,回顾一下连接查询
https://blog.csdn.net/ccsuxwz/article/details/70157911
二mybatis一对一映射(学生和身份证)
这里写图片描述
创建Students.java和Card.java

public class Card {
    private Integer id;
    private String num;
    private Student student;
    public Card(){}
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    public Student getStudent() {
        return student;
    }
    public void setStudent(Student student) {
        this.student = student;
    }
}
public class Student {
    private Integer id;
    private String name;
    private Card card;
    public Student(){}
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Card getCard() {
        return card;
    }
    public void setCard(Card card) {
        this.card = card;
    }
}

创建StudentMapper.xml和CardMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace属性是名称空间  必须唯一\ -->
<mapper namespace="studentNamespace">       
    <!-- 当实体属性和表字段名不相同的时候, 必须书写以下代码-->
    <resultMap type="onebyone.Student" id="studentMap">
        <id  property="id" column="sid"/>
        <result property="name" column="sname" />
        <!-- 引入CardMapper.xml中的映射信息 
            property 表示Student类的关联属性
            resultMap表示引入CardMapper.xml文件的映射类型  格式:名称空间+id
        -->
        <association property="card" resultMap="cardNamesapce.cardMap"></association>
    </resultMap>
    <!-- 根据id查询学生信息  -->
    <select id="findStudentById" parameterType="int" resultMap="studentMap">
        select s.sid,s.sname,c.cid,c.cnum
        from students s inner join cards c
        where s.scid = c.cid 
        and s.sid = #{id}
    </select>
    <!-- 根据name查询学生信息 -->
    <select id="findStudentByName" parameterType="string" resultMap="studentMap">
        select s.sname,c.cnum
        from students s inner join cards c
        where s.scid = c.cid 
        and s.sname = #{name}
    </select>
</mapper>
CardMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cardNamesapce">
    <resultMap type="onebyone.Card" id="cardMap">
        <id  property="id" column="cid"/>
        <result property="num" column="cnum" />
    </resultMap>
</mapper>

测试类:

public class StudentCardDao {
    /**
     * 查询  1号学生的信息和身份证 
     * @param id表示学生的编号
     * 
     */
    public Student findStudentById(int id) {
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisUtil.getSqlSession();
            return sqlSession.selectOne("studentNamespace.findStudentById", id);
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            MybatisUtil.closeSqlSession();
        }
        return null;
    }
    /**
     * 查询哈哈 学生的信息和身份证
     * @param name 表示学生的姓名
     */
    public Student findStudentByName(String name) {
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisUtil.getSqlSession();
            return sqlSession.selectOne("studentNamespace.findStudentByName", name);
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            MybatisUtil.closeSqlSession();
        }
        return null;
    }



    public static void main(String[] args) {
        StudentCardDao dao = new StudentCardDao();
//      Student student = dao.findStudentById(1);
        Student student = dao.findStudentByName("张三");
        System.out.println(student.getName()+"的身份证号码为:"+student.getCard().getNum());

    }

猜你喜欢

转载自blog.csdn.net/qq_39411208/article/details/81409699