MyBatis 실천 의 동적 SQL 및 관련 조회

서언
MyBatis,모두 가 알다 시 피 반자동 ORM 프레임 워 크 는 원래 ibatis 라 고 불 렸 는데 나중에 10 년 동안 apache 소프트웨어 펀드 조직 이 이 를 goole code 에 맡 긴 것 같 아서 MyBatis 라 고 이름 을 바 꾸 었 고 기능 이 예전 보다 더욱 강 해 졌 다.그것 은 전자 동 지구 층 프레임 워 크 인 Hibernate 에 비해 더욱 유연 하고 경량급 이라는 점 을 나 는 아직도 깊이 깨 달 았 다.
MyBatis 의 강력 한 특징 중 하 나 는 바로 동적 SQL 능력 입 니 다.우리 가 SQL 을 연결 하 는 고통 을 줄 일 수 있 습 니 다.프로젝트 에 따라 정 해진 상황 에서 사용 하면 프로그램의 코드 양 과 복잡 도 를 크게 줄 일 수 있 습 니 다.그러나 너무 복잡 한 사용 이 아니 라 후기 유지 와 확장 에 불리 하지 않도록 합 니 다.
동적 SQL
동적 SQL 은 SQL 문 구 를 유연 하 게 조작 하고 표현 식 을 통 해 판단 하여 SQL 을 조합/조립 합 니 다.
if
조회 조건 을 판단 하고 입력 매개 변수 가 비어 있 지 않 으 면 조회 조건 의 조합 을 진행 합 니 다.
mapper

<code class=" hljs vbnet"><select id="selectUser" resulttype="com.fq.domain.User" parametertype="com.fq.domain.User">
SELECT * FROM user
AND id = #{id}
AND name = #{name}
AND password = #{password}
</select></code>
첫 번 째 AND(MyBatis 는 사용자 정의 행동 요 소 를 제공 합 니 다.MyBatis 문 서 를 참고 하 십시오)를 자동 으로 처리 합 니 다.
UserDAO

<code class="hljs vbnet"><code class="hljs php">List<user> selectUser(User user) throws Exception;</user></code></code>
Client

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java">@Test
public void selectUserClient() throws Exception {
UserDAO dao = session.getMapper(UserDAO.class);
User user = dao.selectUser(new User(null, null, "new_password"));
System.out.println(user);
}</code></code></code>
id 와 name 이 null 이기 때문에 이 두 조건 은 SQL 에 연결 되 지 않 습 니 다.이 점 은 디 버 깅 할 때 로그 에서 볼 수 있 습 니 다.
choose/when/otherwise
어떤 때 는 모든 조건 문 구 를 사용 하고 싶 지 않 고 그 중에서 하나,둘 을 선택 하고 싶 습 니 다.이런 상황 에 대해 MyBatis 는 요 소 를 제공 합 니 다.그 는 자바 의 switch 와 비슷 합 니 다.

<code class=" hljs vbnet"><code class=" hljs php"><code class=" hljs java"><code class=" hljs vbnet"><select id="selectUser" resulttype="com.fq.domain.User" parametertype="com.fq.domain.User">
SELECT * FROM user
AND id = #{id}
AND name = #{name}
AND password = #{password}
</select></code></code></code></code>
set
동적 업데이트 문 구 를 위 한 솔 루 션 은 set 요 소 는 업데이트 할 열 을 동적 으로 포함 하고 다른 열 을 버 리 는 데 사용 할 수 있 습 니 다.

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><update id="updateUserById" parametertype="com.fq.domain.User">
UPDATE user
<set>
<if test="name != null">
name = #{name} ,
</if>
<if test="password != null">
password = #{password} ,
</if>
</set>
WHERE id = #{id};
</update></code></code></code></code></code>
foreach
foreach 를 사용 하면 SQL 에 배열 이나 List 를 전달 할 수 있 습 니 다.
전송 목록
여러 id 의 사용자 정 보 를 조회 하면 다음 두 가지 SQL 로 이 루어 집 니 다.

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql">SELECT * FROM user WHERE (id = ? OR id = ? OR id = ?);
SELECT * FROM user WHERE id IN (?, ?, ?, ?);</code></code></code></code></code></code>
따라서 그 foreach 의 정의 도 다음 과 같은 두 가지 방안 이 있다.

