1. 직접 SQL 쿼리를 실행합니다.
1. Mappers 파일에서 발췌
<resultmap id = "acmodelresultmap"type = "com.izumi.instancemodel"> <result column = "instanceid"property = "instanceid"jdbctype = "varchar" /> <result column = "instancename"property = "instancename"jdbctype = "varchar"< /resultmap> < "getinstancemodel" resulttype = "com.izumi.instancemodel"> $ {paramsql} </select>2. Dao에서 발췌
public interface somedao {list <instancemodel> getinstancemodel (@param ( "paramsql") String SQL);}3. 주목할만한 것들
3.1 : 전달 된 메소드의 매개 변수는 다음 사양을 따라야합니다. "XXX를 instanceId로 선택하고 xxx를 InstanceName ....."에 따라야합니다. 그렇지 않으면 MyBatis는 쿼리 결과를 Java 객체로 자동 전환 할 수 없습니다.
3.2 : Mappers 파일의 #{} 구문과 $ {} 구문의 차이 :
기본적으로 #{} 구문은 MyBatis가 준비된 스테이트 속성을 생성하고 PreparedStatement 매개 변수 (=?)를 사용하여 값을 설정하게합니다. 변하지 않은 문자열을 SQL로 직접 대체하려면 $ {}를 사용할 수 있습니다.
다시 말해, Mybatis가 #{}를 볼 때, JDBC 프로그래밍에서와 마찬가지로 물음표에 값을 할당하기 위해 SQL의 변수에 값을 할당한다고 생각할 것입니다 (예 : Mybatis는 유형을 판단하고 이전과 이후에 단일 따옴표를 자동으로 추가합니다). Mybatis가 $ {}를 볼 때, 그것은 처리를 수행하지 않고 변수의 값으로 직접 대체합니다.
따라서 $ {}을 사용할 때 "jdbctype = varchar"와 같은 #{}와 같은 속성을 작성할 필요가 없습니다.
3.3 : resultType 및 resultMap
1의 작문 메소드에 따르면, 다음 <elecling>에서는 정의 된 결과 맵이 사용되지 않지만 resultType가 사용되기 때문에 <resultMap> 부분을 사용하지 않고 삭제할 수 있습니다.
따라서 <select>의 반환 값 정의를 작성하는 두 가지 방법이 있음을 알 수 있습니다. 하나는 resultMap을 정의한 다음이 resultMap을 참조하는 것입니다. 다른 하나는 클래스의 경로를 지정하기 위해 resulttype를 직접 사용하는 것입니다.
2. 데이터의 배치 삽입
1. Experience는 xxx 값 (xx) (xxx)에 삽입을 사용하는 것을 xxx 값 (xx)에 삽입하고 xxx 값 (xxx)에 삽입, xxx 값 (xxx)에 삽입하는 것보다 효율적이라고 말합니다.
2. Mybatis의 사용
2.1. Mappers 파일에서 발췌
<insert id = "insertbatch"> 학생에 삽입 (<include refid = "base_column_list" />) 값 <foreach collection = "list"item = "item"index = "index"separator = ","> (null,#{item.name},#{{item.sex},#{item.Address},#{ite}),#{#{#{#}). </foreach> </insert>2.2. 다오에서 발췌
공개 인터페이스 somedao {public void insertbatch (@param ( "List") 목록 <TodyTure 학생); }mybatis 배치 삽입 데이터에 대한 자세한 설명
먼저 Batch Mapper.xml 파일을보십시오
<insert id = "insertbatch"parametertype = "java.util.list"> <selectkey keyproperty = "fetchtime"order = "everence"resulttype = "java.lang.string"> select current_timestamp () </selectkey> kangaiduoyaodian (lecipt1, lort2, lorret, repucts, repubstorication) Unit, Approval_Certificate, Manufacturer, MarketPrice, VIPPrice, 웹 사이트, fetch_time, productDesc) 값 <foreach collection = "list"item = "item"index "index ="index "separator =", "> ( #{item.depart1}, #{item.depart2}, #{item.procttname}, #{item.generic.name}, #{item.img}, #{item.productspecification}, #{item.Unit}, #{item.ApprovalCeTrificate}, #{item.manufferire}, #{item.MarketPrice}, #{item.VipPrice}, #{item.website}, #{itemproctdc} ) </foreach> </insert>배치 처리에서주의가 필요한 몇 가지 문제가 있음을 발견했습니다.
1. 기본 키를 자동으로 얻습니다. insert에서 usegeneratedkeys =”true”keyproperty =”id”를 추가하십시오. 두 속성의 두 속성은 유효하지 않으며 데이터 삽입을 방해 할 수 있습니다. ID가 데이터베이스 자체 증가 인 경우 아무것도 쓸 수 없습니다. 삽입 된 명령문에서 기본 키 속성을 제거하고 사용하십시오.
<selectKey keyProperty = "id"order = "every"resulttype = "java.lang.integer"> select last_insert_id () </selectkey>
참고 : <selectkey> 태그는 삽입에만 존재할 수 있습니다. 배치 처리 중에 <selectkey>를 사용하는 것은 적합하지 않습니다. 기본 키 자체를 늘리거나 지정하는 것이 가장 좋습니다.
2. 삽입 시간을 얻는 것이 위에 나와 있습니다. MySQL을 사용하고 있습니다. MySQL 함수 인 한 사용할 수 있습니다. 삽입 시간과 기본 키는 MySQL 기능 중 하나입니다. . .