ご注文商品のモデル解析
データ解析モデルの思考のための
データの各テーブルの内容を知るために1)
各テーブルの内容のプロセスのサブモジュールは、あなたの学習システム、需要関数と同等の、知っていた
2)各テーブルの重要なフィールドが設定されている
非空で、外部キーをフィールド
3)データベース・レベル、テーブルとテーブルの間の外部キー関係の関係
4)テーブルとテーブルの間のビジネス関係
テーブルとテーブルの間のビジネス関係の分析では、ビジネスセンスに基づくものでなければなりません
データモデル分析
ユーザテーブルユーザーは、購入商品にユーザー情報を記録する
ID:自動インクリメントの主キー
、ユーザーが作成した注文の注文フォーム注文レコード
番号:注文番号
USER_IDを:外部キーのユーザーID
注文の詳細は、注文の詳細を記録orderall
外のORDER_IDをキーオーダーIDは、
製品ID items_id
商品情報テーブルに記録されている商品アイテムを
私たちは、分析までのビジネスセンスを基準に、テーブルとテーブルの間のビジネス関係を確立する必要がある
データ・テーブル・レベル間のビジネス関係の間の関係を分析すること
ユーザーと注文の
ユーザー- >受注、ユーザが複数の注文を作成することができます
注文を- >ユーザーの順序は、ユーザーによって作成することができます
注文とorderall
注文- > orderall注文はorderall、レコード内の各項目についての情報を購入し、より多くの商品を購入するためにあるため、複数の注文の詳細を含むことができ、多くの
1階詳細を超える戻るだけ順番に含めることができます
orderall - >アイテム注文内容、商品に対応する情報のみ
項目は- >商品は注文の複数を含んでいてもよいです
データベースレベルの分析では、テーブル・ビジネス関係の間には関係がない場合
注文とアイテムの関係はorderallによって推奨することができます
1人のクエリ
ニーズ:ご注文情報、クエリ作成に関連した注文情報をチェック
それぞれresultTypeと実装と実現このresultMapを
SQL文
Ordersテーブル:クエリを決定するために、メインテーブル
ユーザテーブル:相関テーブルクエリを決定するために
クエリに関連付けられている外部接続または使用を接続する
注文テーブルは、外部キー(USER_ID)を有しているので、
外部キーテーブルを介しては、ユーザクエリをユーザレコードを照会することができ、接続を備えていてもよいです
SELECT
orders.*,
user.username,
userss.address
FROM
orders,
user
WHERE orders.user_id = user.id
POJOの作成
POJOにSQL結果セットマッピングのトップ、POJOは、クエリの列名のすべてを含める必要があります
元order.javaは、新しいPOJOを作成する必要があり、すべてのフィールドをマップしない
継承クエリフィールド複数のクラスを含め、POJOを作成します
package cn.mmz.mybatis.pojo;
/**
* @Classname 订单的拓展类
* @Description TODO
* @Date 2020/1/5 12:13
* @Created by mmz
*/
//通过此类映射订单和用户查询的结果,让此类继承包括字段较多的pojo类
public class OrderCustom extends Orders{
//添加用户属性
}
package cn.mmz.mybatis.pojo;
/**
* @Classname 订单的拓展类
* @Description TODO
* @Date 2020/1/5 12:13
* @Created by mmz
*/
//通过此类映射订单和用户查询的结果,让此类继承包括字段较多的pojo类
public class OrderCustom extends Orders{
//添加用户属性
private String username;
private String sex;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private String address;
}
マッピングの結果が作成されました
書かれmapper.xml
<select id="findOrderUser" resultType="cn.mmz.mybatis.pojo.OrderCustom">
SELECT
orders.*,
user.username,
userss.address
FROM
orders,
user
WHERE orders.user_id = user.id
</select>
mapper.javaの
インタフェースも完了書き込みすることができます
public interface OrdersMapperCustom {
public List<OrderCustom> findOrdersUser() throws Exception;
}
最終テストクラス
public void testFindOrdersUser() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建代理对象
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
//调用Mapper方法
List<OrderCustom> list = ordersMapperCustom.findOrdersUser();
System.out.println(list);
sqlSession.close();
}
実装resultmapに
resultTypeとしたSQL文を
アイデア使用してこのresultMapマッピング
の使用このresultMapクエリ結果には、受注がこのオブジェクトにマッピングされている
順序でのユーザー属性、このクラスを追加し
、ユーザー属性のユーザー情報にマッピングされているクエリに関連付けられたオブジェクトのうち、順序
注文は、ユーザ属性クラスを追加する必要があります
mapper.xmlの.javaファイルを定義し、必要
このresultMapへは、注文情報とユーザ情報を設定する
一意に識別するために、複数の列がある場合は、より上記のid上記以外設定する必要があり、
列の順序情報を一意に識別するために:列
プロパティを一意の注文情報を識別する属性列がにマッピングされています
<id column="id" property="id"></id>
<result column="user_id" property="userId"></result>
<result column="number" property="number"></result>
<result column="createtime" property="createtime"></result>
<result column="note" property="note"></result>
このキーワードは、単一のクエリオブジェクトの関連付けに関する情報をマップするために使用される
プロパティ:の属性注文クエリに関連付けられたユーザ情報がマッピングされているにれる
のJavaTypeは、Javaの型にマップ
カラム:指定一意のユーザ情報を識別する列
<association property="user" javaType="cn.mmz.mybatis.pojo.User">
<id column="user_id" javaType="id"></id>
<result column="username" property="username"></result>
<result column="sex" property="sex"></result>
<result column="address" property="address"></result>
</association>
このresultMapとresultTypeとは、
1つのクエリを達成:resultTypeとは、よりシンプルに実現する、含まれていないPOJOは、カラム名をチェックしていない場合は、カラム名を完了するために、対応する属性マッピングを増やす必要があり
何のクエリ結果がresultTypeとが推奨されていない場合は、特別な要件を
別々のためのこのresultMap必要性をクエリ結果の特別な要件がある場合定義は、より多くのトラブルを達成します。これは、POJOの属性にマップされたこのresultMap関連する情報を使用して達成することができる
このresultMap遅延ローディングを達成することができるではなく、タイプ
多くのクエリ
チェック注文と注文の詳細
SQL文の
メインクエリテーブルの受注テーブルを決定
関連のルックアップテーブル注文の詳細を決定するために
リストに基づいてクエリに1関連づけて順序を追加
使用resultTypeとクエリの結果セットがPOJOの上にマッピングされ、POJOの注文情報は、最終的なリスト繰り返すことになります
重複レコードをすることはできませんメインクエリの注文のマッピング:要件
orders.javaの中リストに追加List<orderDetails> orderDetails
プロパティを
最終的に注文情報にマッピングされます注文の詳細に対応するために、注文は注文たOrderDetailsプロパティにマッピングされます。
各注文の属性List<orderDetails> orderDetails
注文の詳細に対応するために保存されています
mapper.xml
協会は、単一のレコードにマップ
にマッピングされたコレクションセット
POJOにマップの設定指定ofTypeタイプ
また、マッピングの順序情報とユーザ情報は、ここで設定していない、継承を使用することができます
<resultMap id="OrdersAndOrderDeResultMap" type="cn.mmz.mybatis.pojo.Orders">
<id column="id" property="id"></id>
<result column="user_id" property="userId"></result>
<result column="number" property="number"></result>
<result column="createtime" property="createtime"></result>
<result column="note" property="note"></result>
<association property="user" javaType="cn.mmz.mybatis.pojo.User">
<id column="user_id" property="id"></id>
<result column="username" property="username"></result>
<result column="sex" property="sex"></result>
<result column="address" property="address"></result>
</association>
<collection property="orderdetails" ofType="cn.mmz.mybatis.pojo.Orderdetail">
<id column="orderdetail_id" property="id"></id>
<result column="items_id" property="itemsId"></result>
<result column="items_num" property="itemsNum"></result>
<result column="orders_id" property="ordersId"></result>
</collection>
</resultMap>
mapper.java
public List<Orders> findOrdersAndOrderDeResultMap() throws Exception;
@Test
public void testfindOrdersAndOrderDeResultMap() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建代理对象
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
//调用Mapper方法
List<Orders> list = ordersMapperCustom.findOrdersAndOrderDeResultMap();
System.out.println(list);
sqlSession.close();
}
概要
クエリセットに関連付けられている多くのレコードのMyBatisの使用このresultMapコレクションはプロパティリストにマッピングされています
使用resultTypeと:注文の詳細は、たOrderDetailsにマッピングされた注文にマップする独自の治療、ダブルループスルーを必要とする、重複レコードを削除し、リストに保存されています