国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MyBatis一對多和多對一
       在學(xué)習(xí)MyBatis3的過程中,文檔上面一直在強(qiáng)調(diào)一個id的東西!在做這個實(shí)驗(yàn)的時(shí)候,也因?yàn)闆]有理解清楚id含義而導(dǎo)致一對多的“多”中也只有一條數(shù)據(jù)。id和result的唯一不同是id表示的結(jié)果將是當(dāng)比較對象實(shí)例時(shí)用到的標(biāo)識屬性。這幫助來改進(jìn)整體表現(xiàn),特別是緩存和嵌入結(jié)果映射。所以不同數(shù)據(jù)的id應(yīng)該唯一區(qū)別,不然導(dǎo)致數(shù)據(jù)結(jié)果集只有一條數(shù)據(jù)。

一、表


二、實(shí)體

1.person

  1. package com.kerwin.mybatis.pojo;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Person {  
  6.   
  7.     private int id;  
  8.     private String name;  
  9.     private List<Orders> orderList;  
  10.   
  11.     public int getId() {  
  12.         return id;  
  13.     }  
  14.   
  15.     public void setId(int id) {  
  16.         this.id = id;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public List<Orders> getOrderList() {  
  28.         return orderList;  
  29.     }  
  30.   
  31.     public void setOrderList(List<Orders> orderList) {  
  32.         this.orderList = orderList;  
  33.     }  
  34.   
  35.     @Override  
  36.     public String toString() {  
  37.         return "Person [id=" + id + ", name=" + name + "]";  
  38.     }  
  39.   
  40.     public Person() {  
  41.         super();  
  42.         // TODO Auto-generated constructor stub  
  43.     }  
  44.   
  45.     public Person(int id, String name, List<Orders> orderList) {  
  46.         super();  
  47.         this.id = id;  
  48.         this.name = name;  
  49.         this.orderList = orderList;  
  50.     }  
  51.   
  52. }  

2.order


  1. package com.kerwin.mybatis.pojo;  
  2.   
  3. public class Orders {  
  4.     private int id;  
  5.     private double price;  
  6.     private Person person;  
  7.       
  8.       
  9.       
  10.     public Person getPerson() {  
  11.         return person;  
  12.     }  
  13.   
  14.     public void setPerson(Person person) {  
  15.         this.person = person;  
  16.     }  
  17.   
  18.     public int getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(int id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.   
  27.   
  28.     public double getPrice() {  
  29.         return price;  
  30.     }  
  31.   
  32.     public void setPrice(double price) {  
  33.         this.price = price;  
  34.     }  
  35.   
  36.   
  37.       
  38.   
  39.     @Override  
  40.     public String toString() {  
  41.         return "Orders [id=" + id + ", price=" + price + "]";  
  42.     }  
  43.   
  44.     public Orders() {  
  45.         super();  
  46.         // TODO Auto-generated constructor stub  
  47.     }  
  48.   
  49. }  

三、映射mapper文件

1. PersonMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5.       
  6. <mapper namespace="com.kerwin.mybatis.pojo.Person">  
  7.     <resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">  
  8.         <id column="p_id" property="id"/>  
  9.         <result column="name" property="name"/>  
  10.         <collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">  
  11.             <id column="o_id" property="id"/>  
  12.             <result column="price" property="price"/>  
  13.         </collection>  
  14.           
  15.     </resultMap>  
  16.       
  17.     <select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >  
  18.         select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}  
  19.     </select>  
  20.       
  21.       
  22. </mapper>  

2.     OrdersMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper  
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5.   
  6. <mapper namespace="com.kerwin.mybatis.pojo.Orders">  
  7.     <resultMap type="com.kerwin.mybatis.pojo.Orders" id="OrdersResultMap">  
  8.         <id column="o_id" property="id"/>  
  9.         <result column="price" property="price"/>  
  10.         <association property="person" javaType="com.kerwin.mybatis.pojo.Person">  
  11.             <id column="p_id" property="id"/>  
  12.             <result column="name" property="name"/>  
  13.         </association>  
  14.     </resultMap>  
  15.       
  16.     <select id="selectOrdersFetchPerson" resultMap="OrdersResultMap">  
  17.         select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id}   
  18.     </select>  
  19.   
  20. </mapper>  