<code class=" hljs vbnet"><code class=" hljs php"><code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs applescript"><code class=" hljs sql"><code class=" hljs cs"><select id="selectUser" parametertype="java.util.List" resulttype="com.fq.domain.User">
SELECT *
FROM user
id = #{id}
</select></code></code></code></code></code></code></code>
<code class=" hljs vbnet"><code class=" hljs php"><code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs applescript"><code class=" hljs sql"><code class=" hljs cs"><code class=" hljs cs"><select id="selectUser" parametertype="java.util.List" resulttype="com.fq.domain.User">
SELECT *
FROM user
#{id}
</select></code></code></code></code></code></code></code></code>
원소 설명
collection SQL 분석 매개 변수 이름
index 순환 하 표
item 단일 요소 의 이름
open 순환 출력 시작
close 순환 종료 출력
separator 중간 분리 출력
List 를 parameterType 으로 전달 할 때 SQL 분석 매개 변수 이름 은 list 로 고정 합 니 다.
UserDAO

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica">List<user> selectUser(List<integer> ids) throws Exception;</integer></user></code></code></code></code></code></code></code></code></code>
사용자 사례 일괄 삽입
mapper

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><insert id="insertUserList" parametertype="java.util.List">
INSERT INTO user(name, password) VALUES
<if test="list != null and list.size != 0">
<foreach collection="list" item="user" separator=",">
(#{user.name}, #{user.password})
</foreach>
</if>
</insert></code></code></code></code></code></code></code></code></code></code>
UserDAO

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><code class="hljs java">void insertUserList(List<user> users) throws Exception;</user></code></code></code></code></code></code></code></code></code></code></code>
Client

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><code class="hljs java"><code class="hljs java">@Test
public void insertUserListClient() throws Exception {
UserDAO dao = session.getMapper(UserDAO.class);
dao.insertUserList(Lists.newArrayList(new User(null, "mojia5", "mojia5"), new User(null, "mojia6", "mojia6"), new User(null, "mojia7", "mojia7")));
}</code></code></code></code></code></code></code></code></code></code></code></code>
배열 로 전송
mapper

<code class=" hljs vbnet"><code class=" hljs php"><code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs applescript"><code class=" hljs sql"><code class=" hljs cs"><code class=" hljs cs"><code class=" hljs mathematica"><code class=" hljs xml"><code class=" hljs java"><code class=" hljs java"><code class=" hljs cs"><select id="selectUser" parametertype="Object[]" resulttype="com.fq.domain.User">
SELECT *
FROM user
#{id}
</select></code></code></code></code></code></code></code></code></code></code></code></code></code>
List 와 유사 하 게 배열 을 parameterType 으로 전달 할 때 SQL 분석 매개 변수 이름 은 array 로 고정 되 어 있 습 니 다.
UserDAO

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><code class="hljs java"><code class="hljs java"><code class="hljs cs"><code class="hljs mathematica">List<user> selectUser(Integer[] ids) throws Exception;</user></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
SQL 세 션
SQL 세 션 으로 다른 SQL 을 호출 할 수 있 도록 공 통 된 SQL 문 구 를 추출 할 수 있 습 니 다.

<code class=" hljs vbnet"><code class=" hljs php"><code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs applescript"><code class=" hljs sql"><code class=" hljs cs"><code class=" hljs cs"><code class=" hljs mathematica"><code class=" hljs xml"><code class=" hljs java"><code class=" hljs java"><code class=" hljs cs"><code class=" hljs mathematica"><code class=" hljs vbnet"><sql id="user_where">
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
<if test="password != null">
AND password = #{password}
</if>
</sql>
<select id="selectUser" resulttype="com.fq.domain.User" parametertype="com.fq.domain.User">
SELECT * FROM user
</select></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
경험 치:단일 테이블 을 기반 으로 SQL 세 션 을 정의 하 는 것 이 좋 으 며,SQL 세 션 에/와 같은 탭 을 포함 하지 않 는 것 이 좋 습 니 다.그러면 SQL 세 션 의 재 활용 도가 더욱 높 습 니 다.
관련 검색
데이터 모델 분석 사고
각 표 의 데이터 내용:모듈 별로 각 표 에 기 록 된 내용 을 숙지 하 는 것 은 학습 시스템 의 수요/기능 에 해당 합 니 다.각 표 의 중요 한 필드:비 공 필드/외 키 필드 등.표 와 표 간 의 데이터 베이스 등급 관계:외 키 관계,표 와 표 간 의 업무 관계:특정한 업 무 를 바탕 으로 분석 합 니 다.
주문/상품 데이터 모델

내용
user:상품 을 구 매 하 는 사용자 정보 order:사용자 가 만 든 주문 orderdetail:주문 상세(상품 정보 구 매)item:상품 정보 표 와 표 간 의 업무 관계:
user/order:
user->order:한 쌍 다 order->user:1 대 1 order/orderdetail:
order->orderdetail:한 쌍 의 다 중 orderdetail->order:한 쌍 의 orderdetail/item:
orderdetail->item:일대일 item->orderdetail:한 쌍 이상
일대일 조회
수요:주문 정보 조회,관련 조회(주문 서 를 만 드 는)사용자 정보.
상기 분석 을 통 해 알 수 있 듯 이 주 조 회 는 order 표 이 고 order->user 관 계 는 1 대 1 이 므 로 resultMap 을 사용 하여 조회 결과 의 주문 정 보 를 Order 에 표시 하고 사용자 정 보 를 Order 의 User 속성 에 표시 합 니 다.
PO:사용자 개조

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><code class="hljs java"><code class="hljs java"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs vbnet"><code class="hljs java">public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private Integer sex;
private String address;
// ..
}</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
PO:Order 를 추가 하여 Order 에 사용 자 를 조합 합 니 다.

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><code class="hljs java"><code class="hljs java"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs vbnet"><code class="hljs java"><code class="hljs java">public class Order implements Serializable {
private Integer id;
private Integer userId;
private String number;
private Date createTime;
private String note;
private User user;
// ...
}</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
mapper

