网上的说法统一都是:Mybatis3依赖的jar包"mybatis-spring-1.2.0.jar"这个版本以及以上的版本中,对SqlSessionDaoSupport类中的'sqlSessionFactory'或'sqlSessionTemplate'注入方式进行了调整。
可是我使用了低版本也一样报错,然后使用高版本的解决方法:
创建一个Dao的基类CommonDao,让这个基类继承SqlSessionDaoSupport,并通过set方法注入SqlSessionFactory属性即可:
public class CommonDao extends SqlSessionDaoSupport {
@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
super.setSqlSessionFactory(sqlSessionFactory);
}
}
然后让Dao实现类再继承这个CommonDao基类即可:
@Repository
public class PersonDaoImpl extends CommonDao implements PersonDao {
//此处省略...
}
也毫无作用,我的思路就是写一个BaseDao继承SqlSessionDaoSupport ,然后用我的***DaoImpl继承BaseDao再实现***Dao。可能因为我是用的是注解版的mybatis结合springboot的原因吧。
所有网上的方法都找不到解决不了我的问题,于是重点来了!!!
我从网上copy了一个springboot+mybatis的项目,然后再次基础上更改,最后居然没报错了!!!
解决办法一:使用@Results
@Select("SELECT * FROM membership")
@Results({
@Result(property="firstName",column="first_name"),
@Result(property="lastName",column="last_name")
})
List getAllMembership();
要在mapper中一个个声明,比较麻烦。
解决办法二:使用基于XML的mapper映射,也麻烦
解决办法三:
驼峰命名
在properties中添加以下配置,在执行查询后,可以将数据库的NN_NN格式字段,在java结果集对象中自动转换成驼峰命名参数
1 |
|
解决办法四:通过使用在SQL语句中定义别名完成映射,不过需要一个个字段映射,和方法一差不多
@Select("SELECT first_name as firstName FROM membership")
解决办法四(终结解决方法):数据库字段和entity字段一样(哈哈哈哈,感觉违背初衷了)
类似dozermapper,不仅需要引入dozer还需要引入dozer.xml文件,使用springboot推荐的全注解方式。
@Configuration
public class DozerConfig {
@Bean
public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean(@Value("classpath*:dozer/*.xml") Resource[] resources) throws Exception {
final DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean();
dozerBeanMapperFactoryBean.setMappingFiles(resources);
return dozerBeanMapperFactoryBean;
}
}
springboot+mybaits中一对一,多对一关系。
这篇博客就写得挺不错的,再次转发他的。
注意,@one中只内嵌了select关联查询方法,我一开始还想能不能使用这个来在附属方法里再insert其他表的- -
可以点进@One中看懂到,只有select方法
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface One {
String select() default "";
FetchType fetchType() default FetchType.DEFAULT;
}
目前暂时碰到这些值得记录的问题,以后在遇到有价值的再添加吧