crud template 用例演示

  • 我的项目地址: https://github.com/huifer/cru...

依赖

  • 本次应用的是快照版本,请做出如下的maven调整
  • pom.xml
  <dependencies>    <dependency>      <groupId>com.github.huifer</groupId>      <artifactId>for-mybatis</artifactId>      <version>0.0.4-SNAPSHOT</version>    </dependency>  </dependencies>  <repositories>    <repository>      <id>oss-snapshots</id>      <name>oss快照</name>      <url>https://oss.sonatype.org/content/repositories/snapshots</url>      <snapshots>        <enabled>true</enabled>        <updatePolicy>always</updatePolicy>      </snapshots>    </repository>  </repositories>
  • setting.xml
  <mirrors>    <mirror>      <id>aliyunmaven</id>      <mirrorOf>*</mirrorOf>      <name>阿里云公共仓库</name>      <url>https://maven.aliyun.com/repository/public</url>    </mirror>    <mirror>      <id>oss-sp</id>      <mirrorOf>oss-snapshots</mirrorOf>      <name>oss快照</name>      <url>https://oss.sonatype.org/content/repositories/snapshots</url>    </mirror>  </mirrors>  <profiles>    <profile>      <id>oss-snapshots</id>      <repositories>        <repository>          <id>alibaba</id>          <releases>            <enabled>true</enabled>          </releases>          <snapshots>            <enabled>false</enabled>          </snapshots>          <url>https://maven.aliyun.com/repository/public</url>        </repository>        <repository>          <id>nexus_snapshot_repository</id>          <releases>            <enabled>false</enabled>          </releases>          <snapshots>            <enabled>true</enabled>          </snapshots>          <url>https://oss.sonatype.org/content/repositories/snapshots</url>          <layout>default</layout>        </repository>      </repositories>    </profile>  </profiles>
  • 如果不想批改配置能够间接下载我的项目: crud 切换到dev分支. 用例内容在 simple-example 中

crud 测试

  • 首先贴出相干代码
