示例代碼:https://github.com/Athlizo/spring-boot-Introductionjava
用過hibernate的都知道O/R映射,將類和數據表進行映射。那JPA是什麼呢?JAP全名:Java Persistence API。只是提供了一系列規範,而Spring Data JAP提供了基於JAP的數據訪問方式極大的減小了數據庫操做的代碼量node
使用Spring Data JPA訪問數據庫只要3步mysql
首先是引入相關jar包和配置git
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies>
spring: datasource: url: jdbc:mysql://${url}:3306/bootintro username: root password: ${password} driver-class-name: com.mysql.jdbc.Driver jpa: show-sql: true hibernate: ddl-auto: update jackson: serialization: true
其次是編寫數據庫對應的實體類github
@Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; //省略get set }
最後實現編寫一個藉口繼承JpaRepositoryweb
public interface PersonRepository extends JpaRepository<Person,Long>{ }
完成了..最後你就可使用PersonRepository做爲Dao層的接口操做數據庫了。看看JpaRepository中的提供接口吧redis
@NoRepositoryBean public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> { List<T> findAll(); List<T> findAll(Sort var1); List<T> findAll(Iterable<ID> var1); <S extends T> List<S> save(Iterable<S> var1); void flush(); <S extends T> S saveAndFlush(S var1); void deleteInBatch(Iterable<T> var1); void deleteAllInBatch(); T getOne(ID var1); <S extends T> List<S> findAll(Example<S> var1); <S extends T> List<S> findAll(Example<S> var1, Sort var2); }
基本的CRUD操做都有了,固然若是有複雜的操做語句,也能夠定製化,就順便說起一下:spring
JAP的自動配置類是org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,能夠看出sql
spring 還有一個訪問數據的方式是經過REST風格,即省略了controller和server層,直接使用url訪問dao層,我的感受這種方法有點...不過仍是比較神奇的.數據庫
在上面的例子的基礎上引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency>
保留Person 和PersonRepository,配置文件同樣,完成了,
在url輸入 http://localhost:8080/persons 就會返回表爲person的全部數據
輸入 .http://localhost:8080/persons/1 查詢id爲1的數據
spring 中使用 cacheManager來控制緩存.主要包括:
配置
支持緩存只須要在配置類中加入@EnableCaching,默認是使用SimplerCacheManager,而後,經過3個註解操做緩存,貼一下代碼立刻就明白
@Service public class DemoServiceImp implements DemoService { @Autowired PersonRepository personRepository; @Override @CacheEvict(value = "person") public void delete(Long id) { personRepository.delete(id); } @Override @Cacheable(value = "person") public Object findById(Long id) { return personRepository.findOne(Example.of(person)); } @Override @CachePut(value = "person", key = "#person.id") public Object save(Person person) { return personRepository.save(person); } }
就是@CacheEvict-刪除緩存,@Cacheable-查找,@CachePut-加入緩存 (上面這個邏輯和mybatis開啓二級緩存相似)
redis的相關配置包括
spring.redis.database= # database name spring.redis.host=localhost # server host spring.redis.password= # server password spring.redis.port=6379 # connection port spring.redis.pool.max-idle=8 # pool settings ... spring.redis.pool.min-idle=0 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-1 spring.redis.sentinel.master= # name of Redis server spring.redis.sentinel.nodes= # comma-separated list of host:port pairs
若是你要默認的CacheManager使用redis還須要增長
spring.cache.type=redis
這樣代碼裏面注入的CacheManager 就使用的是redis