3.sqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3.   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4.   "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.   
  7. <typeAliases>  
  8.     <typeAlias type="com.kerwin.mybatis.pojo.Author" alias="Author"/>  
  9. </typeAliases>  
  10.   <environments default="development">  
  11.     <environment id="development">  
  12.       <transactionManager type="JDBC"/>  
  13.       <dataSource type="POOLED">  
  14.         <property name="driver" value="com.mysql.jdbc.Driver"/>  
  15.         <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>  
  16.         <property name="username" value="root"/>  
  17.         <property name="password" value="root"/>  
  18.       </dataSource>  
  19.     </environment>  
  20.   </environments>  
  21.   <mappers>  
  22.     <mapper resource="com/kerwin/mybatis/pojo/AuthorMapper.xml"/>  
  23.     <mapper resource="com/kerwin/mybatis/pojo/PostMapper.xml"/>  
  24.     <mapper resource="com/kerwin/mybatis/pojo/PersonMapper.xml"/>  
  25.     <mapper resource="com/kerwin/mybatis/pojo/OrdersMapper.xml"/>  
  26.   </mappers>  
  27. </configuration>  

四。測試類

  1. /** 
  2.  *  
  3.  */  
  4. package com.kerwin.mybatis.test;  
  5.   
  6. import java.io.InputStream;  
  7.   
  8. import org.apache.ibatis.io.Resources;  
  9. import org.apache.ibatis.session.SqlSession;  
  10. import org.apache.ibatis.session.SqlSessionFactory;  
  11. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  12. import org.junit.BeforeClass;  
  13. import org.junit.Test;  
  14.   
  15. import com.kerwin.mybatis.pojo.Orders;  
  16. import com.kerwin.mybatis.pojo.Person;  
  17.   
  18. /** 
  19.  * @author Administrator 
  20.  *  
  21.  */  
  22. public class PersonAndOrderTest {  
  23.   
  24.     private static SqlSessionFactory sessionFactory;  
  25.       
  26.     /** 
  27.      * @throws java.lang.Exception 
  28.      */  
  29.     @BeforeClass  
  30.     public static void setUpBeforeClass() throws Exception {  
  31.         SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();  
  32.         InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");  
  33.         sessionFactory = factoryBuilder.build(inputStream);  
  34.   
  35.     }  
  36.       
  37.     //一對多,查詢person(一)級聯(lián)查詢訂單order(多)  
  38.     @Test  
  39.     public void testSelectPersonFetchOrder() throws Exception {  
  40.         SqlSession session = sessionFactory.openSession();  
  41.         Person person = session.selectOne("com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder", 1);  
  42.         System.out.println(person);  
  43.         System.out.println(person.getOrderList().size());  
  44.         for(Orders orders : person.getOrderList()){  
  45.             System.out.println(orders);  
  46.         }  
  47.         session.close();  
  48.     }  
  49.       
  50.     //多對一,查詢訂單order(多)級聯(lián)查詢person(一)  
  51.     @Test  
  52.     public void testSelectOrdersFetchPerson() throws Exception{  
  53.         SqlSession session = sessionFactory.openSession();  
  54.         Orders orders = session.selectOne("com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson", 1);  
  55.         System.out.println(orders);  
  56.         System.out.println(orders.getPerson());  
  57.         session.close();  
  58.     }  
  59.       
  60. }  

五、測試結(jié)果

1.一對多,查詢person(一)級聯(lián)查詢訂單order(多)


2.多對一,查詢訂單order(多)級聯(lián)查詢person(一)


注意:兩張表中的主鍵id字段名要唯一,例如不能都寫id,不然的話,在一對多查詢的時(shí)候就會出現(xiàn):級聯(lián)出來的訂單項(xiàng)只有一條記錄。我之前就是將兩張表的主鍵id字段名都寫為id,導(dǎo)致測試結(jié)果級聯(lián)出來的多一直只有一條數(shù)據(jù),具體如下:



本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
mybatis 一對多,多對一配置
02:MyBatisCRDU及配置解析
用 Mapper 接口的方式操作數(shù)據(jù)庫 CRUD
MyBatis試用
mybatis知識點(diǎn)總結(jié)
第一個MyBatis程序(博客初寫者)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服