SpringData初探

前言

  • 项目中用到这个,没有学过,手动搭建,测试执行流程,
  • 理论的东西有时间再补充

Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>springdata-demo-1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springdata-demo-1</name>
	<description>Demo project for Spring Boot</description>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
		<relativePath />
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<!-- 唯一和springdata相关的依赖包,它会自动引入相关依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<!-- MySQL驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 阿里的连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.29</version>
		</dependency>
		<!-- 日志,可以省略getset方法及控制台日志颜色配置 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<!-- SpringBoot热部署的依赖,可以没有 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

SpringBoot配置

  • application-dev.properties

server.port=8080
logging.level.org.springframework=info
logging.level.root=info

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/db_springdata?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.show-sql=true
  • application.properties
spring.profiles.active=dev
  • 日志配置:logback-spring.xml
<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <!--定义一个带颜色的控制台输出日志PATTERN-->
    <property name="CONSOLE_LOG_PATTERN"
              value="时间:%date{yyyy-MM-dd HH:mm:ss} 级别: %blue(%-5level) 进程: %magenta(%thread) 类: %green(%logger) 信息: %msg%n"/>
    <!--定义一个不带颜色的文件日志输出格式,因为文件不能带颜色-->
    <property name="ERRINFOFILE_LOG_PATTERN"
              value="时间:%date{yyyy-MM-dd HH:mm:ss} 级别: %-5level 进程: %thread 类: %logger 信息: %msg%n"/>
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                ${CONSOLE_LOG_PATTERN}
            </pattern>
        </layout>
    </appender>
    <root level="info">
        <appender-ref ref="consoleLog" />
    </root>
</configuration>

实体类

package com.example.demo.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import com.example.demo.domain.Person;

public interface PersionDao extends JpaRepository<Person, Integer>, JpaSpecificationExecutor<Person> {
	//根据 lastName 来获取对应的 Person
	Person getByLastName(String lastName);
}

SpringBoot启动类

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication(scanBasePackages = "com.example.demo")
@EnableTransactionManagement//开启事物
public class SpringdataDemo1Application {

	public static void main(String[] args) {
		SpringApplication.run(SpringdataDemo1Application.class, args);
	}
}

测试类

package com.example.demo;

import java.util.Date;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.example.demo.dao.PersionDao;
import com.example.demo.domain.Person;

import lombok.extern.slf4j.Slf4j;

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class SpringdataDemo1ApplicationTests {

	@Autowired
	private PersionDao persionDao;
	@Test
	public void insertTest(){
		Person person=new Person();
		person.setLastName("小黑");
		person.setBirth(new Date());
		person.setEmail("admin@coder163.com");
		persionDao.save(person);
	}
	@Test
	public void contextLoads() {
		log.info("{}",persionDao.getByLastName("小黑"));
	}

}

执行结果

时间:2018-03-24 12:19:47 级别: INFO  进程: main 类: com.example.demo.SpringdataDemo1ApplicationTests 信息: Started SpringdataDemo1ApplicationTests in 2.524 seconds (JVM running for 3.189)
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into t_peson (birth, email, lastName, id) values (?, ?, ?, ?)
时间:2018-03-24 12:19:48 级别: INFO  进程: main 类: org.hibernate.hql.internal.QueryTranslatorFactoryInitiator 信息: HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select person0_.id as id1_0_, person0_.birth as birth2_0_, person0_.email as email3_0_, person0_.lastName as lastName4_0_ from t_peson person0_ where person0_.lastName=?


Github代码地址 :项目代码

原文地址:https://www.cnblogs.com/coder163/p/8687935.html