与不同框架整合时mybatis的使用区别 (对比redis)
与不同框架整合时mybatis的使用区别 (对比redis)
一般mybatis或者redis等连接数据库的框架应用规则都差不多:
1,配置好工厂
2,工厂注入模版配置好模版(这时候其实已经可以直接通过这个模版操作了)
3,如果spring提供了人性话的封装这个模版的类,或其他框架可以人性化整合这个模版,就可以更方便的使用,不用每次都获取模版然后操作
比如1,没有用封装的模版(就直接用模版)
2,有框架对其封装了就用封装后的操作入口即可,更方便:
用spring封装了模版(配置的时候将模版注入spring的一个类),或者spring集成的比如mapper,这个mapper会自动识别id=sqlSession的模版,
那么也就有了封装,就不必每次使用模版操作了,直接用mapper提供的人性化的操作入口即可
<!-- 消除Redis的key前面的/xac/xed/x00/x05t/x00/t这些东西 -->
<bean id="stringRedisSerializer"
class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:keySerializer-ref="stringRedisSerializer" p:hashKeySerializer-ref="stringRedisSerializer"
p:connection-factory-ref="jedisConnectionFactory" />//已经可以模版操作(Java硬编码)
<!-- redis缓存管理器 -->
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"
c:template-ref="jedisTemplate" />/////spring封装了这个模版之后就可以直接通过注解使用了
<!-- redis结束 -->
///(Java硬编码)(模版操作)
@Service(value = "redisService")
public class RedisServiceImpl<T> implements RedisService<T> {
@Autowired
private RedisDao<T> redisDaoString;
/* set缓存操作 */
@Override
public void setObject(String key, T value) throws EsteelException {
redisDaoString.setObject(key, value);
System.out.println("====Set Redis " + key + "====");
}
}
public class RedisDaoImpl<T> implements RedisDao<T>
{
@Autowired
private RedisTemplate<String, T> jedisTemplate;
private static LoggerAdapter log = LoggerAdapterFacory.getLoggerAdapter(RedisDaoImpl.class);
public void setObject(String key, T value) throws EsteelException
{
try
{
ValueOperations<String, T> vps = jedisTemplate.opsForValue();
vps.set(key, value);
}
catch (Exception ex)
{
String msg = "插入redis key:" + key + " value:" + value + "失败!";
log.error(msg, ex);
throw new EsteelException(msg, ex);
}
}
}
//由于还用了spring封装所以还可以最直标签(封装)
@Override
@Cacheable(value="getfordMenuLimt",key="'getfordMenuLimt='+#param.get('pId')")
public List<Map> getfordMenuLimt(Map<String,Object> param) {
// TODO Auto-generated method stub
List<Map> map = new ArrayList<>();
map= (List<Map>) opmMenufolderMapper.getfordMenuLimt(param);
return map;
}
===================模版操作
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource">
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=oracle
reasonable=true
offsetAsPageNum=true
</value>
</property>
</bean>
</array>
</property>
</bean>
<bean id="sqlSessionTemplate" class="com.esteel.web.utils.ESteelSqlSessionTemplate" c:sqlSessionFactory-ref="sqlSessionFactory"></bean>
@Autowired
public ESteelSqlSessionTemplate sqlSessionTemplate;
@Override
public List<BasSpsxValueBeanVo> spsxPartKeycdpzzzMap() {
return sqlSessionTemplate.selectList("basSpsxValue.spsxPartKeycdpzzzMap");
}
=========================================
//spring集成通用mapper,通用mapper封装的mybatis(自动通过id="sqlSession"进行封装),那么也可以不用每次通过模版操作数据库,直接用mapper的人性化接口即可(封装)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.esteel.*.bean"/>
<!-- typeAliasesPackage 为这个包下面的所有类生成别名,在配置文件中就可以直接用类名进行引用,而不用写全路径 -->
<!-- <property name="typeAliasesPackage" value="com.esteel.system.bean,com.esteel.search" />
<property name="mapperLocations" value="classpath:config_mybatis/*.xml" /> -->
<property name="configLocation" value="classpath:config_spring/mybatis-config.xml" />
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
<property name="mapperLocations" >
<array>
<value> classpath:config_mybatis/**/*.xml</value>
</array>
</property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=oracle
reasonable=true
</value>
</property>
</bean>
<!-- <bean class="com.github.abel533.mapperhelper.MapperInterceptor">
<property name="properties">
<value>
mappers=com.github.abel533.mapper.Mapper
ORDER=BEFORE
</value>
</property>
</bean> -->
</array>
</property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">//通用mapper直接根据sqlSession这个名字自动装配sqlSession,直接通过mapper用
<constructor-arg index="0" ref="sqlSessionFactory" />
<!-- 如果想要进行批量操作可加入这个属性 -->
<!-- <constructor-arg index="1" value="BATCH" /> -->
</bean>
@Override
@Cacheable(value="getMenuItems",key="'menufolderid='+#item.menufolderid")
public List<OpmMenuitem> getMenuItems(OpmMenuitem item) {
// TODO Auto-generated method stub
return opmMenuitemMapper.select(item);
}