MybatisGenerator 插件使用时发现 生成的mapper 少了识别主键的方法 byPrimaryKey()

问题:

正常生成的Dao层文件和mapper.xml是这样的(这里我喜欢Dao的命名方式,把UserMapping改为了UserDao。)

结果发现按照官网给出的信息配置后少了红线上的东西

 

 

解决方法:

      这种情况明显是我们写的配置与数据库对接时检查不了表主键信息,也就是不知道哪一个是 PrimaryKey ???

      那是我数据库连接包的版本太低了吗?于是我把springboot提供的连接包注释掉,换成最新 4.3.7的连接包后重新生成文件,发现并没有用 。

      这个时候我在其他文章中看到了数据库连接信息中设置 useInfomationSchema = true ,试了一下,确实可以,但是为什么配置了这个属性,MybatisGenerator 插件就可以识别数据库信息了呢?

  <!-- 配置数据库连接信息 -->
        <jdbcConnection
                driverClass="com.mysql.cj.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/votesystem?serverTimezone=Asia/Shanghai"
                userId="root"
                password="">
            <!--设置可以获取tables remarks信息-->
            <property name="useInformationSchema" value="true"/>
            <!--设置可以获取remarks信息-->
            <property name="remarks" value="true"/>
        </jdbcConnection>

查了一下Mysql官网关于这个参数的解释 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

大体意思是 当连接 5.0.7以上的mysql版本时,要用这个 useInformationSchema 来获取 DatabaseMetaData 吗? 默认是 false

那么这个DatabaseMetaData 指的是哪部分数据呢?

 参考了官方网站 https://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html

Interface DatabaseMetaData extend Wrapper
有关整个数据库的综合信息。
此接口由驱动程序供应商实现,以便用户了解数据库管理系统(DBMS)的功能以及基于与其一起使用的JDBCTM技术(“JDBC驱动程序”)的驱动程序。

某些DatabaseMetaData方法以ResultSet对象的形式返回信息列表。常规ResultSet方法(如getString和getInt)可用于从这些ResultSet对象中检索数据。如果给定形式的元数据不可用,则将返回空ResultSet。定义为由给定方法的ResultSet对象返回的列之外的其他列可以由JDBC驱动程序供应商定义,并且必须通过其列标签访问。

 简单来说 这个接口是在插件访问中可以检索到给定方法的ResultSet对象的列,从而判定其主键,进而生成 ByPrimaryKey

好吧,搞不动了,暂时这么理解吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值