Mybatis 의 일반적인 mapper 사용
1,maven 에 의존 추가
통합 유 니 버 설 mapper
com.github.abel 533.mapper.Mapper 에 대한 통합 은 실제 적 으로 MapperHelper 를 설정 합 니 다.모두 세 가지 방식 이 있 습 니 다.자바 인 코딩,Spring 통합 및 사용 차단기 설정 입 니 다.
(1)Java 인 코딩
Mybatis 를 단독으로 사용 하 는 것 에 대해 서 는 먼저 다음 과 같은 방식 으로 sqlSession Factory 를 만 듭 니 다.
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>2.3.4</version>
</dependency>
그 후에 JAVA 인 코딩 을 직접 사용 하면 sqlSession Factory 를 초기 화 하 는 곳 에서 아래 의 방식 으로 조작 할 수 있 습 니 다.Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
위 에 파 라 메 터 를 설정 할 때 set 방법 을 하나씩 호출 하여 진행 합 니 다.MapperHelper 의 MapperHelper(Properties properties)구조 방법 을 사용 하거나 setProperties(properties)방법 을 호출 하여.properties 설정 파일 을 통 해 설정 할 수 있 습 니 다.(2)Spring 통합
Spring 과 결합 하여 사용 할 때 xml 프로필 을 통 해 위의 자바 인 코딩 방식 의 효 과 를 얻 을 수 있 습 니 다.다음 설정:
// sqlSessionFactory session
session = sqlSessionFactory.openSession();
// MapperHelper
MapperHelper mapperHelper = new MapperHelper();
// UUID , UUID OGNL
// 32 :@java.util.UUID@randomUUID().toString().replace("-", "")
mapperHelper.setUUID("");
// , MYSQL,
mapperHelper.setIDENTITY("HSQLDB");
// , {num} , {0}.nextval,
// Oracle 3 , 0,1,2, SequenceName,ColumnName, PropertyName
mapperHelper.setSeqFormat("NEXT VALUE FOR {0}");
// catalog, , , sql catalog.tablename
mapperHelper.setCatalog("");
// schema, , , sql schema.tablename
// catalog, catalog.tablename
mapperHelper.setSchema("");
// , AFTER, (BEFORE|AFTER)
mapperHelper.setOrder("AFTER");
// Mapper
mapperHelper.registerMapper(Mapper.class);
mapperHelper.registerMapper(HsqldbMapper.class);
// ,
mapperHelper.processConfiguration(session.getConfiguration());
//OK - mapperHelper
설정 에서 sqlSession 에 의존 하 는 것 을 볼 수 있 기 때문에 이런 방식 을 사용 하면 Spring 설정 에서 sqlSession 의 존 재 를 확보 해 야 합 니 다.일반적으로 Spring 에서 sqlSession 을 정의 합 니 다.일반적인 정의 방법 은 다음 과 같다.<bean class="com.github.abel533.mapperhelper.MapperHelper"
depends-on="sqlSession" init-method="initMapper" scope="singleton" lazy-init="false">
<property name="mappers">
<array>
<!-- -->
<value>com.kang.mybatis.userMapper.mapper</value>
</array>
</property>
<!-- , -->
<property name="sqlSessions" ref="sqlSession"/>
</bean>
Spring 에서 이런 방식 을 사용 할 때 Spring 이 시작 되 었 을 때 모든 유 니 버 설 Mapper 가 처리 되 었 습 니 다.뒤쪽 에 서 는 직접 통용 방법 을 사용 할 수 있 으 며 차단기 가 필요 없다.메모:현재 Spring 과 통합 할 때 bug 가 존재 합 니 다.이 bug 가 발생 하 는 원인 은 다음 과 같 습 니 다.
만약 에 Mapper 가 프로젝트 가 시 작 될 때@Autowired 를 통 해 Service 나 다른 클래스 에 주입 되 지 않 았 다 면 이 Mapper 는 MybatisSqlSession 에 등록 되 지 않 은 Mapper 입 니 다.MapperHelper 는 시작 과정 에서 이 Mapper 를 처리 하지 않 았 기 때문에 다이나믹 SQL 은 이러한 이상 을 예화 할 수 없습니다.이 경우 차단기 로 만 처리 할 수 있다.
(3)차단기
이 세 가지 설정 방식 은 하나만 선택 하면 되 며 중복 설정 이 필요 없습니다.
차단기 기반 설정 방식 은 my batis 설정 방식 과 순수 spring 통합 방식 으로 나 뉜 다.
우선 Mybatis 설정 파일 방식:
mybatis-config.xml 에 다음 설정 을 추가 합 니 다:
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
그리고 순 Spring 설정 방식:사용자 정의 인터페이스 mapper 통합 유 니 버 설 mapper
우 리 는 mapper 인터페이스 에서 통용 되 는 Mapper
예 를 들 어 다음 의 예:
public interface UserMapper extends Mapper
}
Mapper
<plugins>
<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
<!--================================================-->
<!-- ( )-->
<!--================================================-->
<!--UUID -->
<!-- UUID OGNL -->
<!-- 32 :@java.util.UUID@randomUUID().toString().replace("-", "")-->
<!--<property name="UUID" value="@java.util.UUID@randomUUID().toString()"/>-->
<!-- , MYSQL, -->
<property name="IDENTITY" value="HSQLDB"/>
<!-- , {num} , {0}.nextval, Oracle-->
<!-- 3 , 0,1,2, SequenceName,ColumnName,PropertyName-->
<property name="seqFormat" value="{0}.nextval"/>
<!-- , AFTER, (BEFORE|AFTER)-->
<!--<property name="ORDER" value="AFTER"/>-->
<!-- Mapper , -->
<property name="mappers" value="com.github.abel533.mapper.Mapper"/>
</plugin>
</plugins>
그러나 범 형(실체 류)실체 클래스 는 다음 과 같은 규칙 과 데이터베이스 시트 에 따라 변환 되 며 주 해 는 모두 JPA 의 주해 입 니 다.
1)테이블 이름 은 기본적으로 클래스 이름 을 사용 하고,낙타 봉 은 밑줄 을 긋 습 니 다(대문자 만 처리 합 니 다).예 를 들 어 UserInfo 는 기본적으로 대응 하 는 테이블 이름 이 user 입 니 다.info。
2)표 이름 은@Table(name="tableName")을 사용 하여 지정 할 수 있 으 며,첫 번 째 기본 규칙 에 부합 되 지 않 는 경우 에는 이러한 방식 으로 표 이름 을 지정 할 수 있 습 니 다.
3)필드 는 기본적으로@Column 과 마찬가지 로 표 필드 로 되 어 있 으 며,표 필드 는 기본적으로 자바 대상 의 Field 이름 인 낙타 봉 을 밑줄 로 전환 합 니 다.
4)@Column(name="fieldName")을 사용 하여 세 번 째 규칙 에 맞지 않 는 필드 이름 을 지정 할 수 있 습 니 다.
5)@Transient 주 해 를 사용 하면 필드 를 무시 할 수 있 습 니 다.이 주 해 를 추가 한 필드 는 표 필드 로 사용 되 지 않 습 니 다.
6)메 인 키 의 필드 로@Id 주 해 를 설정 하 는 것 을 권장 합 니 다.여러 개의@Id 주해 필드 를 연합 메 인 키 로 사용 할 수 있 습 니 다.
7)기본 적 인 상황 에서 실체 클래스 에@Id 주 해 를 포함 하 는 필드 가 존재 하지 않 으 면 모든 필드 를 메 인 키 필드 로 사용 합 니 다(이러한 효율 은 매우 낮 습 니 다).
8)실체 류 는 계승 하여 사용 할 수 있다.
9)기본 유형,예 를 들 어 int 가 실체 필드 일 때 기본 값 0 이 있 고 제거 할 수 없 기 때문에 실체 류 에 서 는 기본 유형 을 사용 하지 말고 Integer,Long 등 기본 유형의 포장 유형 을 사용 하 는 것 을 권장 합 니 다.
위 에서 언급 한 것 외 에 도 Mapper 는 시퀀스(Oracle 지원),UUID(임의의 데이터베이스,필드 길이 32),메 인 키 자체 증가(Mysql,Hsqldb 와 유사)세 가지 방식 을 제공 했다.그 중에서 시퀀스 와 UUID 는 여러 개 를 설정 할 수 있 고 메 인 키 자체 증 가 는 하나만 설정 할 수 있다.
이 세 가지 방식 은 동시에 사용 할 수 없 으 며,동시에 존재 할 때 시퀀스>UUID>메 인 키 가 증가 하 는 우선 순위 에 따라 선택 할 수 있 습 니 다.다음은 구체 적 인 설정 방법 입 니 다.
1)사용 서열 은 다음 과 같은 주 해 를 추가 할 수 있다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations">
<array>
<value>classpath:mapper/*.xml</value>
<value>classpath:com/isea533/mybatis/mapper/*.xml</value>
</array>
</property>
<property name="typeAliasesPackage" value="com.isea533.mybatis.model"/>
<property name="plugins">
<array>
<bean class="com.github.abel533.mapperhelper.MapperInterceptor">
<property name="properties">
<!-- , mybatis-config.xml -->
<value>
mappers=com.github.abel533.mapper.Mapper
</value>
</property>
</bean>
</array>
</property>
</bean>
2)UUID 사용 시:4.567913.3)메 인 키 를 사용 하여 증가:
//@Id 주해 의 필드 에 국한 되 지 않 지만 하나의 실체 클래스 에 하나만 존재 합 니 다(계승 관계 에 도 하나만 존재 합 니 다)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
이 주 해 를 추가 하면 ID 를 다시 씁 니 다.
@Generated Value 의 generator 인 자 를 설정 하면 홈 키 를 더 많이 가 져 오 는 방법 을 지원 할 수 있 습 니 다.예 를 들 어 Oracle 에서 시퀀스 를 사용 하 는 것 입 니 다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select SEQ_ID.nextval from dual")
private Integer id;
Oracle 시퀀스 를 사용 할 때 설정 이 필요 합 니 다.
데이터 베 이 스 를 삽입 하기 전에 시퀀스 값 을 먼저 가 져 와 야 하기 때문에,그렇지 않 으 면 오 류 를 보고 할 수 있 습 니 다.
이러한 상황 에 대한 xml 는 다음 과 같 습 니 다.
4.567913.메 인 키 가 증가 하면 간단 한 쓰기 방법 도 있다.
//@Id 주해 의 필드 에 국한 되 지 않 지만 하나의 실체 클래스 에 하나만 존재 합 니 다(계승 관계 에 도 하나만 존재 합 니 다)
@GeneratedValue(generator = "JDBC")
private Integer id;
이것 은 MyBatis 로 하여 금 JDBC 의 getGenerated Keys 방법 을 사용 하여 데이터베이스 내부 에서 생 성 된 메 인 키(예 를 들 어 MySQL 과 SQL Server 와 같은 관계 데이터베이스 관리 시스템 의 자동 증가 필드)를 추출 하 게 할 것 이다.이 경우 대응 하 는 xml 는 다음 과 같 습 니 다.
4
// null , = and
List<T> select(T record);
// null , = and
int selectCount(T record);
// ,
// ,
// ,key , Map
T selectByPrimaryKey(Object key);
//
// Oracle ,UUID, Mysql INDENTITY ( )
// , , 、UUID,
int insert(T record);
// , null ,
// Oracle ,UUID, Mysql INDENTITY ( )
// , , 、UUID,
int insertSelective(T record);
// null , = and
int delete(T key);
// ,
// ,
// ,key , Map
int deleteByPrimaryKey(Object key);
// ,
//
int updateByPrimaryKey(T record);
//
// null
int updateByPrimaryKeySelective(T record);
// Exmaple
int selectCountByExample(Object example);
// Exmaple
int deleteByExample(Object example);
// Exmaple
List<T> selectByExample(Object example);
// Exmaple (null)
int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
// Exmaple
int updateByExample(@Param("record") T record, @Param("example") Object example);
유 니 버 설 mapper 를 Mybatis 설정 에 추가 합 니 다.spring 통합 방식 을 추천 합 니 다.Mapper 인 터 페 이 스 를 스 캔 하 는 이 설정 만 있 으 면 됩 니 다.다음 과 같 습 니 다.
// , ( )
@SequenceGenerator(name="Any",sequenceName="seq_userid")
@Id
private Integer id;
。 XML:
<insert id="insertAuthor">
insert into Author
(id, username, password, email,bio, favourite_section)
values
(seq_userid.nextval, #{username, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>
스프링 4 에 팬 주입 을 사용 하려 면 Mapper5.관련 블 로그
spring 통합 Mybatis 는 유 니 버 설 mapper 와 페이지 조 수 를 이용 하여 restful 스타일 의 작성 을 실현 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.