Springboot+mybaits中遇到的问题

一、Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

网上的说法统一都是: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的项目,然后再次基础上更改,最后居然没报错了!!!

二、数据库字段与entity字段对应方法

解决办法一:使用@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结果集对象中自动转换成驼峰命名参数

  • userName对应user_name;
  • userId对应user_id;

1

mybatis.configuration.mapUnderscoreToCamelCase=true

解决办法四:通过使用在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;
	    }
	
}

三、@One @Many

springboot+mybaits中一对一,多对一关系。

这篇博客就写得挺不错的,再次转发他的。

注意,@one中只内嵌了select关联查询方法,我一开始还想能不能使用这个来在附属方法里再insert其他表的- -

可以点进@One中看懂到,只有select方法

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface One {
    String select() default "";

    FetchType fetchType() default FetchType.DEFAULT;
}

目前暂时碰到这些值得记录的问题,以后在遇到有价值的再添加吧

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Springboot)