<code class=" hljs vbnet"><code class=" hljs php"><code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs applescript"><code class=" hljs sql"><code class=" hljs cs"><code class=" hljs cs"><code class=" hljs mathematica"><code class=" hljs xml"><code class=" hljs java"><code class=" hljs java"><code class=" hljs cs"><code class=" hljs mathematica"><code class=" hljs vbnet"><code class=" hljs java"><code class=" hljs java"><code class=" hljs xml"><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20%3F%2D%2D%3E-->
<mapper namespace="com.fq.mybatis.OrderDAO">
<cache type="org.mybatis.caches.ehcache.EhcacheCache">
<resultmap id="order_user_map" type="com.fq.domain.Order">
<id column="id" property="id">
<result column="user_id" property="userId">
<result column="number" property="number">
<result column="create_time" property="createTime">
<result column="note" property="note">
<association property="user" javatype="com.fq.domain.User">
<id column="user_id" property="id">
<result column="username" property="username">
<result column="birthday" property="birthday">
<result column="sex" property="sex">
<result column="address" property="address">
</result></result></result></result></id></association>
</result></result></result></result></id></resultmap>
<select id="selectOrderWithUser" resultmap="order_user_map">
SELECT
`order`.*,
username,
birthday,
sex,
address
FROM `order`, user
WHERE `order`.user_id = user.id AND `order`.id = #{0};
</select>
</cache></mapper></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
association:            (          PO    ).
OrderDAO

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><code class="hljs java"><code class="hljs java"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs vbnet"><code class="hljs java"><code class="hljs java"><code class="hljs xml"><code class="hljs cs">public interface OrderDAO {
Order selectOrderWithUser(Integer id) throws Exception;
}</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
Client

<code class="hljs vbnet"><code class="hljs php"><code class="hljs java"><code class="hljs vbnet"><code class="hljs applescript"><code class="hljs sql"><code class="hljs cs"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs xml"><code class="hljs java"><code class="hljs java"><code class="hljs cs"><code class="hljs mathematica"><code class="hljs vbnet"><code class="hljs java"><code class="hljs java"><code class="hljs xml"><code class="hljs cs"><code class="hljs java">@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/applicationContext.xml")
public class OrderDAOClient {
@Autowired
private OrderDAO dao;
@Test
public void client() throws Exception {
Order order = dao.selectOrderWithUser(3);
System.out.println(order);
}
}</code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code></code>
'일대 다'조회.
수요:주문 및 주문 내 역 조회(한 쌍 이상).
PO:Order Detail 을 정의 하고 Order 에 List order Details 주문 내 역 속성 을 추가 합 니 다.

<code class="hljs java">public class OrderDetail implements Serializable {
private Integer id;
private Integer orderId;
private Integer itemId;
private Integer itemNumber;
// ...
}</code>
mapper

