mybatis关联查询
2016-03-04 16:36
435 查看
场景:一个人有多个手机号,一个手机号对应一个人
先上个配置文件
再上个对象
上个映射类
最后就是mybatis的配置了
测试程序如下
补上一个mybatis封装类
CREATE TABLE test.mobile ( mid INT NOT NULL auto_increment, tel VARCHAR (50), pid INT, PRIMARY KEY (mid) ); CREATE TABLE test.person ( pid INT NOT NULL auto_increment, name VARCHAR (50), PRIMARY KEY (pid) ); INSERT INTO test.person (name) VALUES ('wjf'); INSERT INTO test.mobile (tel, pid) VALUES ('13564089643', 1); INSERT INTO test.mobile (tel, pid) VALUES ('13511111111', 1);
先上个配置文件
<?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="wjf.dao.MobileMapper"> <resultMap type="wjf.Obj.Mobile" id="resultMap"> <id property="mid" column="mid" /> <result property="tel" column="tel" /> <association property="person" javaType="wjf.Obj.Person" column="pid"> <id property="pid" column="pid" /> <result property="name" column="name" /> </association> </resultMap> <select id="getMobile" parameterType="int" resultMap="resultMap"> select p.pid,p.name ,m.mid ,m.tel from person p ,mobile m where m.pid=p.pid AND m.mid=#{id} </select> <select id="getALLMobile" resultMap="resultMap"> select p.pid,p.name ,m.mid ,m.tel from person p ,mobile m where m.pid=p.pid </select> </mapper>
<?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="wjf.dao.PersonMapper"> <resultMap type="wjf.Obj.Person" id="resultMap"> <id property="pid" column="pid" /> <result property="name" column="name" /> <collection property="mobiles" column="pid" ofType="wjf.Obj.Mobile"> <id property="id" column="mid" /> <result property="tel" column="tel" /> </collection> </resultMap> <select id="getPerson" parameterType="int" resultMap="resultMap"> select p.pid,p.name ,m.mid ,m.tel from person p ,mobile m where m.pid=p.pid AND p.pid=#{id} </select> <select id="getALLPerson" resultMap="resultMap"> select p.pid,p.name ,m.mid ,m.tel from person p ,mobile m where m.pid=p.pid </select> </mapper>
再上个对象
package wjf.Obj; import java.util.List; public class Person { private int pid; private String name; private List<Mobile> mobiles; public List<Mobile> getMobiles() { return mobiles; } public void setMobiles(List<Mobile> mobiles) { this.mobiles = mobiles; } public int getId() { return pid; } public void setId(int id) { this.pid = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [id=" + pid + ", name=" + name + "]"; } }
package wjf.Obj; public class Mobile { private int mid; private String tel; private Person person; /** * @return the mid */ public int getMid() { return mid; } /** * @param mid the mid to set */ public void setMid(int mid) { this.mid = mid; } /** * @return the person */ public Person getPerson() { return person; } /** * @param person the person to set */ public void setPerson(Person person) { this.person = person; } public int getId() { return mid; } public void setId(int id) { this.mid = id; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } @Override public String toString() { return "Mobile [id=" + mid + ", tel=" + tel + "]"; } }
上个映射类
package wjf.dao; import java.util.List; import wjf.Obj.Mobile; public interface MobileMapper { public Mobile getMobile(int id); public List<Mobile> getALLMobile(); }
package wjf.dao; import java.util.List; import wjf.Obj.Person; public interface PersonMapper { public Person getPerson(int id); public List<Person> getALLPerson(); }
最后就是mybatis的配置了
<?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> <typeAliases> <typeAlias alias="UserInfo" type="wjf.orm.UserInfo"/> </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/test" /> <property name="username" value="root" /> <property name="password" value="123" /> </dataSource> </environment> </environments> <mappers> <!-- <mapper resource="wjf/orm/userMapper.xml"/> --> <!-- <mapper resource="wjf/orm/userMapper2.xml"/> --> <mapper resource="wjf/config/MobileMapper.xml"/> <mapper resource="wjf/config/PersonMapper.xml"/> </mappers> </configuration>
测试程序如下
@Test public void testRelation() { SqlSessionFactory sqlSessionFactory = MybatisUtil .getSqlsessionfactory(); SqlSession sqlSession = null; sqlSession = sqlSessionFactory.openSession(); // PersonMapper pmapper = sqlSession.getMapper(PersonMapper.class); // List<Person> plist = pmapper.getALLPerson(); // System.out.println(plist.size()); // Person p = pmapper.getPerson(1); // System.out.println(p.getMobiles().size()); MobileMapper mmapper = sqlSession.getMapper(MobileMapper.class); List<Mobile> pMobile = mmapper.getALLMobile(); System.out.println(pMobile.size()); Mobile m = mmapper.getMobile(1); System.out.println(m.getPerson().getName()); }
补上一个mybatis封装类
package wjf.orm; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; //工具类 public class MybatisUtil { public static SqlSessionFactory sqlSessionFactory() { String resource = "config.xml";// 获取mybatis-cofig.xml配置文件的路径 Reader reader = null;// 创建reader try { reader = Resources.getResourceAsReader(resource);// 获得reader } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } SqlSessionFactory SqlSessionFactory = new SqlSessionFactoryBuilder() .build(reader);// 获得sqlsessionfactory return SqlSessionFactory; } // 获取getter public static SqlSessionFactory getSqlsessionfactory() { return sqlSessionFactory(); } }
相关文章推荐
- 自制操作系统学习心得(一)
- 大话设计模式-模板方法模式
- ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET
- 网络爬虫的实现
- 简单工厂和单例设计模式浅解
- [C++]lambda表达式
- FZU 2092 收集水晶
- AlwaysOn--查看可用性组的首先备份节点
- wap站获取上网用户手机型号的方法 .net的写法
- 10大常见的安全漏洞!你知道吗?
- Web前端面试小记
- 复习篇2016.3.4 16.42复习篇之一(蓝桥杯恶补)
- 加密文件系统eCrypt概述
- 操作系统--处理调度与死锁
- XAlign:用于代码对齐的Xcode插件
- 十、装饰(Decorator)模式 --结构模式(Structural Pattern)
- Java大数练习
- Lua中的面向对象[2]:使用指针
- Synchronized和ThreadLocal使用的比较
- android制作.9png图片