国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - mybatis關系映射之一對多和多對一

mybatis關系映射之一對多和多對一

2021-07-11 18:09muzidigbig Java教程

今天小編就為大家分享一篇關于mybatis關系映射之一對多和多對一,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

本實例使用用戶和訂單的例子做說明: 一個用戶可以有多個訂單, 一個訂單只對應一個用戶。(其中應用到注釋)

1.代碼的結構

mybatis關系映射之一對多和多對一

2. 建表語句:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
create database test; 
  use test;
  create table person(
   personid varchar(36) primary key,
   personname varchar(64),
   personaddress varchar(128),
   persontel varchar(11)
  );
  create table orders(
   orderid varchar(36) primary key,
   ordernumber varchar(20),
   orderprice int,
   pid varchar(36)
  );
insert into person values('1', '木子', '湖北', '110');
insert into person values('2', '木子大大', '武漢', '120');
insert into person values('1', '木子苗苗', '天門', '119');
  insert into orders values('1', '001', 100, '1');
  insert into orders values('2', '002', 200, '1');
  insert into orders values('3', '003', 300, '2');
  insert into orders values('4', '004', 400, '2');
  insert into orders values('5', '005', 500, '3');
select p.*, o.* from person p join orders o on (p.personid=o.pid) where p.personid = '1' ;
*指顯示所有字段

3. 用戶實體:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.mybatis.domain;
import java.util.list;
import lombok.data;
@data//注釋(person為單方)
public class person {
  private string personid;
  private string personname;
  private string personaddress;
  private string persontel;
  //這個代表多方里面的內容(orders)
  private list<orders> orders;
 @override
 public string tostring() {
 return "person [personid=" + personid + ", personname=" + personname
  + ", personaddress=" + personaddress + ", persontel="
  + persontel + ", orders=" + orders + "]";
 }
}

4. 訂單實體:

?
1
2
3
4
5
6
7
8
9
10
package com.mybatis.domain;
import lombok.data;
@data//(orders為多方)
public class orders {
  private string orderid;
  private string ordernumber;
  private integer orderprice;
  //對象(單方person)與外鍵進行關聯
  private person person;
}

5.寫personmapper.java的接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.mybatis.dao.mapper;
import com.mybatis.domain.orders;
import com.mybatis.domain.person;
import java.util.list;
public interface personmapper {
  int deletebyprimarykey(string personid);
  int insert(person record);
  person selectbyprimarykey(string personid);
  list<person> selectall();
  int updatebyprimarykey(person record);
  //一對多查詢(根據id查詢)
  public list<orders> findpersonandorders(string pid);
  //一對多查詢返回一個對象
  public person selectpersonbyid(string id);
}

6. 一對多實體配置: personmapper.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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="com.mybatis.dao.mapper.personmapper" >
 <resultmap id="personresultmap" type="com.mybatis.domain.person" >
  <id column="personid" property="personid" jdbctype="varchar" />
  <result column="personname" property="personname" jdbctype="varchar" />
  <result column="personaddress" property="personaddress" jdbctype="varchar" />
  <result column="persontel" property="persontel" jdbctype="varchar" />
 <!-- 一對多的關系(這個是關聯集合)這個是orders里面的多方 -->
    <!-- property: 指的是集合屬性的名, oftype:指的是集合中元素的類型的路徑 (實現類)-->
    <collection property="orders" oftype="com.mybatis.domain.orders">
     <!-- id有一個單獨標簽 -->
      <id column="orderid" property="orderid"/>
      <!--column指sql中字段的名字  property指java中對應sql中屬性的名 -->
      <result column="ordernumber" property="ordernumber"/>
      <result column="orderprice" property="orderprice"/>
    </collection>
 </resultmap>
  <!-- 根據id查詢person, 關聯將orders查詢出來(注意放置的位置) -->
  <select id="findpersonandorders" parametertype="string" resultmap="personresultmap">
    select p.*,o.* from person o,orders b where o.personid=#{pid};
  </select>
   <select id="selectpersonbyid" parametertype="string" resultmap="personresultmap">
    select p.*, o.* from person p, orders o where p.personid = o.pid and p.personid = #{id}
  </select>
 </mapper>