<code class=" hljs java"><code class=" hljs vbnet"><resultmap id="order_user_detail_map" type="com.fq.domain.Order" extends="order_user_map">
<collection property="orderDetails" oftype="com.fq.domain.OrderDetail">
<id column="order_detail_id" property="id">
<result column="item_id" property="itemId">
<result column="item_num" property="itemNumber">
<result column="order_id" property="orderId">
</result></result></result></id></collection>
</resultmap>
<select id="selectOrderWithDetail" resultmap="order_user_detail_map">
SELECT
`order`.*,
username,
birthday,
sex,
address,
orderdetail.id order_detail_id,
item_id,
item_num,
order_id
FROM `order`, user, orderdetail
WHERE `order`.user_id = user.id AND `order`.id = orderdetail.order_id AND `order`.id = #{0};
</select></code></code>
원소 설명
property 는 관련 조회 결과 집합 에 저 장 된 속성 을 지정 합 니 다.
ofType 지정 관련 조회 결과 집 중 된 대상 유형 Orderdao

<code class="hljs java"><code class="hljs vbnet"><code class="hljs mathematica">Order selectOrderWithDetail(Integer id) throws Exception;</code></code></code>
'다 대 다'조회.
수요:사용자 및 사용자 의 상품 구 매 정 보 를 조회 합 니 다.
사용자 표 는 아 이 템 표 와 직접적인 연관 이 없 기 때문에 Order 표 를 통 해 Order Detail 표 와 만 연결 할 수 있 습 니 다.
생각:
1)사용자 정 보 를 사용자 에 게 표시 합 니 다.
2)User 에 List 주문 목록 속성 을 추가 하여 사용자 가 만 든 주문 서 를 orders 에 표시 합 니 다.
3)Order 에 List 주문서 내 역 목록 속성 을 추가 하여 주문서 내 역 을 orderDetails 에 표시 합 니 다.
4)Order Detail 에 Item 속성 을 추가 하여 주문 내 역 에 대응 하 는 상품 을 item 에 표시 합 니 다.
PO: Item

<code class="hljs java"><code class="hljs vbnet"><code class="hljs mathematica"><code class="hljs cs">public class Item {
private Integer id;
private String name;
private Float price;
private String detail;
private String pic;
private Date createTime;
//...
}</code></code></code></code>
mapper

<code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs mathematica"><code class=" hljs cs"><code class=" hljs applescript"><resultmap id="user_item_map" type="com.fq.domain.User">
<id column="id" property="id">
<result column="username" property="username">
<result column="birthday" property="birthday">
<result column="sex" property="sex">
<result column="address" property="address">
<collection property="orders" oftype="com.fq.domain.Order">
<id column="order_id" property="id">
<result column="id" property="userId">
<result column="order_create_time" property="createTime">
<result column="order_note" property="note">
<result column="order_number" property="number">
<collection property="orderDetails" oftype="com.fq.domain.OrderDetail">
<id column="order_detail_id" property="id">
<result column="order_id" property="orderId">
<result column="item_id" property="itemId">
<result column="order_item_num" property="itemNumber">
<association property="item" javatype="com.fq.domain.Item">
<id column="item_id" property="id">
<result column="item_create_time" property="createTime">
<result column="item_detail" property="detail">
<result column="item_name" property="name">
<result column="item_price" property="price">
<result column="item_pic" property="pic">
</result></result></result></result></result></id></association>
</result></result></result></id></collection>
</result></result></result></result></id></collection>
</result></result></result></result></id></resultmap>
<select id="selectUserItem" resultmap="user_item_map">
SELECT
user.*,
`order`.id order_id,
`order`.create_time order_create_time,
`order`.note order_note,
`order`.number order_number,
orderdetail.id order_detail_id,
orderdetail.item_num order_item_num,
item.id item_id,
item.create_time item_create_time,
item.detail item_detail,
item.name item_name,
item.price item_price,
item.pic item_pic
FROM user, item, `order`, orderdetail
WHERE `order`.user_id = user.id AND orderdetail.order_id = `order`.id AND orderdetail.item_id = item.id ;
</select></code></code></code></code></code>
OrderDAO

