mybatis高級マッピングとspring統合の高級マッピング(4)
mybatis高級マッピングとspring統合の高級マッピング
———————————————— ————————————————————
0.0
1.0
1.1
1.2
1.3
1.4 resultMap
1.5
2.0
2.1
2.2 ( mybatis )
3.0 mybatis spring ( )
4.0 ( )
———————————————— ————————————————
0.0
0.1.1
, ( ) 。
0.1.2 、
0.1.3
0.1.4
, 。
0.2 ( PowerDesigner)
:user
id:
:order
( )
number:
user_id( , id)
:orderdetall
id:
orders_id( , id)
items_di( , id)
:items
id:
:
user oders:
user--->orders: ,
orders--->user: ,
orders orderdetall:
orders--->orderdetall: , , , orderdetall , 。
orderdetall--->orders: , 。
orderdetall items:
orderdetall--->items: , 。
items--->orderdetall: , 。
:
orders items:
orders items orderdetall, orders items 。
user items
1.0
1.1
1.1.1
, 。
1.1.2 resultType
1.1.2.1 sql
SELECT orders.*,USER.username,USER.sex,USER.address FROM orders,USER WHERE orders.user_id=user.id
:
:
? ?
orders (user_id), , 。
1.1.2.2 pojo
sql pojo ,pojo 。
Orders.java , pojo。
pojo po 。
// , pojo
public class OrdersCustom extends Orders{
//
/**USER.username,
USER.sex,
USER.address*/
private String username;
private String sex;
private String address;
}
1.1.2.3mapper.xml
<!-- -->
<select id="findOrdersUser" resultType="com.demo.po.OrdersCustom">
SELECT orders.*,
USER.username,
USER.sex,
USER.address
FROM
orders,
USER
WHERE orders.user_id=user.id
</select>
1.1.2.4mapper.java
public interface OrdersMapperCustom{
//
public List<OrdersCustom> findOrdersUser()throws Exception;
}
1.1.2.5
public void testFindOrdersUser() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
//
OrdersMapperCustom orderMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
// mapper
List<OrdersCustom> list = ordersMapperCustom.findOrdersUser();
system.out.println(list);
sqlSession.close();
}
1.1.3 resultMap
1.1.3.1 sql
1.2.1 resultType sql
1.1.3.2 resultMap
resultMap orders , orders User
, orders user 。
Orders User
1.1.3.3 Orders user
public class Orders{
private Integer userId;
private String number;
private Date createtime;
private String note;
//
private User user;
}
1.1.3.4 mapper.xml
1.1.3.4.1 resultMap:
<!-- resultMap com.demo.po.Orders -->
<resultMap type="com.demo.po.Orders" id="OrdersUserResultMap">
<!-- -->
<!-- id: , , , id column: property: Orders -->
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- -->
<!-- association : property: Orders -->
<association property="user" javaType="com.demo.po.User">
<!-- id: column: JavaType: user -->
<id column="user_id" javaType="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
</resultMap>
1.1.3.4.2 statement
<!-- , resultmap -- > <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap"> SELECT orders.*, USER.username, USER.sex, USER.address FROM orders, USER WHERE orders.user_id=user.id </select> 1.1.1.3.5 mapper.java // resultMap public List<Orders> findOrdersUserResultMap() throws Exception; 1.1.3.6 @test public void testFindOrdersUserResultMap() throws Exception{ SqlSession sqlSession = sqlSessionFactory.openSession(); // OrdersMapperCustom orderMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class) // mapper List.out.println(list); sqlSession.close; } 1.1.4 resultType resultMap resultType: resulType , pojo , , 。 resultType. resultMap: resultMap, , , resultMap pojo 。 resultMap ,resultType 。 1.2 1.2.1 。 1.2.2 sql : : 。 SELECT order.*, USER.username, USER.sex, USER.address, orderdetall.id orderdetall_id, orderdetall.items_di, orderdetall.items_num, orderdetall.order_id FROM orders, USER,orderdetall WHERE order.user_id = user.id AND orderdetall.order_id = order.id 1.2.3 resultType pojo , 。 : orders 。 orders.java List<orderDetall>orderDetalls 。 orders , orders orderDetails 。 orders (orders ) orders orderDetalls 。 1.2.4 orders list public class Orders{ private Integer id; private Integer userId; private String number; private Date createtime; private String note; // private User user; // private List<Orderdetail> orderdetails; } 1.2.5 mapper.xml <!-- , resultmap -->
<select id = "findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
SELECT
order.*,
USER.username,
USER.sex,
USER.address,
orderdetall.id orderdetall_id,
orderdetall.items_di,
orderdetall.items_num,
orderdetall.order_id
FROM
orders,
USER,orderdetall
WHERE order.user_id = user.id AND orderdetall.order_id = order.id
</select>
1.2.6 resultMap
<!-- resultMap extends , -->
<resultMap type="com.demo.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
<!-- -->
<!-- -->
<!-- extends , ( 158 176 ) -->
<!-- , collection collection: property: com.demo.po.Orders ofType: lsit pojo -->
<collection property = "orderdetalls" ofType="com.demo.po.Orderdetail">
<!-- id: property: com.demo.po.Orderdetail -->
<id colum="orderdetail_id" property="id"/>
<result colum="items_id" property="itemsId"/>
<result colum="items_num" property="itemsNum"/>
<result colum="orders_id" property="ordersId"/>
</collection>
</resultMap>
1.2.7 mapper.java
// ( )
public List<Orders> findOrdersAndOrderDetailResultMap()throws Exception;
1.2.8
@Test
public void testfindOrdersAndOrderDetailResultMap()throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
//
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class)
// mapper
List<orders> list = ordersMapperCustom.findOrdersAndOrderDetailResultMap();
system.out.println(list);
sqlSession.close;
}
1.2.9
mybatis resultMap collection list 。
resultType :
orders orderdetails , , , , orderdetails 。
1.3
1.3.1
。
1.3.2 sql
:
: , 。 :orders、orderdetail、items
SELECT
order.*,
USER.username,
USER.sex,
USER.address,
orderdetall.id orderdetall_id,
orderdetall.items_di,
orderdetall.items_num,
orderdetall.order_id,
items.name items_name,
items.detail items_detail,
items.price items_price
FROM
orders,
USER,
orderdetall,
items
WHERE order.user_id = user.id AND orderdetall.order_id = order.id AND orderdetail.items_id = items.id
1.3.3
user 。
user List<Orders>orderslist, orderlist
orders List<OrderDetail>orderdetails, orderdetails
OrderDetail items , items
1.3.4 mapper.xml
<!-- , resultmap -->
<select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
SELECT
order.*,
USER.username,
USER.sex,
USER.address,
orderdetall.id orderdetall_id,
orderdetall.items_di,
orderdetall.items_num,
orderdetall.order_id,
items.name items_name,
items.detail items_detail,
items.price items_price
FROM
orders,
USER,
orderdetall,
items
WHERE order.user_id = user.id AND orderdetall.order_id = order.id AND orderdetail.items_id = items.id
</select>
1.3.5 resultMap ( )
<!-- -->
<resultMap type="com.demo.po.User" id="UserAndItemsResultMap">
<!-- -->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
<!-- , collection -->
<collection property="ordersList" ofType="com.demo.po.Orders">
<id column="id" property="id"/>
<result cloumn="user_id" property="user_id"/>
<result cloumn="number" property="number"/>
<result cloumn="createtime" property="createtime"/>
<result cloumn="note" property="note"/>
<!-- -- > <collection property="ordersList" ofType="com.demo.po.Orders"> <id colum="orderdetail_id" property="id"/> <result colum="items_id" property="itemsId"/> <result colum="items_num" property="itemsNum"/> <result colum="orders_id" property="ordersId"/> <!-- -->
<association property="items" javaType="com.demo.po.Items">
<id column="items_id" property="id"/>
<result cloumn="items_id" property="id"/>
<result cloumn="items_name" property="name"/>
<result cloumn="items_detail" property="detail"/>
<result cloumn="items_price" property="price"/>
</association>
</collection>
</collection>
</resultMap>
1.3.6 mapper.java ( )
//
public List<User> findUserAndItemsResultMap()throws Exception;
1.3.7
@Test
public void testfindUserAndItemsResultMap()throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
//
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class)
// mapper
List<User> list = ordersMapperCustom.findUserAndItemsResultMap();
system.out.println(list);
sqlSession.close;
}
1.3.8
: ( 、 、 、 、 )
resultType pojo , 。
, :
, 。
1:
: 、 、 、 、 ( )
,
resultType pojo 。
2:
: 、 、 、 ( )
resultMap user 。
:
resultMap , list list。
1.4 resultMap :
resultType:
:
sql pojo pojo 。
:
, , ,
, resultType pojo , list(list pojo) 。
resultMap:
association collection ( )。
association:
:
pojo 。
:
association pojo ,
: 。
resultType pojo pojo ,
resultType resultMap。
collection:
:
list 。
:
collection list , :
, collection list ,
list ,
。
resultType list 。
1.5
1.5.1
resultMap ( association、collection 、 ),association、collection
。
:
。 , 。
。
: 、 , , 。
1.5.2 association
1.5.2.1
。
1.5.2.2 mapper.xml
mapper statement。
1、
SELECT * FROM orders
statement association ( ) statement( )
<!-- , -->
<select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoading">
SELECT * FROM orders
</select>
2、
user_id 。
UserMapper.xml findUserByid
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM USER WHERE id = #{value}
</select>
: findOrdersUserLazyLoading, findUserById,
resultMap 。
1.5.2.3 resultMap
association select statement id。
<!-- resultMap -->
<resultMap type="com.demo.po.Orders" id="findOrdersUserLazyLoading">
<!-- -->
<id column="id" property="id"/>
<result cloumn="user_id" property="user_id"/>
<result cloumn="number" property="number"/>
<result cloumn="createtime" property="createtime"/>
<result cloumn="note" property="note"/>
<!-- select: statement id( user_id statement) userMapper.xml findUserById id(user_id) , findUserById mapper namespace column: , user_id sql : SELECT orders.*, (SELECT username FROM USER WHERE orders.user_id = user.id)username, (SELECT sex FROM USER WHERE orders.user_id = user.id)sex FROM orders -->
<association property="user" javaType="com.demo.po.User" select="com.demo.mybatis.mapper.UserMapper.findUserById" cloumn="user.id">
<!-- -->
</association>
</resultMap>
<!-- , -->
<select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoading">
SELECT * FROM orders
</select>
1.5.2.4 mapper.java( )
// ,
public List<Orders> findOrdersUserLazyLoading()throws Exception;
1.5.2.5
:
1、 mapper (findOrdersUserLazyLoading), com.demo.mybatis.mapper.OrdersMapperCustom findOrdersUserLazyLoading orders ( )。
2、 List<Orders>, Orders getUser , 。
3、 , UserMapper.xml findUserById 。
1.5.2.6
mybatis :
lazyLoadingEnable、aggressiveLazyLoading
lazyLoadingEnable 。 true
'false', false
false
aggressiveLazyLoading ’true‘ , true
。 true
, false
SqlMapConfig.xml
<!-- , -->
<settings>
<!-- -->
<setting name = "lazyLoadingEnable" value="true"/>
<!-- -->
<setting name = "aggressiveLazyLoading" value="false"/>
</setting>
1.5.2.7
OrdersMapperCustomTest.java
// ,
@test
public void testFindOrdersUserLazyLoading() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
//
OrdersMapperCustom orderMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class)
// ( )
List<Orders> list = ordersMapperCustom.findOrdersUserLazyLoading();
//
for(Orders orders:list)
// getUser() ,
User user = orders.getUser();
System.out.println(user);
}
1.5.2.8
mybatis association collection , ?
:
mapper :
1、
2、 id
:
mapper ,
(service), mapper 。
:
, sql( , ), 。
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————