7.寫ordersmapper.java的接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.mybatis.dao.mapper;
import com.mybatis.domain.orders;
import java.util.list;
public interface ordersmapper {
  int deletebyprimarykey(string orderid);
  int insert(orders record);
  orders selectbyprimarykey(string orderid);
  list<orders> selectall();
  int updatebyprimarykey(orders record);
  //多查一 根據id
  public orders selectorderbyid(string oid);
  //多查一 根據ordernumber
  public orders selectordernumber(string number);
}

8.多對一實體配置:ordersmapper.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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="com.mybatis.dao.mapper.ordersmapper" >
 <resultmap id="ordersresultmap" type="com.mybatis.domain.orders" >
  <id column="orderid" property="orderid" jdbctype="varchar" />
  <result column="ordernumber" property="ordernumber" jdbctype="varchar" />
  <result column="orderprice" property="orderprice" jdbctype="integer" />
  <!--
  <result column="pid" property="pid" jdbctype="varchar" />
  -->
   <!-- 多對一的關系 這個是person里面的單方 -->
    <!-- property: 指的是屬性的值, javatype:指的是屬性的類型的路徑 (實現類)-->
    <association property="person" javatype="com.mybatis.domain.person">
      <!--注意:在此column和property的值要一樣都為person的屬性 -->
 <id column="personid" property="personid"/>
<result column="personname" property="personname"/>
<result column="personaddress" property="personaddress"/>
<result column="persontel" property="persontel"/>
</association>
 </resultmap>
<!-- 根據id查詢order, 關聯將person查詢出來 -->
<select id="selectorderbyid" parametertype="string" resultmap="ordersresultmap">
 select p.*, o.* from person p, orders o where p.personid = o.pid and o.orderid = #{oid}
</select>
<!-- 根據ordernumber查詢order, 關聯將person查詢出來 -->
<select id="selectordernumber" parametertype="string" resultmap="ordersresultmap">
select p.*, o.* from person p, orders o where p.personid = o.pid and o.orderid = #{number}
 </select>
</mapper>

9.其他配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
db.properties配置(sql語句的基本鏈接)
db.driver=com.mysql.jdbc.driver
db.url=jdbc:mysql://localhost:3306/wang1?useunicode=true&characterencoding=utf8
db.username=root
db.password=123456
   log4j.properties配置(注釋)
# global logging configuration
log4j.rootlogger=debug, stdout
# console output...
log4j.appender.stdout=org.apache.log4j.consoleappender
log4j.appender.stdout.layout=org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionpattern=%5p [%t] - %m%n
  mybatis.xml(逆向生成domain、dao層)
<?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>
<!-- mybatis核心配置文件 -->
 <!-- 加載java的配置文件或者聲明屬性信息 -->
 <properties resource="db.properties">
 </properties>
 <!-- alias別名 -->
 <typealiases>  <!--這里需要修改 domain層的路徑-->
 <typealias type="com.mybatis.domain.person" alias="person" />
 <typealias type="com.mybatis.domain.orders" alias="orders" />
 </typealiases>
 <!-- 配置mybatis的環境信息,與spring整合,該信息由spring來管理
 如果說我們需要連接數據庫,那么必須在mybatis中配置環境 運行環境
 -->
 <environments default="development">
 <environment id="development">
  <!-- 配置jdbc事務控制,由mybatis進行管理 -->
  <transactionmanager type="jdbc"></transactionmanager>
  <!-- 配置數據源,采用mybatis連接池 -->
  <datasource type="pooled">
  <property name="driver" value="${db.driver}" />
  <property name="url" value="${db.url}" />
  <property name="username" value="${db.username}" />
  <property name="password" value="${db.password}" />
  </datasource>
 </environment>
 </environments>
 <!-- 加載映射文件(注意反\)-->
 <mappers>  <!--這里需要修改 dao層的路徑-->
 <mapper resource="com\mybatis\dao\mapper\personmapper.xml"/>
 <mapper resource="com\mybatis\dao\mapper\ordersmapper.xml"/>
 </mappers>
</configuration>
  generatorconfig.xml配置(對mysql進行操作)下面標紅部分根據自己建立的進行修改
