zoukankan      html  css  js  c++  java
  • 【spring boot+mybatis】注解使用方式(无xml配置)设置自动驼峰明明转换(mapUnderscoreToCamelCase),IDEA中xxDao报错could not autowire的解决方法

    最近使用spring boot+mybatis,使用IntelliJ IDEA开发,记录一些问题的解决方法。

    1、在使用@Mapper注解方式代替XXmapper.xml配置文件,使用@Select等注解配置sql语句的情况下,如何配置数据库字段名到JavaBean实体类属性命的自动驼峰命名转换?

    使用spring boot后,越来越喜欢用注解方式进行配置,代替xml配置文件方式。mybatis中也可以完全使用注解,避免使用xml方式配置mapper。(参考  springboot(六):如何优雅的使用mybatis  http://www.ityouknow.com/springboot/2016/11/06/springboot(%E5%85%AD)-%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E7%9A%84%E4%BD%BF%E7%94%A8mybatis.html

    设置自动驼峰命名转换,在xml中可以直接配置mapUnderscoreToCamelCase属性。

    但是使用注解方式时,经过一番查找资料才找到比较好的设置方法。如下:

    在spring boot的配置文件application.properties中,加入配置项:

    1 mybatis.configuration.mapUnderscoreToCamelCase=true
    2 3 mybatis.configuration.map-underscore-to-camel-case=true

    设为true表示开启驼峰转换。经过试验,两种配置方法都可以。但如果同时配置,前者mybatis.configuration.mapUnderscoreToCamelCase的优先级更高。

    参考:

    官方的配置说明 mybatis-spring-boot-autoconfigure – MyBatis Sring-BootStarter | Reference Documentation  http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/#Configuration

    SpringBoot之Mybatis - 王念博客  https://my.oschina.net/wangnian/blog/667764

    另外查到有通过javaConfig方式,配置org.apache.ibatis.session.SqlSessionFactory的Bean,放入spring的对象池。mapUnderscoreToCamelCase是org.apache.ibatis.session.Configuration的一个属性,实例化Configuration对象并将其mapUnderscoreToCamelCase属性设为true,再使用这个Configuration对象作为SqlSessionFactory的配置即可使mapUnderscoreToCamelCase=true生效。

    但是仅仅为了改变一个属性的值,就自己编码生成一个SqlSessionFactory未免太繁琐了些。使用在application.properties中配置的方法更方便。

    2.mybatis管理的@Mapper的Dao,在使用@Autowire自动注入时,IDEA有红色报错“could not autowire”,但实际运行时正常,如何去除报错?

    按照本人的理解,这个报错是由于Dao接口只添加了mybatis自定义的@Mapper注解,没有添加spring定义的@Component、@Repository等,所以IDEA不认为这是纳入Spring管理的Bean,导致在IDEA找不到autowire的Dao的来源。

    查找解决方法,找到了这里的问答:

    java - Idea inspects batis mapper bean wrong - Stack Overflow  https://stackoverflow.com/questions/25379348/idea-inspects-batis-mapper-bean-wrong

    里面提到安装【MyBatis plugin】插件可以解决,但是我尝试安装这个插件并启用后,仍然有红色报错(插件已经激活,不是license导致的问题),所以猜测这个插件可能是只针对XXmapper.xml配置的方式有效,而对@Mapper注解Dao interface的方式无效(针对后一种情况是否有效,大家尝试了可以反馈下结果)

    所以只好采用一种折中的不算完美的办法,在Dao interface中添加@Mapper的同时,再添加@Repository(或者@Component也可以),如下方代码的第1行:

    1 @Repository
    2 @Mapper
    3 public interface UserDao {
    4 
    5     @Select("SELECT phone FROM user WHERE name = #{name}") //动态传入表名,可以使用 ...FROM ${tableName}... ,但需要解决sql注入风险
    6     String getPhoneByUserName(@Param("name") String name);
    7 }

    这个方法使用中看来也没有什么副作用。

    PS:第一次试安装【MyBatis plugin】插件之后,启动后在IDEA的Event窗口中有以下输出:

    1 Mybatis Plugin: Mybatis Plugin is not activated yet. Click here to enter your license key to activate the plugin. You can also click here to purchase a license key to sponsor us making the plugin better. More features are on their way. Wish you happy coding with the plugin

    这是一个收费的插件,需要购买license,官网显示价格是¥39.99。

    我还尝试安装了【Free MyBatis plugin】和【iBATIS/MyBatis mini-plugin】插件,都没有去除红色报错。

    哪位有更好的解决方法也欢迎提出~

  • 相关阅读:
    修复grub引导Centos8和Windows
    少儿编程到底学什么?
    Windows平台最方便最易用的法语输入法
    ServiceStack.OrmLite 入门(一)
    起步:Proteus 8 仿真 Arduino 1.8.2
    命令行方式登录PostgreSQL
    CentOS 7 安装 PostgreSQL
    Twitter开源的Heron快速安装部署教程
    centos7下使用yum安装mysql
    [转]centos7 下安装MongoDB
  • 原文地址:https://www.cnblogs.com/zhangdong92/p/6986653.html
Copyright © 2011-2022 走看看