当前位置: 首页 > news >正文

母婴门户网站模板移动端网站怎么提交

母婴门户网站模板,移动端网站怎么提交,什么是营销网站建设,保护环境网站模板作者在学习Redis整合时使用JDBC与Jedis#xff0c;但是呢#xff0c;现如今的环境下#xff0c;Mybatis系列ORM框架是更受关注的方法#xff0c;作者有一点点Mybatis基础#xff0c;Mybatisplus几乎忘的差不多了#xff0c;现对Redis整合Mybatis相关知识进行梳理#xf…作者在学习Redis整合时使用JDBC与Jedis但是呢现如今的环境下Mybatis系列ORM框架是更受关注的方法作者有一点点Mybatis基础Mybatisplus几乎忘的差不多了现对Redis整合Mybatis相关知识进行梳理在进一步学习Mybatis系列知识后再将具体代码进行补充测试。 结合 MyBatis 和 Redis 进行缓存可以通过 MyBatis 提供的缓存机制来实现。下面的例子将指导你如何使用 MyBatis-Redis-Cache 这个库进行整合。 基本步骤 添加依赖 在你的 pom.xml 文件中添加 MyBatis 和 MyBatis-Redis-Cache 的依赖。 dependencies!-- 添加MyBatis依赖 --dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.4/version/dependency!-- 添加MyBatis-Redis-Cache依赖 --dependencygroupIdorg.mybatis.caches/groupIdartifactIdmybatis-redis/artifactIdversion1.0.0/version/dependency /dependencies配置 Redis 在 application.properties 或 application.yml 文件中配置 Redis 的相关信息。 # Redis 配置 spring.redis.host你的Redis服务器地址 spring.redis.port6379配置 MyBatis 在 MyBatis 的配置文件例如 mybatis-config.xml中开启缓存。 settingssetting namecacheEnabled valuetrue/ /settings示例 假设你有一个 UserMapper 接口和相应的 UserMapper.xml 文件 在 UserMapper.xml 文件中开启缓存 mapper namespacecom.example.mapper.UserMapper!-- 开启这个 namespace 的缓存 --cache typeorg.mybatis.caches.redis.RedisCache /select idselectUserById resultTypeUserSELECT * FROM user WHERE id #{id}/select /mapper在服务层使用 UserMapper Service public class UserService {Autowiredprivate UserMapper userMapper;public User getUserById(int id) {// 首次调用将查询数据库// 之后的调用将直接从 Redis 缓存中获取结果return userMapper.selectUserById(id);} }基础代码解释与自定义缓存类 在 MyBatis 的 Mapper XML 文件中使用 cache typecom.example.cache.RedisCache / 标签和属性时这是在告诉 MyBatis 使用默认的缓存实现。 机制 初始化时的操作 当 MyBatis 初始化时它会读取 Mapper XML 文件并根据 XML 文件内容创建相应的 Mapper 对象。当 MyBatis 遇到 cache 标签时它会尝试实例化指定类型type 属性的缓存对象。指定的缓存类在本例中是 com.example.cache.RedisCache会被实例化并且在需要缓存操作时被 MyBatis 调用。 执行查询时的操作 当执行查询如 selectUserById时MyBatis 会首先检查缓存是否已经包含该查询的结果。因为在定义SQL语言之前命名空间里还声明了 cache typecom.example.cache.RedisCache /这种声明会让Mybatis做出对缓存的检查。如果缓存中存在结果MyBatis 就直接从缓存中返回结果不再执行实际的 SQL 查询。如果缓存中不存在结果MyBatis 会执行 SQL 查询并将查询结果存储在缓存中以供将来使用。 关闭操作 当 MyBatis 会话结束时所有的缓存资源应该被正确释放。 自定义缓存类 在使用 MyBatis 和 Redis 缓存时如果你想要更多地控制 Redis 的详细操作你可能需要自定义缓存处理逻辑。 其本质就是创建一个类实现 MyBatis 的 Cache 接口。然后就把自定义类的名字换成之前的RedisCache就行都是一样的配置。其自定义类代码如下所示 import org.apache.ibatis.cache.Cache; import redis.clients.jedis.Jedis;import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;public class MyRedisCache implements Cache {private final String id;private final Jedis redisClient new Jedis(localhost, 6379);public MyRedisCache(String id) {this.id id;}Overridepublic String getId() {return this.id;}Overridepublic void putObject(Object key, Object value) {redisClient.set(key.toString(), value.toString());}Overridepublic Object getObject(Object key) {return redisClient.get(key.toString());}Overridepublic Object removeObject(Object key) {return redisClient.del(key.toString());}Overridepublic void clear() {redisClient.flushDB();}Overridepublic int getSize() {return Integer.parseInt(redisClient.dbSize().toString());}Overridepublic ReadWriteLock getReadWriteLock() {return new ReentrantReadWriteLock();} }在 MyBatis 的 Mapper XML 文件中使用自定义缓存类 mapper namespacecom.example.mapper.UserMapper!-- 使用自定义的缓存 --cache typecom.example.cache.MyRedisCache /select idselectUserById resultTypeUserSELECT * FROM user WHERE id #{id}/select /mapperCache接口实现 类定义中读者可能会发现咋多了这么多成员变量和方法啊这其实是实现org.apache.ibatis.cache.Cache接口覆盖的成员和方法。 其中有四个必须覆盖的方法 String getId():返回缓存的标识符。每个缓存都必须有一个唯一的标识符。 void putObject(Object key, Object value):将查询结果存储在缓存中。 Object getObject(Object key):从缓存中获取由 key 指定的查询结果。 void clear():清除缓存中的所有项目。 三个可选覆盖的方法 Object removeObject(Object key);int getSize();ReadWriteLock getReadWriteLock(); 这些方法是可选的意味着不一定非要覆盖它们。removeObject() 用于从缓存中移除对象但并没有被 MyBatis 核心框架调用。同样getSize() 和 getReadWriteLock() 也是可选的并不是 MyBatis 核心部分的调用。这三个方法的实现依赖于你的实际缓存策略和需求。 Cache接口源码 为了更好地理解作者查到16年某文章的cache源码。 package org.apache.ibatis.cache;import java.util.concurrent.locks.ReadWriteLock;/*** 缓存接口* 给缓存供应商的SPIService Provider Interface* 一个Cache的实例将为名称空间被创建* Cache接口的实现类必须有一个具有String类型参数的构造方法用于接收Cache对象的id作为其唯一标识* * mybatis将以namespace作为id调用这个构造函数创建对象* * author Administrator**/ public interface Cache {/*** 获取缓存对象的唯一标识* return*/String getId();/*** 保存key/value到缓存对象中* key可以是任何对象但一般是CacheKey对象* value是查询结果为List类型* param key* param value*/void putObject(Object key, Object value);/*** 从缓存对象中获取key对应的value* param key* return*/Object getObject(Object key);/*** 可选的方法没有被核心框架调用移除key对应的value* param key* return*/Object removeObject(Object key);/*** 清空缓存*/void clear();/*** 获取缓存对象中存储的键/值对的数量* 可选的方法没有被框架核心调用*/int getSize();/*** 获取读写锁* 可选的方法从3.2.6起这个方法不再被框架核心调用* 任何需要的锁都必须由缓存供应商提供* * return A ReadWriteLock*/ReadWriteLock getReadWriteLock();} 是否可以新增方法 可以在自定义缓存类中添加其他方法。 但是这些额外的方法不会被 MyBatis 自动调用它们只能在Override覆盖的方法内部调用。比如你想添加一个方法来计算 Redis 缓存的大小你可以添加一个 size() 方法到你的自定义缓存类并在 putObject 方法中调用它来更新缓存大小的信息。比如 public class MyRedisCache implements Cache {// ...其他方法public int size() {// 实现计算 Redis 缓存大小的逻辑return 0;}Overridepublic void putObject(Object key, Object value) {// 在存储对象之前或之后更新缓存大小信息// ...int currentSize size();// ...} }注意在MyBatis中 会被自动调用的方法 getId(): MyBatis会自动调用这个方法来获取缓存的唯一标识符。putObject(Object key, Object value): MyBatis会在将查询结果存入缓存时调用这个方法。getObject(Object key): MyBatis会在从缓存中获取对象时调用这个方法。clear(): 在执行更新、插入或删除操作时MyBatis会调用这个方法来清空命名空间下的缓存。 不会被自动调用的方法 removeObject(Object key): 这个方法在MyBatis核心框架中并不会被自动调用但是你可以在自定义缓存实现中使用它。getSize(): 同样这个方法也不会被MyBatis核心框架自动调用除非你自己调用它。getReadWriteLock(): 从3.2.6版本开始这个方法不再被框架核心调用。任何需要的锁都必须由缓存提供商自行实现和管理。 总的来说getId(), putObject(), getObject(), 和 clear() 这四个方法是在MyBatis操作过程中会被自动调用的其他方法(removeObject(), getSize(), getReadWriteLock()和其他非Cache接口的方法)则不会需要根据实际情况自行调用或实现。 示意代码 自动调用 考虑以下 Mapper XML 文件 mapper namespacecom.example.mapper.UserMappercache typecom.example.cache.MyRedisCache /select idselectUserById resultTypeUserSELECT * FROM user WHERE id #{id}/select /mapper当执行 selectUserById 查询时 MyBatis 会调用 MyRedisCache 类的 getObject 方法来尝试从 Redis 缓存中获取结果。如果 getObject 返回 null缓存未命中MyBatis 将执行 SQL 查询并将结果通过 putObject 方法存储到 Redis 缓存中。如果 getObject 返回非 null缓存命中MyBatis 将直接返回缓存的结果。 手动调用 既可以通过藏在自动调用的函数不过这应该不属于手动调用也可以通过获取 SqlSessionFactory 的 Configuration然后获取特定的 Cache 对象来调用这个方法。不过貌似这种创建实例对象的方案不是很流行具体等作者多学一点知识再说。 下面是一个例子 SqlSessionFactory sqlSessionFactory ... // 获取 SqlSessionFactory Configuration configuration sqlSessionFactory.getConfiguration(); Cache cache configuration.getCache(com.example.cache.MyRedisCache); // 使用你的 cache id int size cache.getSize(); System.out.println(Cache Size: size);在这个例子中 首先获取了 SqlSessionFactory 的实例。然后从 SqlSessionFactory 中获取了 Configuration 对象。接着从 Configuration 中通过 cache id 获取了 Cache 对象。最后调用了 getSize() 方法来获取缓存的大小。
http://www.hkea.cn/news/14412753/

