spring boot DAO之Hibernate
阿新 • • 發佈:2018-06-07
spring boot依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
application-database.properties
#初始化數據庫的時候,如果錯誤,是否繼續啟動。 spring.datasource.continue-on-error=false #jdbc driver.默認通過uri來自動檢測。 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #jdbc url.連接數據庫的uri spring.datasource.url=jdbc:mysql://172.28.1.227:3310/fc?useUnicode=true&autoReconnect=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useServerPrepStmts=false #數據庫連接用戶名 spring.datasource.username=fcdev #數據連接密碼 spring.datasource.password=123456 #全限定名,連接池。默認自動檢測classpath spring.datasource.type=com.zaxxer.hikari.HikariDataSource #sql腳本字符 spring.datasource.sql-script-encoding=UTF-8 #hibernate配置參數 spring.jpa.hibernate.ddl-auto=none spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy spring.jpa.hibernate.use-new-id-generator-mappings=true
源碼-JpaProperties
@ConfigurationProperties(prefix = "spring.jpa") public class JpaProperties { /** * Additional native properties to set on the JPA provider. */ private Map<String, String> properties = new HashMap<>(); /** * Mapping resources (equivalent to "mapping-file" entries in persistence.xml). */ private final List<String> mappingResources = new ArrayList<>(); /** * Name of the target database to operate on, auto-detected by default. Can be * alternatively set using the "Database" enum. */ private String databasePlatform; /** * Target database to operate on, auto-detected by default. Can be alternatively set * using the "databasePlatform" property. */ private Database database; /** * Whether to initialize the schema on startup. */ private boolean generateDdl = false; /** * Whether to enable logging of SQL statements. */ private boolean showSql = false; /** * Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the * thread for the entire processing of the request. */ private Boolean openInView; private Hibernate hibernate = new Hibernate(); }
源碼-HibernateJpaAutoConfiguration
@Configuration
@ConditionalOnClass({ LocalContainerEntityManagerFactoryBean.class, EntityManager.class })
@Conditional(HibernateEntityManagerCondition.class)
@EnableConfigurationProperties(JpaProperties.class)
@AutoConfigureAfter({ DataSourceAutoConfiguration.class })
@Import(HibernateJpaConfiguration.class)
public class HibernateJpaAutoConfiguration {
@Order(Ordered.HIGHEST_PRECEDENCE + 20)
static class HibernateEntityManagerCondition extends SpringBootCondition {
private static final String[] CLASS_NAMES = {
"org.hibernate.ejb.HibernateEntityManager",
"org.hibernate.jpa.HibernateEntityManager" };
@Override
public ConditionOutcome getMatchOutcome(ConditionContext context,
AnnotatedTypeMetadata metadata) {
ConditionMessage.Builder message = ConditionMessage
.forCondition("HibernateEntityManager");
for (String className : CLASS_NAMES) {
if (ClassUtils.isPresent(className, context.getClassLoader())) {
return ConditionOutcome
.match(message.found("class").items(Style.QUOTE, className));
}
}
return ConditionOutcome.noMatch(message.didNotFind("class", "classes")
.items(Style.QUOTE, Arrays.asList(CLASS_NAMES)));
}
}
}
TestHibernateDao
@org.springframework.stereotype.Repository
public interface TestHibernateDao extends JpaRepository<SysMenu, Integer> {
SysMenu getSysMenuById(Integer id);
}
AppContextTest
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppContextTest {
@Autowired
private TestHibernateDao testHibernateDao;
@Test
public void hibernateTest(){
SysMenu sysMenu = testHibernateDao.getSysMenuById(1);
System.out.println("menuName = " + sysMenu.getName());
}
spring boot DAO之Hibernate