다음으로, 이전 기사 "Javaweb Practical Mall Project Development (ii)" 는 주로 General Rasedao.java를 구현하고 결과 맵을 사용하여 관련 객체를 매핑합니다.
1. General Basionao.java
모든 사람이 사용해야하므로 제네릭이 사용됩니다. 주목해야 할 문제는 user.getClass (). getName ()과 같은 코드를 수정해야한다는 것입니다. 수정 방법은 매개 변수 클래스 TC와 함께 전달한 다음 tc.getName ()을 사용하는 것입니다.
완전한 코드 :
패키지 com.dao; import com.model.pager; import com.util.sessionutil; import com.util.systemcontext; import org.apache.session.sqlsession; import java.util.hashmap; import java.util.list; import java.util.map;/*** import java.util.list; import java.util.map;/*** import java.util.list; */public class basedao <t> {/** * id * @param id를 기반으로 t 유형을 꺼내서 t type * @return */public t load (class <t> tc, int id) {sqlsession session = sessionUtil.getSession (); t t = null; try {t = session.selectone (tc.getName ()+". load", id); } 마침내 {sessionUtil.closesession (세션); } return t; } / *** 추가 할 t 유형* @param t t 유형을 추가* @return true success* / public boolean add (t t) {int isadd = 0; sqlsession session = sessionUtil.getSession (); {isadd = session.insert (t.getClass (). getName ()+". add", t); session.commit (); // commit} catch (예외 e) {session.rollback (); // rolle b } return isadd> 0; } / *** id* @param id를 기반으로 t 유형을 삭제하려면 t* @return true success id를 삭제합니다* / public boolean delete (class <t> t, int id) {int isdelete = 0; sqlsession session = sessionUtil.getSession (); try {isdelete = session.delete (t.getName ()+". delete", id); 세션 .commit (); } catch (예외 e) {session.rollback (); // 실패한 return system.out.println ( "삭제 실패"); e.printstacktrace (); } 마침내 {sessionUtil.closesession (세션); } return isdelete> 0; } / *** 업데이트* @param t 사용자 업데이트* @return true success* / public boolean update (t t) {int isupdate = 0; sqlsession session = sessionUtil.getSession (); try {isupdate = session.delete (t.getClass (). getName ()+". 업데이트", t); 세션 .commit (); } catch (예외 e) {session.rollback (); // 실패한 return system.out.println ( "업데이트 실패"); e.printstacktrace (); } 마침내 {sessionUtil.closesession (세션); } return isupdate> 0; }/*** 지정된 조건을 기반으로 한 페이징 쿼리* @param 맵 조건 컬렉션* @return*/public pager <t> 찾기 (class <t> t, map <string, object> 맵) {int pagestart = systemcontext.getPagestart (); // page int pagesize = systemcontext.getPagestArt (); // page pager <t> page pager <t> page pager <t> maps.put ( "pagestart", pagestart); maps.put ( "pagesize", pagesize); sqlsession session = sessionUtil.getSession (); List <T> DATAS = NULL; try {datas = session.selectList (t.getName ()+". 찾기", 맵); // 레코드 호출기를 가져옵니다. 세트 데타 (datas); Pager.setPagesize (pagesize); Pagers.setpagestart (pagestart); int totalrecord = session.selectone (t.getName ()+". findCount", Maps); // 총 레코드 호출기 수를 가져옵니다. Pager.setPageIndex (pagestart/pagesize+1); } 마침내 {sessionUtil.closesession (세션); } 반환 호출기; } / *** 지정된 조건에 따른 데이터의 일부 가져 오기* @param 맵 조건 세트* @return* / public pager <t> 목록 (class <t> t, map <문자열, 개체> 맵) {pager <t> pages = new Pager <> (); sqlsession session = sessionUtil.getSession (); List <T> DATAS = NULL; try {datas = session.selectList (t.getName ()+". List", Maps); // 레코드 호출기 get peagers.setdatas (datas); Pager.SetTotalRecord (Datas.Size ()); } 마침내 {sessionUtil.closesession (세션); } 반환 호출기; }}동일한 userdao.java에도 해당 수정이 필요합니다
Public Class userDao는 ind * @param id를 기반으로 ind * @param id * @return * / public user load (int id) {return super.load (user.class, id)를 제거하기 위해 id * @param id를 기준으로 사용자를 제거합니다. }/* 다른 기능은 하나별로 게시되지 않으며 모두 비슷한 방식으로 작성됩니다*/}2. 결과map의 매핑
간단히 말해서, 데이터베이스의 필드 정보가 객체의 속성과 일치하지 않으면 resultmap을 통해 매핑해야합니다.
예 : 주소 속성에 다음과 같이 사용자 엔티티 클래스가 있습니다.
공개 클래스 주소 {private int id; 개인 문자열 이름; 개인 문자열 전화; 개인 문자열 우편 번호; // user_id private user user 대신 사용자 객체를 직접 똥; ```````````}}}그런 다음 주소를 꺼내고 해당 사용자를 꺼내고 싶습니다. 그러나 이들은 두 가지 객체이며 둘 다 ID 속성이 있으므로 설정 방법을 호출하여 속성을 설정할 때 MyBatis가 혼란스러워집니다. resultmap을 사용하는 목적은이 혼란을 제거하는 것입니다.
로드 SQL을 작성하십시오
<!-주소를로드-> <!-여기에서 테이블 연결이 필요하며 사용자가 꺼집니다. 검색된 주소가 비어 있지 않은지 확인해야하며, 중복 속성 ID-> <select id = "load"parametertype = "int"resultmap = "jesctmap"> select *, t1.id as a_id 'as a_id as user t2 on (t1.user_id = t2.id) {id}; </선택>여기서 우리는 resultmap을 사용하여 매핑합니다.
주소 맵
<resultmap id = "addressmap"type = "add 속성 = "id"/> <result column = "username"property = "username"/> <result column = "nickname"/> <result column = "nickname"/> <result column = "nickname"/> <result column = "type"property = "type"/> </accocation> </resultmap>
위 구성이 완료되면 검색 할 때 MyBatis는 자동으로 해당 세트 메소드를 호출하고 속성을 엔티티 클래스로 설정합니다.
시험
패키지 com.dao; import com.model.address; public class jand 주소 주소 = addressDao.load (1); System.out.println (address.toString ()); } / *** 주소를로드* @param id로드 할 주소의 ID를로드* @return로드 할 주소를 반환하고 NULL이로드되지 않습니다* / public address load (int id) {return super.load (address.class, id); }} 렌더링에서 볼 수 있듯이 매핑 속성이 꺼지는 한 매핑되지 않은 모든 것은 널입니다.
이 아이디어를 따라 다른 기능을 완료하십시오
XML 코드 :
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd "> <Mapper Namper Face ="! 데이터베이스는 객체의 속성과 일치하지 않으므로 resultMap-> <resultmap id = "jourditmap"type = "autopapping ="true "> <!-결과에서 a_id를 id로 a_id = 다른 자동 캡처는 자동으로 일치합니다-> <id column ="a_id "propert ="ider properties-> aning arefertive-> anher Properties- " > <!-MAP user_ID-> <id councle = "user_id"property = "id"/> <result column = "username"property = "username"/> <result column = "닉네임"속성 = "닉네임"/> <결과 열 = "nickname"/> <result column = "type"propert = "type"/> </resultmap> <! <! <! 여기에서 사용자가 꺼집니다. 연결은 검색된 주소가 비어 있지 않도록하고 중복 속성 ID에 대한 별칭을 보장합니다 .-> <select id = "load"parametertype = "int"resultmap = "jesssMap"> select *, t1.id as a_id as a_id 'as user t2 on (t1.user_id = t2.id) {id}; </select> <!-주소 추가-> <insert id = "add"parametertype = "address"> 주소 값에 삽입 (null,#{postcode}, $ {user_id}) </insert> <!-<ind id el <el <el <ele <ele <ledete "el <ledete"delete "parametertype ="<ledete id id el} </insert> <! </delete> <!-주소를 수정-> <업데이트 id = "업데이트"ParameterType = "address"> 업데이트 주소 세트 이름 =#{name}, 폰 =#{phostcode = {postcode} id =#{id} </update> <!-지정된 사용자의 모든 주소를 찾으십시오.> <slect ""list ""map ""rist " 주소 t1에서 'a_id'로 *, t1.id를 선택하십시오.자바 코드 :
package com.dao; import com.model.address; import com.model.pager; import java.util.hashmap; import java.util.map;/*** 2016/2/23에 생성되었습니다. */public class addressDao 확장 기반 <dassching> {public static void main (string [] args) {jesdrendao addressDao = new AdressDao (); Pager <dass System.out.println (Pagers.getDatas (). size ()); } / ** * 주소를로드 * @param id로드 할 주소의 ID를로드 * @return로드 할 주소를 반환하고 null 실패 * / public add } / *** 주소 추가* @param 주소 추가 할 주소를 추가 할 주소* @param user_id 추가 할 주소에 해당하는 user_id* @return true boolean 주소 (주소 주소, int user_id) {userdao userdao = new userDao (); if (userDao.load (user_id) == null) {return false; } return super.add (주소); } / *** 주소 삭제* @param id 주소에 해당하는 ID를 삭제하려면* @return true 삭제 성공* / public boolean delete (int id) {return super.delete (address.class, id); } / *** 주소 업데이트* @param 주소 업데이트 할 주소를 업데이트 할 주소* @return true 업데이트 성공* / public boolean update (주소 주소) {return super.update (주소); } / *** 주소 업데이트* @param 주소 업데이트 할 주소를 업데이트 할 주소* @return true 업데이트 성공* / public boolean update (주소 주소) {return super.update (주소); } / ** * 사용자 ID * @param user_id * / public Peager <desssure> 목록 (int user_id) {map <String, Object> Maps = new Hashmap <> (); maps.put ( "user_id", user_id); Super.list를 반환합니다 (주소 .class, 맵); }}Ado 레이어가 이런 식으로 작성되면 아무런 문제가 없습니다.
위는이 기사에 관한 것입니다. 이것은 전체 Javaweb Mall 프로젝트의 개발에 관한 것입니다. 나는 그것이 당신의 학습에 도움이되기를 바랍니다.