相关文章:

  • 专业网站开发费用挑号网站后台怎么更新
  • 创做网站wordpress没有API解析接口怎办
  • 网站开发人员工工资聊城做网站的公司行情
  • 运城网站建设新品发布会海报
  • php网站开发核心技术国内免费素材网站
  • php旅游类网站开发毕业设计网站建设价格很 好乐云seo
  • 展示照片的网站模板wordpress 不显示账号名
  • 系统网站开发娱乐网站怎么制作
  • 动态发布网站和静态发布网站网站正在建设中的
  • 网站加载速度企业宽带
  • 卖酒的网站做线下怎么做网站报备流程
  • led灯外贸网站建设什么是网络营销市场营销学
  • 建个人网站能赚钱吗企业网站建设合同 百度文库
  • 网站排名优化需要多久网站专业建设公司
  • 做网站如何挣钱建设一个网站需要哪些材料
  • 厦门营销网站制作一段简单的html代码
  • tk免费域名注册网站做网站有钱
  • 网站建设市场规模微信如何分享wordpress
  • 广东企业网站建设公司工信部网站域名备案信息查询
  • 网站有什么用目前我们的网站正在建设中
  • 尚义网站建设池州网站建设开发
  • 玉林网站推广荣成网站开发
  • 申请个人网站怎么申请工程建设管理条例
  • 在线购物网站网站添加icp备案号
  • 一般的网站都是用什么系统做的设计一个企业网站主页
  • 做网站大公司有哪些湘建网
  • 上海网站外包建设装饰设计公司排行榜
  • 网站模块下载建设银行手机银行登录网站
  • 淄博网站建设招聘织梦网站建设流程
  • 上海住房城乡建设网站证件查询定西seo排名