@SpringBootApplication@EnableCrudTemplate(daoType = DaoType.MYBATIS,scanPackages = {"com.github.huifer.mybatis"})public class MybatisApp {  public static void main(String[] args) {    SpringApplication.run(MybatisApp.class, args);  }}@Mapper@CacheKey(key = "issues", type = IssuesEntity.class)public interface IssuesMapper extends A<Integer, IssuesEntity> {  @Insert("   insert into issue(new_title)values(#{newTitle,jdbcType=VARCHAR})")  @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")  int insertSelective(IssuesEntity record);  @Select("select * from issue where id = #{integer} ")  IssuesEntity selectByPrimaryKey(Integer integer);  @Override  @Update("UPDATE `issue` SET `new_title` = #{newTitle}  WHERE `id` = #{id} ")  int updateByPrimaryKeySelective(IssuesEntity record);}public class IssuesEntity implements BaseEntity {  private Integer id;  private String newTitle;  private String ooo() {    return "OOO" + this.newTitle;  }  public Integer getId() {    return id;  }  public void setId(Integer id) {    this.id = id;  }  public String getNewTitle() {    return newTitle;  }  public void setNewTitle(String newTitle) {    this.newTitle = newTitle;  }}

测试新增对象

  @Test  void testInsert() {    IssuesEntity issuesEntity = new IssuesEntity();    issuesEntity.setNewTitle("mybatis_test");    crudFacade.insert(issuesEntity);  }

开启 mapper上的@CacheKey

  • 心愿后果时redis和数据库都存有
  • 执行后果如下图

正文 mapper上的@CacheKey

  • 正文掉mapper下面的@CacheKey
@Mapper@CacheKey(key = "issues", type = IssuesEntity.class)public interface IssuesMapper extends A<Integer, IssuesEntity> {  @Insert("   insert into issue(new_title)values(#{newTitle,jdbcType=VARCHAR})")  @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")  int insertSelective(IssuesEntity record);  @Select("select id as id , new_title as newTitle from issue where id = #{integer} ")  IssuesEntity selectByPrimaryKey(Integer integer);  @Override  @Update("UPDATE `issue` SET `new_title` = #{newTitle}  WHERE `id` = #{id} ")  int updateByPrimaryKeySelective(IssuesEntity record);  @Override  @Delete("delete from issue where id = #{integer}")  int deleteByPrimaryKey(Integer integer);}
  • 再次执行测试用例,心愿后果时redis没有,数库存有

测试查问

@Testvoid testById() {  IssuesEntity issuesEntity66 = crudFacade.byId(new IntIdInterface<Integer>() {    @Override    public Integer id() {      return 66;    }  }, IssuesEntity.class);  IssuesEntity issuesEntity67 = crudFacade.byId(new IntIdInterface<Integer>() {    @Override    public Integer id() {      return 67;    }  }, IssuesEntity.class);}
  • id = 66 的用例心愿从redis中获取,为了证实从redis中获取,批改一下属性不便确认

    批改属性为

    {"id":66,"newTitle":"mybatis_test_test_by_id"}

- 测试合乎期望值
  • id = 67 的用例心愿从数据库获取并且放入redis

  • redis 中退出胜利合乎冀望

测试批改

@Testvoid testEditor() {  IssuesEntity issuesEntity66 = crudFacade.byId(new IntIdInterface<Integer>() {    @Override    public Integer id() {      return 66;    }  }, IssuesEntity.class);  issuesEntity66.setNewTitle("mybatis_editor_test");  crudFacade.editor(issuesEntity66);}
  • 心愿redis 和数据库同时批改

  • 批改一条redis中没有的数据,查看redis是否会被更新
@Testvoid testEditor2() {  IssuesEntity issuesEntity66 = crudFacade.byId(new IntIdInterface<Integer>() {    @Override    public Integer id() {      return 68;    }  }, IssuesEntity.class);  issuesEntity66.setNewTitle("mybatis_editor_test");  crudFacade.editor(issuesEntity66);}

  • redis 更新胜利

测试删除

  • redis 和 数据库都删除即可通过
@Testvoid testDel() {  crudFacade.del(new IntIdInterface<Integer>() {    @Override    public Integer id() {      return 67;    }  }, IssuesEntity.class);}

  • redis 和数据库都删除了
  • 留神:这里是物理删除还是逻辑删除取决于deleteByPrimaryKey 的sql

实体redis测试

@CacheKey(key = "tt", type = IssuesEntity.class, idFiled = "newTitle")public class IssuesEntity  {  private Integer id;  private String newTitle;  private String ooo() {    return "OOO" + this.newTitle;  }  public Integer getId() {    return id;  }  public void setId(Integer id) {    this.id = id;  }  public String getNewTitle() {    return newTitle;  }  public void setNewTitle(String newTitle) {    this.newTitle = newTitle;  }}

测试新增

@Testvoid testInsert() {  IssuesEntity issuesEntity = new IssuesEntity();  issuesEntity.setNewTitle("insert");  crudEntityFacade.insert(issuesEntity);}

测试查问

@Testvoid testById() {  IssuesEntity issuesEntity = crudEntityFacade.byId(new StrIdInterface<String>() {    @Override    public String id() {      return "insert";    }  }, IssuesEntity.class);  System.out.println();}

测试批改

  @Test  void testUpdate() {    IssuesEntity issuesEntity = crudEntityFacade.byId(new StrIdInterface<String>() {      @Override      public String id() {        return "insert";      }    }, IssuesEntity.class);    issuesEntity.setId(999);    crudEntityFacade.editor(issuesEntity);  }

测试删除

@Testvoid testDel() {  crudEntityFacade.del(new StrIdInterface<String>() {    @Override    public String id() {      return "insert";    }  }, IssuesEntity.class);}