• Springboot--Ehcache-Jpa (1)


                                Springboot--Ehcache-jpa

    package com.bjsxt.dao;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import com.bjsxt.pojo.Users;
    /**
     * 参数一 T :当前需要映射的实体
     * 参数二 ID :当前映射的实体中的OID的类型
     *
     */
    public interface UsersRepository extends JpaRepository<Users,Integer>{
    
    }
    UserRepository
    package com.bjsxt.pojo;
    
    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_users")
    public class Users implements Serializable {
    
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="id")
        private Integer id;
        
        @Column(name="name")
        private String name;
        
        @Column(name="age")
        private Integer age;
        
        @Column(name="address")
        private String address;
        
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "Users [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
        }
    }
    Users
    package com.bjsxt.service.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cache.annotation.CacheEvict;
    import org.springframework.cache.annotation.Cacheable;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.stereotype.Service;
    
    import com.bjsxt.dao.UsersRepository;
    import com.bjsxt.pojo.Users;
    import com.bjsxt.service.UsersService;
    /**
     * UsersService接口实现类
     *
     *
     */
    @Service
    public class UsersServiceImpl implements UsersService {
    
        @Autowired
        private UsersRepository usersRepository;
        
        @Override
        @Cacheable(value="users")
        public List<Users> findUserAll() {
            return this.usersRepository.findAll();
        }
    
        @Override
        //@Cacheable:对当前查询的对象做缓存处理
        @Cacheable(value="users")
        public Users findUserById(Integer id) {
            return this.usersRepository.findOne(id);
        }
    
        @Override
        @Cacheable(value="users",key="#pageable.pageSize")
        public Page<Users> findUserByPage(Pageable pageable) {
            return this.usersRepository.findAll(pageable);
        }
    
        @Override
        //@CacheEvict(value="users",allEntries=true) 清除缓存中以users缓存策略缓存的对象
        @CacheEvict(value="users",allEntries=true)
        public void saveUsers(Users users) {
            this.usersRepository.save(users);
        }
    
    }
    UsersServiceImpl
    UserService
    package com.bjsxt;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cache.annotation.EnableCaching;
    
    
    @SpringBootApplication
    @EnableCaching
    public class App {
    
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }
    App
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/orcl
    spring.datasource.username=root
    spring.datasource.password=123456
    
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.show-sql=true
    
    spring.cache.ehcache.cofnig=ehcache.xml
    application.properties
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    
        <diskStore path="java.io.tmpdir"/>
    
      <!--defaultCache:echcache的默认缓存策略  -->
        <defaultCache
                maxElementsInMemory="10000"
                eternal="false"
                timeToIdleSeconds="120"
                timeToLiveSeconds="120"
                maxElementsOnDisk="10000000"
                diskExpiryThreadIntervalSeconds="120"
                memoryStoreEvictionPolicy="LRU">
            <persistence strategy="localTempSwap"/>
        </defaultCache>
        <!-- 自定义缓存策略 -->
        <cache name="users"
                maxElementsInMemory="10000"
                eternal="false"
                timeToIdleSeconds="120"
                timeToLiveSeconds="120"
                maxElementsOnDisk="10000000"
                diskExpiryThreadIntervalSeconds="120"
                memoryStoreEvictionPolicy="LRU">
            <persistence strategy="localTempSwap"/>
        </cache>
    </ehcache>
    ehcache.xml
    package com.bjsxt.test;
    
    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.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.bjsxt.App;
    import com.bjsxt.pojo.Users;
    import com.bjsxt.service.UsersService;
    
    /**
     * UsersService测试
     *
     *
     */
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes=App.class)
    public class UsersServiceTest {
    
        @Autowired
        private UsersService usersService;
        
        @Test
        public void testFindUserById(){
            //第一次查询
            System.out.println(this.usersService.findUserById(1));
            
            //第二次查询
            System.out.println(this.usersService.findUserById(1));
        }
        
        @Test
        public void testFindUserByPage(){
            Pageable pageable = new PageRequest(0, 2);
            //第一次查询
            System.out.println(this.usersService.findUserByPage(pageable).getTotalElements());
            
            //第二次查询
            System.out.println(this.usersService.findUserByPage(pageable).getTotalElements());
            
            //第三次查询
            pageable = new PageRequest(1, 2);
            System.out.println(this.usersService.findUserByPage(pageable).getTotalElements());
        }
        
        @Test
        public void testFindAll(){
            //第一次查询
            System.out.println(this.usersService.findUserAll().size());
            
            Users users = new Users();
            users.setAddress("南京");
            users.setAge(43);
            users.setName("朱七");
            this.usersService.saveUsers(users);
            
            //第二次查询
            System.out.println(this.usersService.findUserAll().size());
        }
    }
    UsersServiceTest
    <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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.10.RELEASE</version>
        </parent>
        <groupId>com.bjsxt</groupId>
        <artifactId>23-spring-boot-ehcache</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <properties>
            <java.version>1.7</java.version>
            <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
            <thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version>
        </properties>
    
        <dependencies>
            <!-- springBoot的启动器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- springBoot的启动器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    
            <!-- springBoot的启动器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    
            <!-- 测试工具的启动器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
    
            <!-- mysql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <!-- druid连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.9</version>
            </dependency>
    
            <!-- Spring Boot缓存支持启动器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
    
            <!-- Ehcache坐标 -->
            <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
            </dependency>
    
        </dependencies>
    </project>
    pom.xml

    测试一

    执行了一条sql ,说明第二次从ehcache里面拿到的,

    Hibernate: select users0_.id as id1_0_0_, users0_.address as address2_0_0_, users0_.age as age3_0_0_, users0_.name as name4_0_0_ from t_users users0_ where users0_.id=?
    Users [id=1, name=hello, age=34, address=shanghai]
    Users [id=1, name=hello, age=34, address=shanghai]

    测试二


    * 如果是 @Cacheable(value="users",key="#pageable.pageSize")
    * 第一次查询 有sql
    * 二 没有从缓存取
    * 三 没有从缓存取
    * @Cacheable(value="users")
    * 第一次查询 有sql
    * 二 没有从缓存取
    * 三 有sql
    * 总结就是 ehcahce 缓存是默认把 key 为pageable 存储
    * 如果下一次查询和pageable对象相同则 从缓存中取出

    测试三

        @CacheEvict(value="users",allEntries=true) 清除缓存中以users缓存策略缓存的对象

         CacheEvict 用法

                 当添加数据时,查询数据错误问题,是因为查询的是缓存的数据,并没有查询添加的数据

                  添加上面注解后,第一次查询和第二次查询都是从数据库里查询的

  • 相关阅读:
    国内固定电话正则验证:'tel': [/0d{2,3}-d{7,8}(|([-u8f6c]{1}d{1,5}))$/, "请填写有效的电话号码"],
    戴尔3542安装ubuntu时出现:failed to lead ldlinux.c32
    解决:IntelliJ IDEA 编译错误,提示 Compilation failed: internal java compiler error
    超详细~Windows下PyCharm配置Anaconda环境教程!!
    python数据可视化--matplotlib用户手册入门:pyplot画图
    python数据分析——numpy创建多维数组的方式
    python timeit 模块使用,解决%timeit无法使用
    MySQL导入导出数据的中文乱码问题
    如果启动mysql时候,报第一行错误,基本是这个原因没跑了
    mysql安装后服务启动不了(总结)
  • 原文地址:https://www.cnblogs.com/ou-pc/p/9782619.html
Copyright © 2020-2023  润新知