#千鋒逆戰(zhàn)# Mybatis多表聯(lián)合

Mybatis多表聯(lián)合查找

  1. 加入依賴

    • 加入mybatis核心依賴,junit測試,mysql依賴

    • <dependencies>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
          </dependency>
      
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.47</version>
          </dependency>
      
          <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.4.6</version>
          </dependency>
      
  2. XML配置

    • resources目錄下新建Mybatis.xml文件

    • 導(dǎo)入db.properties資源文件,如下

      driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3307/shop_mybatis
      username=root
      password=970809
      
    • 設(shè)置settings,加入自動日志

    • 設(shè)置typeAliases,設(shè)置別名包,此包下的引用可直接寫類名,忽略大小寫

    • 設(shè)置連接池屬性POOLED

    • 在mappers標(biāo)簽下設(shè)置對應(yīng)的映射文件路徑

    • <?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>
          <properties resource="db.properties"/>
      
          <!--添加日志功能馏予,STDOUT_LOGGING不需要添加第三方j(luò)ar包-->
          <settings>
              <setting name="logImpl" value="STDOUT_LOGGING"/>
          </settings>
          <typeAliases>
              <package name="pojo"/>
          </typeAliases>
      
          <environments default="development">
              <environment id="development">
                  <transactionManager type="JDBC"/>
                  <dataSource type="POOLED">
                      <property name="driver" value="${driver}"/>
                      <property name="url" value="${url}"/>
                      <property name="username" value="${username}"/>
                      <property name="password" value="${password}"/>
                  </dataSource>
              </environment>
          </environments>
      
          
          <mappers>
              <mapper resource="com/mapper/OrderMapper.xml"/>
              <mapper resource="com/mapper/UserMapper.xml"/>
              <mapper resource="com/mapper/DetailMapper.xml"/>
              <mapper resource="com/mapper/ProductMapper.xml"/>
              <mapper resource="com/mapper/TypeMapper.xml"/>
          </mappers>
      </configuration>
      
  3. OrderMapper.xml配置例舉

    • namespace和id組合唯一,可自定義

    • 使用select標(biāo)簽進行查詢操作,其他操作分別為update,insert,delete

    • 使用resultMap進行聯(lián)合查詢

    • resultMap標(biāo)簽下 如果對應(yīng)pojo內(nèi)的屬性名(property)和數(shù)據(jù)庫表中的列名相同,可省略不寫result標(biāo)簽

    • 使用association標(biāo)簽進行對一的表結(jié)構(gòu)聯(lián)合查詢,使用Collection標(biāo)簽進行對多的表結(jié)構(gòu)聯(lián)合查詢

    • <?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="pojo.OrderMapper">
          <select id="getOrderByOid" resultMap="orderMap">
              select * from orders where oid = #{oid}
        </select>
          
          <resultMap id="orderMap" type="Order">
      <!--        <id property="oid" column="oid"/>-->
      <!--        <result column="price" property="price"/>-->
      <!--        <result column="addr" property="addr"/>-->
      <!--        <result column="payType" property="payType"/>-->
      
              <!--對一,select中填寫對應(yīng)的映射文件的namespace.id-->
              <association property="user" column="uid" select="pojo.UserMapper.getUserByUid"/>
      
             <!--對多-->
              <collection property="details" column="did" select="pojo.DetailMapper.getDetailByDid" ofType="pojo.Detail"/>
          </resultMap>
      </mapper>
      
  4. UserMapper.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="pojo.UserMapper">
          <select id="getUserByUid" resultType="User">
          select * from users where uid = #{uid}
        </select>
      
      </mapper>
      
  5. DetailMapper.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="pojo.DetailMapper">
          <select id="getDetailByDid" resultMap="detailMap">
              select * from details where did = #{did}
        </select>
      
      
          <resultMap id="detailMap" type="Detail">
      <!--        <id property="did" column="did"/>-->
      <!--        <result column="count" property="count"/>-->
      
              <association property="product" column="pid" select="pojo.ProductMapper.getProductByPid"/>
          </resultMap>
      
      </mapper>
      
  6. ProductMapper.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="pojo.ProductMapper">
          <select id="getProductByPid" resultMap="productMap">
          select * from products where pid = #{pid}
        </select>
      
          <resultMap id="productMap" type="Product">
      
      <!--        <id property="pid" column="pid"/>-->
      <!--        <result property="name" column="name"/>-->
      <!--        <result property="price" column="price"/>-->
      <!--        <result property="img" column="img"/>-->
      
              <association property="type" column="tid" select="pojo.TypeMapper.getTypeByTid"/>
          </resultMap>
      
      </mapper>
      
  7. TypeMapper.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="pojo.TypeMapper">
          <select id="getTypeByTid" resultType="Type">
          select * from types where tid = #{tid}
        </select>
      
      </mapper>
      
  8. 測試類

    • 使用junit的@Before注解,setUp在所有方法運行前運行

    • import org.apache.ibatis.io.Resources;
      import org.apache.ibatis.session.SqlSession;
      import org.apache.ibatis.session.SqlSessionFactory;
      import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      import org.junit.After;
      import org.junit.Before;
      import org.junit.Test;
      import pojo.Order;
      
      import java.io.IOException;
      
      public class TestOrders {
          private SqlSessionFactory sf = null;
          private SqlSession session = null;
      
          @Before
          public void setUp() {
              try {
                  sf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Mybatis.xml"));
                  session = sf.openSession();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      
          @After
          public void tearDown() {
              if (session != null) {
                  session.close();
                  session = null;
              }
          }
      
          @Test
          public void testGetOrderByOid() {
              Order order = session.selectOne("pojo.OrderMapper.getOrderByOid",1);
              System.out.println(order);
          }
      }
      
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氯夷,一起剝皮案震驚了整個濱河市站叼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吠勘,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件测萎,死亡現(xiàn)場離奇詭異吁讨,居然都是意外死亡,警方通過查閱死者的電腦和手機旱易,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門禁偎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腿堤,“玉大人,你說我怎么就攤上這事届垫。” “怎么了全释?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵装处,是天一觀的道長。 經(jīng)常有香客問我浸船,道長妄迁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任李命,我火速辦了婚禮登淘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘封字。我一直安慰自己黔州,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布阔籽。 她就那樣靜靜地躺著流妻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笆制。 梳的紋絲不亂的頭發(fā)上绅这,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音在辆,去河邊找鬼证薇。 笑死,一個胖子當(dāng)著我的面吹牛匆篓,可吹牛的內(nèi)容都是我干的浑度。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼鸦概,長吁一口氣:“原來是場噩夢啊……” “哼俺泣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起完残,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤伏钠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谨设,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熟掂,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年扎拣,在試婚紗的時候發(fā)現(xiàn)自己被綠了赴肚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片素跺。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖誉券,靈堂內(nèi)的尸體忽然破棺而出指厌,到底是詐尸還是另有隱情,我是刑警寧澤踊跟,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布踩验,位于F島的核電站,受9級特大地震影響商玫,放射性物質(zhì)發(fā)生泄漏箕憾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一拳昌、第九天 我趴在偏房一處隱蔽的房頂上張望袭异。 院中可真熱鬧,春花似錦炬藤、人聲如沸御铃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畅买。三九已至,卻和暖如春细睡,著一層夾襖步出監(jiān)牢的瞬間谷羞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工溜徙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留湃缎,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓蠢壹,卻偏偏與公主長得像嗓违,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子图贸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在學(xué)習(xí)MyBatis3的過程中蹂季,文檔上面一直在強調(diào)一個id的東西!在做這個實驗的時候疏日,也因為沒有理解清楚id含義而...
    殺小賊閱讀 980評論 0 6
  • 一沟优、配置maven的pom.xml加載jar包 為了后續(xù)開發(fā)的方便涕滋,將SSM框架所有需要的jar包一并加載進來 p...
    docki閱讀 2,238評論 1 23
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL挠阁、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,452評論 0 4
  • 一宾肺、結(jié)果映射是什么? ResultMap 1.使用場景一 當(dāng)數(shù)據(jù)庫的列名和實體類的屬性名不一致時,無法直接通過re...
    huishao閱讀 1,033評論 3 3
  • 1溯饵、Mybatis支持普通SQL查詢、存儲一級高級映射的優(yōu)秀持久層框架 2锨用、Mybatis可以使用簡單的XML或注...
    JHMichael閱讀 349評論 0 1