Mybatis 설정 의 속성 설정 요소 분석
9802 단어 Mybatisproperties속성배치 하 다.
우 리 는 먼저 이전의 프로필 을 여기에 복사 해서 비교 관찰 할 수 있 도록 한다.다음 과 같다.
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- spring environments -->
<environments default="development">
<environment id="development">
<!-- jdbc -->
<transactionManager type="JDBC" />
<!-- -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
</mappers>
</configuration>
속성 치 는 세 가지 방식 으로 쓰 인 다.다음 에 우리 하나씩 보 자.(1)
이전 프로필 에 있 는
<?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">
<configuration>
<properties>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- spring environments -->
<environments default="development">
<environment id="development">
<!-- jdbc -->
<transactionManager type="JDBC" />
<!-- -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
</mappers>
</configuration>
이렇게 해서 우 리 는 설정 이 필요 한 곳 에서(2)
여기 서 우 리 는
<?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">
<configuration>
<properties resource="mysql.properties">
</properties>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- spring environments -->
<environments default="development">
<environment id="development">
<!-- jdbc -->
<transactionManager type="JDBC" />
<!-- -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
</mappers>
</configuration>
프로필 을 사용 하면 한 번 에 여러 곳 에서 반복 적 으로 사용 할 수 있 습 니 다.다른 항목 에서 CTRL+C 와 CTRL+V 를 사용 하지 않 아 도 됩 니 다.
(3)초기 화 할 때 코드 로 Properties 클래스 인 스 턴 스 를 전송 합 니 다.
구체 적 으로 다음 과 같다.
package com.majing.learning.mybatis;
import java.io.IOException;
import java.util.Properties;
import junit.framework.TestCase;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.majing.learning.mybatis.dao.UserDao;
import com.majing.learning.mybatis.entity.User;
public class UserDaoTest1 extends TestCase{
@Test
public void testFindUserById(){
SqlSession sqlSession = getSessionFactory().openSession(true);
UserDao userMapper = sqlSession.getMapper(UserDao.class);
User user = userMapper.findUserById(10);
System.out.println(" :"+user);
}
// Mybatis SqlSessionFactory SqlSession, SqlSession
private static SqlSessionFactory getSessionFactory() {
SqlSessionFactory sessionFactory = null;
String resource = "configuration.xml";
try {
sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource), buildInitProperties());
} catch (IOException e) {
e.printStackTrace();
}
return sessionFactory;
}
private static Properties buildInitProperties(){
Properties properties = new Properties();
properties.put("driver", "com.mysql.jdbc.Driver");
properties.put("url", "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8");
properties.put("username", "root");
properties.put("password", "root");
return properties;
}
}
위 에서 알 수 있 듯 이 SqlSession Factory 를 만 들 때 코드 를 작성 하기 위해 속성 설정 을 입력 했 습 니 다.위의 세 가지 방식 은 모두 같은 기능 을 실현 할 수 있다.그것 은 바로 my batis 를 초기 화 할 때 일련의 속성 값 을 설정 하여 사용 하 는 것 이다.
그런데 이 세 가 지 는 또 어떤 차이 가 있 을까요?
소스 코드 를 보면 직관 적 인 느낌 은 바로 이 세 가지 설정 이 우선 순위 관계 가 있 고 서로 다른 방식 으로 설정 한 설정 항목 이 공존 할 수 있다 는 것 이다.우선 순 위 는 다음 과 같다.세 번 째 방식>두 번 째 방식>첫 번 째 방식 이다.
즉,세 가지 방식 이 같은 설정 항목 을 설정 하면 우선 순위 가 높 은 설정 방식 의 설정 값 이 적 용 됩 니 다.
이것 은 주로 my bats 의 소스 코드 분석 과정 으로 인 한 것 이다.
다음은 구체 적 인 해석 논 리 를 살 펴 보 겠 습 니 다.
private void propertiesElement(XNode context) throws Exception {
if (context != null) {
Properties defaults = context.getChildrenAsProperties();
String resource = context.getStringAttribute("resource");
String url = context.getStringAttribute("url");
if (resource != null && url != null) {
throw new BuilderException("The properties element cannot specify both a URL and a resource based property file reference. Please specify one or the other.");
}
if (resource != null) {
defaults.putAll(Resources.getResourceAsProperties(resource));
} else if (url != null) {
defaults.putAll(Resources.getUrlAsProperties(url));
}
Properties vars = configuration.getVariables();
if (vars != null) {
defaults.putAll(vars);
}
parser.setVariables(defaults);
configuration.setVariables(defaults);
}
}
코드 로 볼 때또한,분석 할 때 는
이후 세 번 째 방식 의 속성 설정 이 있 는 지 판단 하기 시 작 했 습 니 다.있 으 면 해당 설정 을 이전 속성 집합 에 추가 하고 같은 이름 의 설정 이 있 으 면 덮어 씁 니 다.이런 논리 도 왜 우선 순위 가 있 는 지 직접적인 원인 이다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SpringMVC와 Mybatis 집합은 호출 저장 프로세스, 사무 제어 실례를 실현한다SSM 프레임워크에서 호출 데이터베이스의 저장 프로세스와 사무 제어에 자주 사용되는데 다음은 증빙서류를 저장하는 예를 들어 소개한다. 1. Oracle에 저장된 프로세스 코드는 다음과 같습니다(주요 논리는 증빙 서류...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.