Mybatis의 기본 사항에 대해 명확하지 않은 사람들은이 기사를 참조하십시오. Mybatis 소개 학습 튜토리얼 (i) -Mybatis Quick 소개.
Mybatis를 만나십시오
Mybatis는 Apache의 오픈 소스 프로젝트입니다. 2010 년 에이 프로젝트는 Apache Software Foundation에서 Google 코드로 이전되었으며 Mybatis로 이름이 바뀌 었습니다. 2013 년 11 월 Github로 마이그레이션되었습니다.
Ibatis라는 용어는 "Internet"과 "Abatis"의 조합에서 유래하며 Java 기반 지속성 계층 프레임 워크입니다. IBATIS는 SQL 맵 및 데이터 액세스 개체 (DAO)를 포함한 지속성 계층 프레임 워크를 제공합니다.
Mybatis 사진 앨범
소개
전에 간단한 데이터베이스 쿼리 및 관리 쿼리를 언급했습니다. 개발 요구 사항에는 일대일, 일대일 및 다수의 수요 개발이 있습니다. 예를 들어, 쇼핑 카트를 개발할 때 주문 및 사용자는 일대일이며 사용자 및 주문은 일대일이며 사용자와 제품은 다수입니다. 이것들은 또한 최대 절전 모드 개발에서 일반적입니다. 그들은 최대 절전 모드에서 데이터 매핑을 통해 구현되며 mybatis에서는 구성 파일의 데이터 매핑을 통해 구현됩니다.
일대일 쿼리
주문 정보를 쿼리하고 주문 생성을위한 쿼리 사용자 정보를 연결하려면 이는 일반적인 일대일 쿼리입니다. 일대일 쿼리를 구현하는 두 가지 방법이 있습니다 : resulttype 및 resultmap 사용. resultType에는 추가 POJO 정의가 필요하며 쿼리 필드는 새로 정의 된 POJO에 해당합니다. resultMap은 구성 파일을 통해 두 POJO간에 일대일 상관 관계를 구현해야합니다. 아래 에서이 두 가지 방법을 별도로 구현하겠습니다.
결과 유형 :
1. Pojo를 만들고 새 Pojo에 매핑되어야하는 새로운 속성을 추가하십시오.
Public Class OrderCustom Orders {// 사용자 정보 추가 개인 문자열 사용자 이름; 개인 문자열 섹스; 개인 문자열 주소; 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 (문자열 주소) {this.address = 주소; }}2. 파일 매핑 :
<id id = "findOrteruser"resulttype = "com.luchao.mybatis.first.po.orderCustom"> 주문 선택.*, user.username, user.sex, user.dress, user user.user_id = user.id </select>
3. 맵퍼 인터페이스 구현 :
// 쿼리 순서 및 사용자 정보 공개 목록 <TurdCustom> findOrorDERUSER ()는 예외를 발생시킵니다.
4. 테스트 코드 :
public void findordersUser ()는 예외를 던집니다. {// sqlsession 객체 sqlsession sqlsession = sqlsessionfactory.opensession (); // OrderMapper 객체를 작성하고 MyBatis는 자동으로 Mapper 프록시 OrderMapper OrderMapper = SQLSESSION.GETMAPPER (OrderMapper.class)를 생성합니다. // 쿼리 순서 및 사용자 정보 목록으로 OrderMapper 메소드를 호출하여 OrderCustoms = OrderMapper.FindOrderUser (); System.out.println (OrderCustoms.size ()); }결과 맵 구현 :
resultMap Query result의 주문 정보를 Orders Object에 맵핑하고 Orders 클래스에서 사용자 속성을 추가하며 관련 쿼리 사용자 정보를 Orders Object의 사용자 속성에 맵핑합니다.
1. pojo를 만들고 주문 클래스에 사용자 속성을 추가하십시오.
공개 클래스 주문 {개인 정수 ID; 개인 정수 userId; 개인 문자열 번호; 개인 날짜 CreateTime; 개인 문자열 참고; // 사용자 정보 개인 사용자 사용자; // 주문 입력 비공개 목록 <TerderDetail> OrderDetails; 공개 정수 getId () {return id; } public void setId (정수 ID) {this.id = id; } public integer getUserId () {return userId; } public void setUserId (Integer userId) {this.userid = userId; } public String getNumber () {반환 번호; } public void setNumber (문자열 번호) {this.number = number == null? null : 숫자 .trim (); } 공개 날짜 getCreateTime () {return createTime; } public void setCreateTime (Date CreateTime) {this.createTime = createTime; } public String getNote () {return note; } public void setnote (문자열 참고) {this.note = note == null? null : note.trim (); } public user getUser () {return user; } public void setUser (사용자 사용자) {this.user = user; } public list <orderDetail> getOrderDetails () {return orderDetails; } public void setOrderDetails (list <orderDetail> orderDetails) {this.OrderDetails = OrderDetails; }}2. 파일 매핑 :
<!-순서 쿼리 관련 사용자의 결과 값을 쿼리하고 전체 쿼리 결과를 주문에 매핑합니다-> <resultmap type = "com.luchao.mybatis.first.po.orders"id = "ordersuseResultMap"> <id 열 = "id"propert = "id" /> <result column = "user_id. 열 = "CreateTime"Property = "CreateTime" /> <result column = "note"propert "propert"= "note" /> <!-매핑의 관련 사용자 정보를 구성-> <!-연관 : 관련 쿼리 단일 개체 속성에 대한 정보를 매핑하는 데 사용됩니다. javatype = "com.luchao.mybatis.first.po.user"> <!-id : 관련 쿼리 사용자 열의 고유 ID : 사용자 정보를 고유하게 식별하는 열을 지정합니다. /> <result column = "address"property = "address"/> </association> </resultmap> <select id = "findOrderUserMap"resultmap = "OrdersUserResultMap"> Orders.*, user.username, user.sex, user.address, orders.user_id = user.id </select>
협회 : 관련 쿼리 단일 객체, 속성 : 관련 쿼리의 사용자 정보를 매핑하기위한 순서로 어떤 속성을 매핑하는 데 사용됩니다.
3. 맵퍼 인터페이스
// resultMap 공개 목록을 통한 쿼리 순서 및 사용자 정보 공개 목록 <SORDERS> FINDORDERUSERMAP ()는 예외를 발생시킵니다.
4. 테스트 코드 :
public void findorderSusermap ()는 예외를 던지고 {// sqlsession 객체를 가져옵니다 sqlsession sqlsession = sqlsessionfactory.opensession (); // OrderMapper 객체를 작성하고 MyBatis는 자동으로 Mapper 프록시 OrderMapper OrderMapper = sqlSession.getMapper (OrderMapper.class)를 생성합니다. // OrderMapper 메소드를 호출하여 쿼리 순서 및 사용자 정보 목록 <orders> orders = OrderMapper.FindOrderUserMap (); System.out.println (Orders.size ()); }resulttype 및 resultmap은 일대일 쿼리 요약을 구현합니다.
resultType : resultType를 사용하여 구현하는 것은 비교적 간단합니다. 쿼리 열 이름이 pojo에 포함되지 않은 경우 매핑을 완료하려면 열 이름의 해당 속성을 추가해야합니다. 쿼리 결과에 대한 특별한 요구 사항이없는 경우 resulttype를 사용하는 것이 좋습니다.
ResultMap : resultMap은 별도로 정의해야하며 이는 약간 번거로움입니다. 쿼리 결과에 대한 특별한 요구 사항이있는 경우 resultMap을 사용하면 관련 쿼리 매핑 pojo의 속성을 완성 할 수 있습니다. ResultMap은 게으른 하중을 구현할 수 있으며 결과 유형은 게으른 하중을 구현할 수 없습니다.
일대일 쿼리
주문 및 주문 세부 사항을 쿼리 해야하는 경우 이는 일대일 쿼리 요구 사항입니다.
1. Pojo는 위의 결과 맵에서 순서의 pojo와 동일합니다. 주문 세부 정보를 주문의 속성으로 설정하십시오.
2. 파일 매핑 :
<!-주문 및 주문 세부 사항 및 사용자 정보 사용 상속은 주문 및 사용자 정보를 구성 할 필요가 없습니다 .-> <resultmap type = "com.luchao.mybatis.first.po.orders"id = "ordersOrderDetailResultMap oftype = "com.luchao.mybatis.first.po.orderDetail"> <result column = "orderdetail_id"property = "id" /> <result column = "items_id"property = "affertId" /> <결과 열 = "items_num"product = "itemsnum" /> <result column = "orders_id"propertid " /> / / /> <rengess" "result _ inderders" / / /> id = "findOrderAndOrdordOrdEtailMap"resultMap = "OrdersOrderDetailResultMap"> Orders를 선택하십시오.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.orders_id, Orderders, Orderders, OrderDestes. user.id 및 orderdetail.orders_id = orders.id </select>
Orders 및 Order 세부 사항의 결과 MAP는 Extends를 사용하여 상속되며 주문 정보 및 사용자 정보의 매핑을 구성 할 필요가 없습니다.
수집 : 연결 쿼리, 속성의 수집 객체에 여러 레코드를 매핑합니다. 여러 레코드를 주문 속성에 매핑하십시오.
Oftype : 목록 수집 속성에서 Pojo에 맵핑되는 유형을 지정합니다. Oftype과 일대일 사이에는 여전히 차이가 있습니다.
3. 맵퍼 인터페이스 :
// resultmap을 통한 주문, 주문 세부 정보 및 사용자 정보 문의
공개 목록 <SORDERS> FINDORDERANDORDORDORDERDETAILMAP ()는 예외를 던집니다.
4. 테스트 코드 :
public void findOrderAndOrdorDorderDetailMap ()은 예외를 던집니다 {// sqlsession 객체 sqlsession sqlsession = sqlsessionfactory.opensession (); // OrderMapper 객체를 작성하고 MyBatis는 자동으로 Mapper 프록시 OrderMapper OrderMapper = sqlSession.getMapper (OrderMapper.class)를 생성합니다. // OrderMapper 메소드를 호출하여 쿼리 순서 및 사용자 정보 목록 <SERDERS> ORDERS = ORDERMAPPER.FINDORDERDORDORDORDORDETAILMAP (); System.out.println (Orders.get (). getOrderDetails (). size ()); System.out.println (Orders.size ()); }일회성 요약 :
MyBatis는 ResultMap의 컬렉션을 사용하여 관련 쿼리의 여러 레코드를 목록 수집 속성에 매핑합니다.
resulttype를 사용한 구현 :
주문 세부 사항을 주문 대표로 매핑하는 경우 직접 처리하고 이중 루프를 사용하여 트래버지를 제거하고 중복 레코드를 제거하며 주문 세부 사항을 주문 테일로 배치해야합니다. 이것은 더 귀찮을 것입니다.
다수
사용자 및 사용자의 구매 제품 정보를 쿼리하는 경우 이는 다수이며 Mybatis의 다수의 매핑을 사용할 수 있습니다.
사용자 정보를 사용자에게 매핑합니다. 주문 목록 속성 목록 <orders> ordersList 추가 사용자 클래스에서 사용자가 만든 순서를 OrdersList에 주문하고 주문 세부 사항 목록 목록 <SERTDETAIL> ORDERDETIALS를 주문하고 주문 세부 사항을 ORDERDETIAL에 매핑하고 OrderDetail에 항목을 추가하고 항목에 해당하는 항목을 항목에 추가하십시오.
1. 포조
공개 클래스 OrderDetail {개인 정수 ID; 개인 정수 주문; 개인 정수 아이템; 개인 정수 itemsnum; // 제품 정보 개인 항목 항목; 공개 정수 getId () {return id; } public void setId (정수 ID) {this.id = id; } public Integer getOrdersId () {return OrdersId; } public void setordersId (Integer OrdersId) {this.ordersid = OrdersId; } public integer getItemsId () {return itemsId; } public void setitemsId (Integer itemsId) {this.itemsid = itemsId; } public integer getItemsnum () {return itemsnum; } public void setitemsnum (Integer itemsnum) {this.itemsnum = itemsnum; } 공개 항목 getItems () {반환 항목; } public void setItems (항목 항목) {this.Items = 항목; } @override public String toString () {return "orderDetail [id =" + id + ", OrdersId =" + ordersId + ", itemsId =" + itemsId + ", itemsNum =" + itemsNum + "]; }}2. 파일 매핑 :
<!-사용자 쿼리 및 구매 제품-> <resultmap type = "com.luchao.mybatis.first.po.user"id = "ordersitemsresultmap"> <!-사용자 정보-> <id councm = "user_id"속성 = "id" /> <result column = "username" "username" "sex renate ="sex ""exhent ""sex ""recults " column = "property ="address " /> <!-주문 정보 사용자가 여러 주문에 해당하고, 수집 매핑을 사용하고-> <collection property ="ordersList "oftype ="com.luchao.mybatis.first.po.orders "> <id councm ="id "id" /> <result column = "user column ="user column = "number =" "" "" " />>>. <result column = "createTime"propertion = "createTime" /> <result column = "note"propertion = "note" /> <!-주문 세부 사항 하나의 주문 세부 사항은 여러 세부 사항을 포함합니다.> <collection property = "orderdetails"oftype = "com.luchao.mybatis.first.po.orderDetail"> id column = "idecil" /> <expert = "airect ="idect.first.po.orderDetail "> <result column = "items_num"property = "inciptnum" /> <result column = "orders_id"property = "ordersid" /> <!-제품 정보 하나의 주문 세부 사항 하나는 하나의 제품에 해당합니다-> <ancization property = "items"javatype = "com.luchao.mybatis.first.po.items"> id column = "id id"id "id"id "id" 속성 = "name"/> <result column = "items_detail"property = "detail"/> <result column = "items_price"property = "price"/</assion> </collection> </collection> </resultmap> < "inderOrderAnditemMap"resultMap = "OrdersItItemSresultMap"> select.surername, userEn, user.sox, userex. OrderDetail_id, OrderDetail.Items_id, OrderDetail.Items_num, OrderDetail.orders_id, items.id items_id, items.name items_name, items.detail items_detail, items.price items_price, Orders, OrderDetail, Orders.user_id = user.DERS.Oder and OrderDETEAL. orderdetail.items_id = items.id </select>
다수는 기본적으로 일대일과 일대일의 조합이라는 것을 알 수 있습니다. 모든 복잡한 문제는 기본적으로 간단한 문제의 조합입니다. 신중하게 분석하는 한 원칙을 이해할 수 있습니다.
3. 맵퍼 인터페이스 :
// Query Order, 주문 세부 사항 및 사용자 정보 resultmap 공개 목록 <user> findorderanditemmap ()는 예외를 던집니다.
4. 테스트 코드 :
public void findOrderAndItemMap ()는 예외를 던지려면 {// sqlsession 객체 sqlsession sqlsession = sqlsessionfactory.opensession (); // OrderMapper 객체를 작성하고 MyBatis는 자동으로 Mapper 프록시 OrderMapper OrderMapper = sqlSession.getMapper (OrderMapper.class)를 생성합니다. // Query Order 및 사용자 정보 목록으로 OrderMapper 메소드를 호출하여 사용자 = OrderMapper.FindOrderAndItemMap (); System.out.println (user.get (). getOrdersList (). get () .getOrderDetails (). get (). getId ()); // system.out.println (Orders.size ()); }다수의 쿼리 요약 :
위의 요구 사항은 Quencepe를 사용하여 쿼리 된 레코드를 확장 된 POJO에 매핑하는데, 이는 자세한 목록의 기능을 구현하는 것이 매우 간단하지만 지연된로드를 달성 할 수는 없습니다. ResultMap을 사용하여 사용자가 구매 한 세부 항목 목록을 객체에 매핑하여 게으른로드가 가능합니다. resultmap 사용은 쿼리 결과 매핑에 대한 특별한 요구 사항이있는 기능과 예를 들어 특수 요구 사항을 여러 목록을 포함한 목록에 매핑하는 것과 같은 기능입니다.
결과 맵 요약
1. 결과 유형 :
효과:
SQL 열 이름 Pojo 속성 이름 일관성에 따라 쿼리 결과를 pojo로 매핑하십시오.
기회:
사용자가 제품 세부 정보를 구매하고 페이지의 모든 관련 쿼리 정보를 표시 할 때와 같은 자세한 레코드의 일반적인 표시는 resultType를 사용하여 각 레코드를 POJO로 매핑하고 프론트 엔드 페이지의 목록 (POJO)을 가로 지르십시오.
2. 결과 맵 :
협회와 컬렉션을 사용하여 일대일 및 일대일 고급 매핑을 완료하십시오 (결과에 대한 특별한 매핑 요구 사항이 있습니다).
협회:
효과:
관련 쿼리 정보를 POJO 객체에 매핑하십시오.
기회:
관련 정보 쿼리를 용이하게하려면 연관성을 사용하여 관련 주문 정보를 사용자 객체의 POJO 속성에 매핑 할 수 있습니다. 주문 쿼리 및 관련 사용자 정보.
resulttype를 사용하면 쿼리 결과를 pojo 객체의 pojo 속성에 매핑 할 수 없습니다. 결과 세트 쿼리를 가로 지르는 요구에 따라 resulttype 또는 resultmap을 사용할지 여부를 선택하십시오.
수집:
효과:
관련 쿼리 정보를 목록 수집에 매핑하십시오.
기회:
트래버스 연관 정보 쿼리를 용이하게하려면 컬렉션을 사용하여 연관 정보를 목록 수집에 매핑 할 수 있습니다. 예를 들어, 사용자 권한 범위 모듈과 모듈 아래의 메뉴 쿼리, 모듈 목록을 맵핑하여 모듈 객체의 메뉴 목록 속성을 맵핑 할 수 있습니다. 이것의 목적은 쿼리 결과 세트를 쿼리하는 트래버스 쿼리를 용이하게하는 것입니다.
resulttype를 사용하는 경우 쿼리 결과를 목록 컬렉션에 매핑 할 수 없습니다.
위의 내용은 편집자가 소개 한 MyBatis Advanced Mapping Learning Tutorial입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 더 알고 싶다면 Wulin.com 웹 사이트에주의를 기울이십시오!