设计一个方法,根据pid查询这个人两个表格的所有信息
dao.PersonDao
package dao;
import domain.Person;
import org.apache.ibatis.session.SqlSession;
import util.MySqlSessionFactory;
public class PersonDao {
private SqlSession sqlSession=MySqlSessionFactory.getSqlSession(true);
//设计一个方法,根据pid查询这个人两个表格的所有信息
public Person selectOne(Integer pid){
return sqlSession.selectOne("selectOne",pid);
}
}
domain.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;
}
}
domain.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;
}
}
mapper.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">
<select id="selectOne" resultMap="selectPerson">
select pid,pname,cardid from person where pid = #{pid}
</select>
<!--自定义一个赋值的规则-->
<resultMap id="selectPerson" type="domain.Person">
<!--id一般用于主键列,result是普通列-->
<id property="pid" column="pid"></id>
<result property="pname" column="pname"></result>
<association property="idcard" javaType="domain.IDCard" select="selectIdCardForPerson" column="cardid"></association>
</resultMap>
<!--为了Person对象中的idcard属性再次查询用-->
<select id="selectIdCardForPerson" resultType="domain.IDCard">
select * from idcard where cardid = #{cardid}
</select>
</mapper>
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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/testmybatis?useSSL=false&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="cy414ljh212,,,"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/PersonMapper.xml"></mapper>
</mappers>
</configuration>
service.PersonService
package service;
import dao.PersonDao;
import domain.Person;
public class PersonService {
private PersonDao dao = new PersonDao();
public Person selectOne(Integer pid){
return dao.selectOne(pid);
}
}
test.TestMain
package test;
import service.PersonService;
public class TestMain {
public static void main(String[] args) {
PersonService personService=new PersonService();
System.out.println(personService.selectOne(1));
}
}
util.MySqlSessionFactory
package util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class MySqlSessionFactory {
//设计一个方法,获取SqlSession对象
private static SqlSessionFactory factory;
private static SqlSession sqlSession;
static {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml"));
}
//设计一个方法 获取sqlSession对象
public static SqlSession getSqlSession(){
return getSqlSession(false);
}
public static SqlSession getSqlSession(boolean flag){
return factory.openSession(flag);
}
}