이전 기사 "Javaweb Practical Mall Project Development (i)"는 엔티티 클래스와 페이지 매김 도구를 만들었습니다. 이 기사는 mybatis를 사용하여 DAO 레이어를 만듭니다.
또한 MyBatis API 문서는 참조로 사용할 수 있습니다.
1. mybatis의 사용
1. 선반 패키지를 소개합니다
여기에 MyBatis 및 MySQL 패키지를 LIB에 소개합니다
2. 데이터베이스 환경을 구성하려면 config.xml을 쓰십시오
먼저 코드를 게시 한 다음 하나씩 설명하십시오
<? xml version = "1.0"encoding = "utf-8"?> <! doctype configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configer <configer ""구성. <faintealiases> <package name = "com.model"/> </intlealiases> <환경 기본값 = "개발"> <환경 ID = "개발"> <transactionManager type = "jdbc"/> <dataSource type = "pooled"> <property name = "driver"value = "$ {driver}"/> <속성 이름 = "url"$ {url ""url ""url ". 이름 = "username"value = "$ {username}"/> <속성 이름 = "password"value = "$ {password}"/> </dataSource> </dataSource> </dataSource> </dataSource> </dataSource> </dataSource> </<환경 id = "Publish"> <transactionManager type = "jdbc"/> <datasource type = "pooled"/> </environments>첫 번째 단계는 XML 파일 형식, 즉 dtd를 소개하는 것입니다. 즉, Mybatis가 제공 한 템플릿에서 직접 복사해야합니다.
<! docType configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
질문 1
속성 함수는 해당 속성 파일을 구성하고 리소스가 해당 경로를 지정하고 속성 파일에서 데이터베이스 드라이버, URL, 사용자 이름, 비밀번호 등을 구성 할 수 있습니다. 다음을 참조하십시오. 이러한 방식으로 MyBatis는 다음 매개 변수를 자동으로 읽고 $ {}를 사용하여 XML에서 참조 할 수 있습니다.
드라이버 = com.mysql.jdbc.driver url = jdbc : mysql : // localhost : 3306/shop username = root password = 123456
질문 2
변형기는 지정된 경로에서 별명을 구성합니다. 단일 별명 단일 이름 <faveleias type = "com.model.user"alias = "user"/> 이런 방식으로 com.model.user가 별칭 사용자로 변경됩니다. 나중에 모든 이름을 쓸 필요가 없습니다. 배치 수정 <패키지 이름 = "com.model"/>를 교체하려면 사용자 만 교체하면됩니다. 이러한 방식으로 패키지의 모든 클래스를 수정할 수 있으며 기본 별칭은 엔티티 클래스 이름입니다.
질문 3
환경은 데이터베이스 환경을 구성하는 데 사용되며 개발 환경 및 릴리스 환경과 같은 여러 환경을 구성 할 수 있으므로 기본값은 기본 환경을 나타냅니다.
환경에는 환경에 대한 환경이 없다는 점에 유의하십시오. ID로 구별되므로 ID는 독특해야합니다.
TransactionManager는 연결 데이터베이스 유형을 나타내며 JDBC는 Java에 연결됩니다.
DataSource 데이터 소스 모드를 구성하고 풀링은 연결 풀 모드입니다. 다른 모드의 경우 공식 문서로 이동하여이를 확인하고 필요에 따라 선택할 수 있습니다.
속성은 데이터베이스 연결을 구성하는 것입니다. 이름을 움직이지 말고 값 = "드라이버"를 수정하십시오. 다음은 상단 속성 파일에서 구성을 읽기 위해 {}를 사용합니다. 이름을 일치시키는 데주의를 기울여 읽으십시오.
3. Mapper 매핑 SQL 문을 쓰십시오
여기에 userdao로드 메소드를 작성합니다. 즉, ID를 기반으로 사용자를 읽습니다. 다음 코드는 공개 사용자로드 (int id) 기능과 같습니다. MyBatis의 경우 교체 유형 #{name}과 같은 유형에 따라 교체품의 두 가지 유형이 '이름'으로 대체됩니다. 다른 하나는 $ {} 교체품으로 원래 형식으로 직접 대체되며 다른 것들을 추가하지 않습니다.
<? xml version = "1.0"encoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> * 사용자에서 id =#{id} </select> </mapper>첫 번째 단계는 DTD 헤더 파일을 소개하고 XML 파일의 규칙을 공식화하는 것입니다.
태그를 선택하고 현재 선정 문임을 나타냅니다.
ID 속성은 ID에 의해 참조 된 함수 이름과 동일합니다.
들어오는 매개 변수 유형을 나타내는 ParameterType 속성은 기본 유형 또는 사용자 정의 유형을 지정할 수 있습니다. 사용자 정의 유형 인 경우 Get 메소드가 자동으로 호출되어 속성을 얻습니다.
resultType 속성 인 return 값 유형은 유형을 직접 사용자 정의 할 수 있으며 설정 메소드를 자동으로 호출하여 쿼리 매개 변수를 설정하고 후속 기사에서 더 많은 속성을 사용합니다.
4. Mapper지도에 전화하십시오
호출하기 전에 config.xml에서 매핑을 구성해야합니다. 여기에 구성된 XML은 파일 경로입니다.
<Mappers> <Mapper Resource = "com/model/user.xml"/> </mappers>
그런 다음 테스트 클래스를 작성하십시오
public static void main (string [] args) {try {inputStream is = resources.getResourceasStream ( "config.xml"); // 구성 파일 읽기 sqlsessionFactory factory = new SqlSessionFactoryBuilder (). 빌드 (is); session.selectone (user.class.getname ()+". load", 1); //로드 함수 시스템을 호출합니다. out.println (user.getNickName ()); // oncepput nickname.close (); // close session} catch (ioexception e) {e.printstacktrace (); }} 결과:
5.sqlsession 도구 클래스
위와 같은 테스트 클래스 작성은 너무 번거롭기 때문에 DAO 계층의 사용을 용이하게하기 위해 SQLSESSION을 캡슐화합니다.
package com.util; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsessionactory; import org.apache.ibatis.sqlsession.sqlsessionfactory; import org.apuilder java.io.ioexception; import java.io.inputStream;/*** 2016/2/23에 NL101에 의해 생성되었습니다. */public class sessionUtil {private static sqlsessionfactory factory = null; static {try {inputstream은 = resources.getresourceasstream ( "config.xml"); // 구성 파일 읽기 팩토리 = 새로운 sqlsessionsitessfactoryBuilder () 빌딩 (is); 구성 파일을 사용하여 공장 생성} catch (ioException e) {e.printstacktrace (); }} / ** * get session * @return * / public static sqlsession getsession () {return factory.opensession (); } / ** * 닫기 세션 * @param 세션 * / public static void closesession (sqlsession session) {if (session! = null) session.close (); 세션 = null; }}위는 mybatis의 기본 사용이며 이제 DAO 층을 캡슐화하기 시작합니다.
2. Dao를 캡슐화하십시오
1.userdao.java
공개 사용자로드 (int id) ID를 기반으로 사용자를받습니다.
위에 쓰여졌습니다
Public Boolean Add (사용자 사용자) 사용자 추가
XML 코드
<!-사용자 추가-> <insert id = "add"parametertype = "user"> user 값 (null,#{username},#{password},#{nickname},#{type}) </insert>자바 코드
/** /*** 사용자 추가* @param 사용자 추가 할 사용자를 추가 할 수 있습니다* @return true success* /public boolean add (사용자) {int isadd = 0; sqlsession session = sessionUtil.getSession (); {isadd = session.insert (user.class.getname ()+". add", user); session.commit (); // 제출} catch (예외 e) {session.rollback (); // rolleback 제출이 실패하면} 마지막으로 {sessionUtil.closesession (session); } system.out.println (ISADD); 반환 ISADD> 0; } public boolean delete (int id) 사용자를 삭제합니다XML 코드
<!-사용자 삭제-> <delete id = "delete"parametertype = "int"> id =#{id} </delete> using에서 삭제합니다.자바 코드
/ ** * id * @param id를 기반으로 사용자 삭제를 삭제하여 사용자의 ID를 삭제합니다. sqlsession session = sessionUtil.getSession (); {isdelete = session.delete (user.class.getname ()+". delete", id); 세션 .commit (); } catch (예외 e) {session.rollback (); // 실패한 return system.out.println ( "사용자 실패 삭제"); e.printstacktrace (); } 마침내 {sessionUtil.closesession (세션); } return isdelete> 0; } public boolean update (사용자) 업데이트 사용자XML 코드
<!-사용자 수정-> <업데이트 id = "Update"ParameterType = "User"> Usude Usude user set username =#{username}, password =#{password}, nickname =#{nickname}, type =#{type} 여기서 id =#{id} </update>자바 코드
/ *** 사용자 업데이트* @param 사용자 업데이트 할 사용자* @return true success*/ public boolean update (사용자) {int isupdate = 0; sqlsession session = sessionUtil.getSession (); {isupdate = session.delete (user.class.getname ()+". 업데이트", 사용자); 세션 .commit (); } catch (예외 e) {session.rollback (); // 실패한 return system.out.println ( "업데이트 실패"); e.printstacktrace (); } 마침내 {sessionUtil.closesession (세션); } return isupdate> 0; } 공개 사용자 로그인 (String username, String Password) 사용자가 존재하는지 결정합니다.XML 코드
<!-사용자 로그인 판단-> <선택 ID = "로그인"ParameterType = "String"resultType = "User"> select * user username =#{username} </select>자바 코드
/ *** 사용자가 존재하는지 결정* @param 사용자 이름 사용자 이름* @param password password* @return Existence 사용자가 존재하지 않습니다. sqlsession session = sessionUtil.getSession (); {user = session.selectone (soapbinding.use.class.getname ()+". login", username); // 비밀번호가 잘못된 경우 사용자를 null로 설정 if (! user.getPassword (). equals (password)) {user = null; }} 마침내 {sessionUtil.closesession (세션); } 리턴 사용자; } 공개 호출기 찾기 (문자열 이름, 문자열 정렬, 문자열 순서) 페이지 매김 처리 XML 코드 :
동적 SQL이 여기에서 사용됩니다. 동적 SQL과 관련하여, 그것은 어디에, if, 선택 등과 같은 태그를 사용하는 것입니다. 공식 문서를 참조 할 수 있습니다. 또한 Mybatis에는 Null의 개념이 존재하지 않습니다. 예를 들어, 사용자 = null을 통과하지만 교체 할 때 "null"문자열로 대체됩니다. 이 값을 사용할 수없는 경우 NULL입니다.
<!-> <select id = "find"parametertype = "map"resulttype = "user"> select * from user <if test = "null"> where ( #{name} 또는 encername with #{name}) </if> order by $ {sort} $ {order} {pagestart}, #{pagestart}, 페이지 레코드-> <select id = "findCount"ParameterType = "map"resultType = "int"> user <if test = "name! = null"> where ( #{name} 또는 #{name}과 같은 별명) </if> </select>에서 count (*)를 선택하십시오.Java Code : 전반적으로, 그것은 여전히 이전 기사에서 디자인 한 페이지 매김을 기반으로합니다.
/*** 지정된 조건을 기반으로 한 페이지 쿼리* @param 이름 쿼리 조건, null은 무조건* @param 정렬 정렬 조건을 나타냅니다. 님은 id* @param 주문 정렬 조건, null은 오름차순을 나타냅니다* @return*/public pager <user> 찾기 (문자열 이름, 문자열, 문자열 순서) {int pagestart.getpagest (); // SystemContext.getPagesize (); // Page Size Pager <user> Pager = New Pager <> (); Map <String, Object> Maps = New Hashmap <> (); if (name! = null &&! name.equals ( "")) {name = "%"+name+"%"; maps.put ( "이름", 이름); } if (sort == null || sort.equals ( "")) {sort = "id"; // 기본적으로 id로 정렬} if (order == null || order.equals ( "")) {order = "asc"; // default sort} maps.put ( "sort", sort); maps.put ( "Order", Order); maps.put ( "pagestart", pagestart); maps.put ( "pagesize", pagesize); sqlsession session = sessionUtil.getSession (); List <user> datas = null; try {datas = session.selectList (user.class.getName ()+". 찾기", 맵); // 레코드 호출기 get pages.setdatas (datas); Pager.setPagesize (pagesize); Pagers.setpagestart (pagestart); int totalrecord = session.selectone (user.class.getname ()+". findCount", Maps); // 총 레코드 수자 수를 얻습니다. Pager.setPageIndex (pagestart/pagesize+1); } 마침내 {sessionUtil.closesession (세션); } 반환 페이지; } 현재 프로젝트 구조
다음 기사에서는 코드 작성을 용이하게하기 위해 일반 기반을 쓸 것입니다. 그리고 Mybatis의 다른 특성의 사용을 계속 배우십시오. 읽어 주셔서 감사합니다.