<?xml version="1.0" encoding="utf-8"?>
<!doctype generatorconfiguration
 public "-//mybatis.org//dtd mybatis generator configuration 1.0//en"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 配置生成器 -->
<generatorconfiguration>  d盤中要有此包mysql-connector-java-5.1.7-bin.jar
<classpathentry location="d:\mysql-connector-java-5.1.7-bin.jar" />
 <context id="mysql" defaultmodeltype="hierarchical" targetruntime="mybatis3simple">
 <!-- 自動識別數據庫關鍵字,默認false,如果設置為true,根據sqlreservedwords中定義的關鍵字列表;
         一般保留默認值,遇到數據庫關鍵字(java關鍵字),使用columnoverride覆蓋 -->
 <property name="autodelimitkeywords" value="false" />
 <!-- 生成的java文件的編碼 -->
 <property name="javafileencoding" value="utf-8" />
 <!-- beginningdelimiter和endingdelimiter:指明數據庫的用于標記數據庫對象名的符號,比如oracle就是雙引號,mysql默認是`反引號; -->
 <property name="beginningdelimiter" value="`" />
 <property name="endingdelimiter" value="`" />
 <!-- 注釋生成器 -->
 <commentgenerator>
  <property name="suppressdate" value="true"/>
  <property name="suppressallcomments" value="true" />
 </commentgenerator>
 <!-- 必須要有的,使用這個配置鏈接數據庫 @todo:是否可以擴展 -->
 <jdbcconnection driverclass="com.mysql.jdbc.driver"
  connectionurl="jdbc:mysql://localhost:3306/wang1" userid="root" password="123456">
  <!-- 這里面可以設置property屬性,每一個property屬性都設置到配置的driver上 -->
 </jdbcconnection>
 <!-- java模型創建器,是必須要的元素 負責:1,key類(見context的defaultmodeltype);2,java類;3,查詢類
  targetpackage:生成的類要放的包,真實的包受enablesubpackages屬性控制;
         targetproject:目標項目,指定一個存在的目錄下,生成的內容會放到指定目錄中,如果目錄不存在,mbg不會自動建目錄 -->
 <javamodelgenerator targetpackage="com.mybatis.domain" targetproject="mybatis03/src">
  <!-- for mybatis3/mybatis3simple 自動為每一個生成的類創建一個構造方法,構造方法包含了所有的field;而不是使用setter; -->
  <property name="constructorbased" value="false" />
  <!-- for mybatis3 / mybatis3simple 是否創建一個不可變的類,如果為true, 那么mbg會創建一個沒有setter方法的類,
          取而代之的是類似constructorbased的類 -->
  <property name="immutable" value="false" />
 </javamodelgenerator>
 <!-- 生成sql map的xml文件生成器, 注意,在mybatis3之后,我們可以使用mapper.xml文件+mapper接口(或者不用mapper接口),
  或者只使用mapper接口+annotation,所以,如果 javaclientgenerator配置中配置了需要生成xml的話,這個元素就必須配置
  targetpackage/targetproject:同javamodelgenerator -->
 <sqlmapgenerator targetpackage="com.mybatis.dao.mapper" targetproject="mybatis03/src">
  <!-- 在targetpackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認為false -->
  <property name="enablesubpackages" value="true" />
 </sqlmapgenerator>
   <!-- 對于mybatis來說,即生成mapper接口,注意,如果沒有配置該元素,那么默認不會生成mapper接口 targetpackage/targetproject:同javamodelgenerator
  type:選擇怎么生成mapper接口(在mybatis3/mybatis3simple下):
   1,annotatedmapper:會生成使用mapper接口+annotation的方式創建(sql生成在annotation中),不會生成對應的xml;
  2,mixedmapper:使用混合配置,會生成mapper接口,并適當添加合適的annotation,但是xml會生成在xml中;
  3,xmlmapper:會生成mapper接口,接口完全依賴xml;
  注意,如果context是mybatis3simple:只支持annotatedmapper和xmlmapper -->
 <javaclientgenerator targetpackage="com.mybatis.dao.mapper" type="xmlmapper" targetproject="mybatis03/src">
  <!-- 在targetpackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認為false -->
  <property name="enablesubpackages" value="true" />
  <!-- 可以為所有生成的接口添加一個父接口,但是mbg只負責生成,不負責檢查 <property name="rootinterface"
  value=""/> -->
 </javaclientgenerator>
            <!--逆向生成的文件-->
 <table tablename="person" delimitidentifiers="true">
