前提・実現したいこと
MybatisGeneratorで列名がキャメルケースのテーブルのコードを生成したいと思っています。
使用しているデータベースはPostgreSQLです。
※テーブルの列名にキャメルケースを用いるべきではないという事は把握しているため、その点に関するご指摘は今回は排除して頂けたらと思います。
以下のようなテーブルについて考えます。
SQL
1CREATE TABLE "public"."CamelCaseTable" 2( 3 "userId" character varying(10) NOT NULL, 4 "userPassword" character varying(10), 5 "userName" character varying(10), 6 CONSTRAINT "CamelCaseTable_pkey" PRIMARY KEY ("userId") 7)
発生している問題・エラーメッセージ
MybatisGeneratorで列名がキャメルケースのテーブルのコードを生成した場合、生成されるMapper.xmlファイルは以下のようになります。
※一部を抜粋
XML
1 <sql id="Base_Column_List" > 2 userId, userPassword, userName 3 </sql> 4 5 <select id="selectByPrimaryKey" resultMap="BaseResultMap" 6 parameterType="java.lang.String" > 7 select 8 <include refid="Base_Column_List" /> 9 from "public"."CamelCaseTable" 10 where userId = #{userid,jdbcType=VARCHAR} 11 </select>
この自動生成されたコードを利用すると、以下のようなエラーが発生します。
### Error querying database. Cause: org.postgresql.util.PSQLException: ERROR: 列"userid"は存在しません
この問題を解決する良い手段はありますでしょうか。自動生成されたコードに手を加える事無く実現したいと考えています。
※例えばSQL文中の「userId」を「"userId"」に修正するようなダブルクォーテーションで囲う修正を全てのカラムについて行えば解決は可能ですが、膨大な量の修正が必要なため現実的ではありません。また、コードの自動生成をするたびに修正が必要になってしまいます。
試したこと
generatorConfig.xmlにて以下のような置換を行って自動生成すれば出来ないかなと思いましたが、
こちらで置換されるのはSQL文の方ではなくJavaクラスのプロパティの方でした。
<table catalog=" " schema="public" tableName="%"> <columnRenamingRule searchString="^" replaceString=""" /> </table>
補足情報(FW/ツールのバージョンなど)
PostgreSQL 9.5.10
org.mybatis 3.4.4
org.mybatis.generator 1.3.0
OpenJDK 1.8.0_151
最後に
仕事で上記問題の解決を行う必要が有り、困っております。
どなたか知恵を貸していただけると幸いです。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/28 02:17