<code class="hljs java"><code class="hljs vbnet">
<code class="hljs mathematica">
<code class="hljs cs">
<code class="hljs applescript">
<code class="hljs php">List<user> selectUserItem() throws Exception;</user>
</code></code></code></code></code></code>
resultMap 소결:
1 대 1 과 1 대 1 의 고급 맵 을 사용 하고 완성 할 수 있 습 니 다.
association:관련 조회 정 보 를 PO 대상 에 표시 합 니 다.collection:관련 조회 정 보 를 집합 에 표시 합 니 다.
로드 지연
관련 조회 시 MyBatis 지연 로드 기능 을 사용 하면 데이터베이스 압력 을 효과적으로 줄 일 수 있 습 니 다.첫 번 째 조 회 는 메 인 테이블 정보 만 조회 하고 필요 할 때 관련 테이블 정 보 를 조회 합 니 다./지연 로드 기능 이 있 습 니 다.
수요:주문 정 보 를 조회 하고 사용자 정 보 를 조회 합 니 다.
지연 로드 스위치
MyBatis 핵심 프로필(mybatis-configuration.xml)에 설정:
1)lazyLoading Enabled:게 으 른 로 딩 여 부 를 설정 합 니 다.기본 false 는 모든 관련 조회 가 초기 화 됩 니 다.
2)aggressiveLazyLoading:적극적으로 불 러 올 지 설정 합 니 다.기본 true,모든 관련 속성 이 초기 화 되 어 불 러 옵 니 다.
설정 설정:

<code class=" hljs java">
<code class=" hljs vbnet"><code class=" hljs mathematica">
<code class=" hljs cs"><code class=" hljs applescript"><code class=" hljs php">
<code class=" hljs xml"><settings>
<setting name="cacheEnabled" value="true">
<setting name="lazyLoadingEnabled" value="true">
<setting name="aggressiveLazyLoading" value="false">
</setting></setting></setting></settings></code></code></code></code></code></code></code>
Mapper
주문 정보 만 조회

<code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs mathematica"><code class=" hljs cs"><code class=" hljs applescript"><code class=" hljs php"><code class=" hljs xml"><code class=" hljs applescript"><resultmap id="order_user_map" type="com.fq.domain.Order">
<id column="id" property="id">
<result column="user_id" property="userId">
<result column="number" property="number">
<result column="create_time" property="createTime">
<result column="note" property="note">
<association property="user" javatype="com.fq.domain.User" select="com.fq.mybatis.UserDAO.selectUserById" column="user_id">
</association></result></result></result></result></id></resultmap>
<select id="selectOrderWithUser" resultmap="order_user_map">
SELECT *
FROM `order`;
</select></code></code></code></code></code></code></code></code>
원소 설명
select 관련 조회 Statement 을 com.fq.mybatis.UserDAO.selectUserById 로 지정 합 니 다.
column 관련 조 회 를 지정 할 때 usersid 값 이 selectUserById 에 전 송 됩 니 다.관련 조회 사용자 정보(namespace 는 com.fq.mybatis.UserDAO)

<code class=" hljs java"><code class=" hljs vbnet"><code class=" hljs mathematica"><code class=" hljs cs"><code class=" hljs applescript"><code class=" hljs php"><code class=" hljs xml"><code class=" hljs applescript"><code class=" hljs vbnet"><select id="selectUserById" parametertype="java.lang.Integer" resulttype="com.fq.domain.User">
SELECT *
FROM user
WHERE id = #{id};
</select></code></code></code></code></code></code></code></code></code>
위 에서 조회 한 주문 정보 중의 userid 는 selectUserById 에 연결 하여 사용자 정 보 를 조회 합 니 다.
OrderDAO(이전)

<code class="hljs java">
<code class="hljs vbnet">
<code class="hljs mathematica">
<code class="hljs cs">
<code class="hljs applescript">
<code class="hljs php">
<code class="hljs xml">
<code class="hljs applescript">
<code class="hljs vbnet">
<code class="hljs mathematica">List<order> selectOrderWithUser() throws Exception;</order>
</code>
</code></code></code></code></code></code></code></code></code>
Client

<code class="hljs java"><code class="hljs vbnet"><code class="hljs mathematica"><code class="hljs cs"><code class="hljs applescript"><code class="hljs php"><code class="hljs xml"><code class="hljs applescript"><code class="hljs vbnet"><code class="hljs mathematica"><code class="hljs java">@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/applicationContext.xml")
public class OrderDAOClient {
@Autowired
private OrderDAO dao;
@Test
public void client() throws Exception {
List<order> orders = dao.selectOrderWithUser();
for (Order order : orders) {
System.out.println(order.getUser());
}
}
}</order></code></code></code></code></code></code></code></code></code></code></code>
debug 위 클 라 이언 트,log 정 보 를 관찰 하면 사용자 정보 가 필요 할 때 만 selectUserById 를 호출 할 수 있 습 니 다.
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 my batis 실천 의 동태 sql 및 관련 조회 입 니 다.여러분 에 게 이상 의 도움 이 되 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기