<!-- 參考 javamodelgenerator 的 constructorbased屬性 -->
<property name="constructorbased" value="false" />
<generatedkey column="id" sqlstatement="jdbc"/>
</table>
<table tablename="orders" delimitidentifiers="true">
<!-- 參考 javamodelgenerator 的 constructorbased屬性 -->
<property name="constructorbased" value="false" />
<generatedkey column="id" sqlstatement="jdbc"/>
</table>
</context>
</generatorconfiguration>

10.測試文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.mybatis.test;
import java.io.inputstream;
import java.text.parseexception;
import java.text.simpledateformat;
import java.util.date;
import java.util.iterator;
import java.util.list;
import lombok.data;
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.before;
import org.junit.test;
import com.mybatis.dao.mapper.ordersmapper;
import com.mybatis.dao.mapper.personmapper;
import com.mybatis.domain.orders;
import com.mybatis.domain.person;
public class teststudentmapper {
 sqlsessionfactory sessionfactory = null;
 // 這方法之前
 @before
 public void setup() throws exception {
 string resource = "mybatis.xml";
 // 這個是加載配置文件
 inputstream inputstream = resources.getresourceasstream(resource);
 // 得到會話工廠
 sessionfactory = new sqlsessionfactorybuilder().build(inputstream);
 }
 //查詢一對多 根據這個person里面的id號就能查詢出這個用戶有多少個訂單記錄
// @test
 public void testselectpersonbyid(){
 sqlsession sq = sessionfactory.opensession();
 // 得到dao層的實現類
 personmapper u = sq.getmapper(personmapper.class);
 person person = u.selectpersonbyid("2");
 system.out.println(person);
 }
 //多對一 根據多對一id進行查詢
// @test//多對一關聯查詢
   public void testselectorderbyid(){
   sqlsession sq = sessionfactory.opensession();
  // 得到dao層的實現類
   ordersmapper u = sq.getmapper(ordersmapper.class);
  orders od = u.selectorderbyid( "2");
  system.out.println(od.getperson().getpersonname());
  system.out.println(od.getperson().getpersonaddress());
   }
  @test//多對一關聯查詢
   public void testselectordernumber(){
   sqlsession sq = sessionfactory.opensession();
  // 得到dao層的實現類
   ordersmapper u = sq.getmapper(ordersmapper.class);
  orders od = u.selectordernumber("001");
  system.out.println(od.getperson().getpersonname());
  system.out.println(od.getperson().getpersonaddress());
   }
}

如有問題請多多指教!希望給您帶來幫助!祝您生活愉快。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

原文鏈接:https://blog.csdn.net/muzidigbig/article/details/78551132

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: av免费观看网站 | 精品久久久久久久 | 福利在线看 | 99精品视频一区二区三区 | 免费污网址 | 午夜视频在线观看视频 | 久久久毛片| 亚洲国产精品福利 | 一区二区三区高清 | 亚洲一区二区免费看 | 亚洲精品第一页 | 欧美日韩高清在线 | 色九色 | 亚洲福利精品视频 | 亚洲一区在线播放 | 久久久久香蕉视频 | 国产色 | 在线观看视频91 | 亚洲综合视频在线观看 | 无码一区二区三区视频 | 色综合88 | 亚洲国产精品激情在线观看 | 成人毛片在线观看 | 久久99国产精品久久99大师 | 精品96久久久久久中文字幕无 | 亚洲视频一区 | 一级视频免费观看 | 另类视频区 | 精品免费久久久久久久苍 | 日韩福利二区 | 久久午夜精品 | 午夜精品影院 | 午夜精品视频 | a视频在线| 一级片免费在线 | 日韩精品无码一区二区三区 | 中文字幕久久精品 | 一区二区免费在线观看 | 国产精品美女久久久免费 | 日韩免费一级 | 中文字幕亚洲综合久久久软件 |