一 回顾一下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());
}