프로젝트의 비즈니스 요구가 다르기 때문에 때로는 데이터 테이블 (예 : 동적 테이블 빌딩, 작동 테이블 필드 등)을 동적으로 작동해야합니다. 일반적으로 로그, 장치 실시간 위치 정보 등을 데이터 테이블에 저장하고 특정 기간, LOG_201806, LOG_201807 등에 스토리지를위한 테이블을 생성합니다. 여기서 MyBatis를 사용하여 동적 SQL을 사용합니다.
Dynamic SQL은 Mybatis의 강력한 특징 중 하나입니다. SQL 문을 선행하기 전에 MyBatis는 SQL을 동적으로 구문 분석하고이를 BONDSQL 객체로 구문 분석하며 여기에서 동적 SQL을 처리하는 데 사용됩니다.
동적 SQL 파싱에서는 #{} 및 $ {}의 효과가 다릅니다.
#{} JDBC 사전 컴파일 된 문의 매개 변수 마커로 구문 분석되었습니다.
다음 SQL 문과 같은 :
이름 = #{name}; 다음과 같이 구문 분석됩니다.
선택 *에서 name =?;
#{}가 매개 변수 자리 표시 자로 구문 분석되는 것을 볼 수 있습니까? .
$ {}는 순수한 문자열 교체 일 뿐이며, 동적 SQL 구문 분석 단계에서 가변 교체가 수행됩니다.
다음 SQL 문과 같은 :
사용자 중에서 * name = $ {name}을 선택하십시오. "Joanna"매개 변수를 전달하면 SQL은 다음과 같이 구문 분석됩니다.
이름 = "joanna";
사전 컴파일 전에 SQL 문에는 더 이상 변수 이름이 포함되어 있지 않음을 알 수 있습니다.
요약하면, $ {} 변수의 교체 단계는 동적 SQL 구문 분석 단계에 있으며 #{} 변수의 교체는 DBMS에 있습니다.
다음은 mybatis 테이블의 동적 생성을 구현하고 테이블이 존재하는지 여부를 결정하고 테이블 기능을 삭제합니다.
mapper.xml
<? 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 "> <mapper nestpeace ="xx.xx.xx.xx.xx.xx.xx.xx.xx.xx.xx.xx.xx. <select id = "Eventable"ParameterType = "String"resultType = "Integer"> information_schema.tables에서 count (*)에서 count (*)를 선택하십시오. $ {tableName} (id bigint (20) NOT NULL AUTO_INCREMENT, EntityId bigint (20) NOLL NOT NULL, DX DOWAL NULL, DY Double NULL, DZ Double NULL NULL, NTYPE VARCHAR (32) NULL, GNSSTIME BIGINT (20) NOT NOT NOT NOLL, SPEAT SPEAT DEFAULT NULL, DIFAULT NULL, VARCHALL (255) (id)) </update> <insert id = "insert"parametertype = "xx.xxx.xx.po.trackpoint"> $ {tableName} (entityId, dx, dy, dz, ntype, gnsstime, 속도, 방향, 속성) 값 ( #{trackpoint.entityId}, #{trackpoint.dy}, #{trackpoint.dz}, #{trackpoint.ntype}, #{trackpoint.gnsstime}, #{trackpoint.speed}, #{trackpoint.direction}, #{trackpoint.attributes}) </mapper>Mapper.java
패키지 xx.xxx.xx.mapper;
import org.apache.ibatis.annotations.param; import xx.xxx.xx.po.trackpoint; public interface OperateTableMapper {int Eventialtable (String TableName); int droptable (@param ( "tablemename") String tabename); int createNewtable (@Param ( "tableName") String TableName); int insert (@param ( "tablename") String tablename,@param ( "trackpoint") TrackPoint TrackPoint);}요약
위는 편집자가 소개 한 Mybatis Dynamic Creation 테이블의 예제 코드입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!