IDCard
package domain;
public class IDCard {
//自有属性
private String cardid;
private String address;
//为了根据身份证号查询 身份证和人的信息
//多添加一个关联属性
private Person person;
public IDCard() {}
public IDCard(String cardid, String address, Person person) {
this.cardid = cardid;
this.address = address;
this.person = person;
}
@Override
public String toString() {
return "IDCard{" +
"cardid='" + cardid + '\'' +
", address='" + address + '\'' +
", person=" + person +
'}';
}
public String getCardid() {
return cardid;
}
public void setCardid(String cardid) {
this.cardid = cardid;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
Person
package domain;
public class Person {
//自有属性
private Integer pid;
private String pname;
//关联属性 身份证号(身份证对象中的一个属性)
private IDCard idcard;
public Person() {}
public Person(Integer pid, String pname, IDCard idcard) {
this.pid = pid;
this.pname = pname;
this.idcard = idcard;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", idcard=" + idcard +
'}';
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public IDCard getIdcard() {
return idcard;
}
public void setIdcard(IDCard idcard) {
this.idcard = idcard;
}
}
IDCardDao
public class IDCardDao {
private SqlSession sqlSession = MyUtil.getSqlSession(true);
//根据身份证号 查询人+身份证信息
public IDCard selectOne(String cardid){
return sqlSession.selectOne("selectOne",cardid);
}
//全部信息查询
public List<IDCard> selectAll(){
return sqlSession.selectList("selectAll");
}
}
PersonDao
package dao;
import domain.Person;
import org.apache.ibatis.session.SqlSession;
import util.MyUtil;
import java.util.List;
public class PersonDao {
private SqlSession sqlSession = MyUtil.getSqlSession(true);
//设计一个方法 根据一个人的pid 查询人+身份证的所有信息
public Person selectOne(Integer pid){
return sqlSession.selectOne("selectOne",pid);
}
//设计一个方法 全部人员信息+人对应自己的身份证信息
public List<Person> selectAll(){
return sqlSession.selectList("selectAll");
}
}
configuration.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>
<settings>
<!--开启延迟加载的机制 关联的对象可以延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--aggressive 攻击性 侵略性 关闭对象的侵略性 不用就不需要加载 用到了关联对象的任意属性 就加载-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/testmybatis?useSSL=false"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
<mappers>
<!--<mapper resource="mapper/PersonMapper.xml"></mapper>-->
<mapper resource="mapper/IDCardMapper.xml"></mapper>
</mappers>
</configuration>
PersonMapper.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="dao.PersonDao">
<!--方案一 采用两次查询执行-->
<!--自己定义一个赋值的规则 id是整个赋值规则的名字 -->
<!--<resultMap id="selectPerson" type="domain.Person">-->
<!--<id property="pid" column="pid"></id>-->
<!--<result property="pname" column="pname"></result>-->
<!--<association property="idcard" javaType="domain.IDCard" select="selectIDCardForPerson" column="cardid"></association>-->
<!--</resultMap>-->
<!--<!–这个select标签是为了Person对象中的那个idcard属性再次查询用的–>-->
<!--<select id="selectIDCardForPerson" resultType="domain.IDCard">-->
<!--select * from idcard where cardid = #{cardid}-->
<!--</select>-->
<!--方案二 以前学过的联合查询语句 等值连接 内链接 外连接-->
<resultMap id="selectPerson" type="domain.Person">
<id property="pid" column="pid"></id>
<result property="pname" column="pname"></result>
<association property="idcard" javaType="domain.IDCard">
<id property="cardid" column="cardid"></id>
<result property="address" column="address"></result>
</association>
</resultMap>
<!--=======================================================================-->
<!--dao调用的是下面这个标签对应的语句-->
<select id="selectOne" resultMap="selectPerson">
<!--方案二写法-->
select p.pid,p.pname,i.cardid,i.address from person p inner join idcard i on p.cardid = i.cardid where p.pid = #{pid}
<!--方案一写法-->
-- select pid,pname,cardid from person where pid = #{pid}
</select>
<select id="selectAll" resultMap="selectPerson">
<!--方案二写法-->
select p.pid,p.pname,i.cardid,i.address from person p inner join idcard i on p.cardid = i.cardid
<!--方案一写法-->
-- select pid,pname,cardid from person
</select>
</mapper>
IDCardMapper.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="dao.IDCardDao">
<!--方案一 两次查询-->
<!--<resultMap id="selectIDCard" type="domain.IDCard">-->
<!--<id property="cardid" column="cardid"></id>-->
<!--<result property="address" column="address"></result>-->
<!--<association property="person" javaType="domain.Person" select="selectPerson" column="cardid"></association>-->
<!--</resultMap>-->
<!--<select id="selectPerson" resultType="domain.Person">-->
<!--select * from person where cardid = #{cardid}-->
<!--</select>-->
<!--方案二 联合-->
<resultMap id="selectIDCard" type="domain.IDCard">
<id property="cardid" column="cardid"></id>
<result property="address" column="address"></result>
<association property="person" javaType="domain.Person">
<id property="pid" column="pid"></id>
<result property="pname" column="pname"></result>
</association>
</resultMap>
<!--=============================================================-->
<select id="selectOne" resultMap="selectIDCard">
<!--方案一写法-->
-- select * from idcard where cardid = #{cardid}
<!--方案二写法-->
select p.pid,p.pname,i.cardid,i.address from person p inner join idcard i on p.cardid = i.cardid where i.cardid = #{cardid}
</select>
<select id="selectAll" resultMap="selectIDCard">
<!--方案一写法-->
-- select * from idcard
<!--方案二写法-->
select p.pid,p.pname,i.cardid,i.address from person p inner join idcard i on p.cardid = i.cardid
</select>
</mapper>
网友评论