转载,文章70%为其它博客内容,不要问我原文链接,好几年了,今天只是过来修改补充而已
一、简介
Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件
mybatis-geneator是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件。
二、配置方法
在项目的pom文件中添加插件配置
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
在main的resource目录下创建generatorConfig.xml文件
配置文件中的内容如下,可根据需要自行修改
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--导入属性配置-->
<properties resource="datasource.properties"></properties>
<!-- 指定数据库驱动的jdbc驱动jar包的位置 -->
<classPathEntry location="${db.driverLocation}" />
<!-- context 是逆向工程的主要配置信息 -->
<!-- id:起个名字 用于在生成错误时提示-->
<!-- targetRuntime:设置生成的文件适用于那个 mybatis 版本 -->
<context id="default" targetRuntime="MyBatis3">
<!--optional,旨在创建class时,对注释进行控制-->
<commentGenerator>
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--jdbc的数据库连接-->
<jdbcConnection driverClass="${db.driverClassName}"
connectionURL="${db.url}"
userId="${db.username}"
password="${db.password}">
</jdbcConnection>
<!--非必须,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<!-- 默认情况下数据库中的 decimal,bigInt 在 Java 对应是 sql 下的 BigDecimal 类 -->
<!-- 不是 double 和 long 类型 -->
<!-- 使用常用的基本类型代替 sql 包下的引用类型 -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetPackage:生成的实体类所在的包 -->
<!-- targetProject:生成的实体类所在的硬盘位置 -->
<javaModelGenerator targetPackage="com.mall.pojo"
targetProject=".\src\main\java">
<!-- 是否允许子包 -->
<property name="enableSubPackages" value="false" />
<!-- 是否对modal添加构造函数 -->
<property name="constructorBased" value="true" />
<!-- 是否清理从数据库中查询出的字符串左右两边的空白字符 -->
<property name="trimStrings" value="true" />
<!-- 建立modal对象是否不可改变 即生成的modal对象不会有setter方法,只有构造方法 -->
<property name="immutable" value="false" />
</javaModelGenerator>
<!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
<sqlMapGenerator targetPackage="mappers"
targetProject=".\src\main\resource">
<!-- 针对数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.mall.dao" targetProject=".\src\main\java">
<!-- 针对 oracle 数据库的一个配置,是否把 schema 作为字包名 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<table tableName="user" domainObjectName="User"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"> <!--tableName数据库表名 domainObjectName生成实体类名 -->
</table>
</context>
</generatorConfiguration>
generatorConfig.xml文件中的一些配置信息需要在配置文件中添加
在同一目录下创建datasource.properties文件
db.driverLocation=D:/SpringDemo/shop/src/main/tools/mysql-connector-java-5.1.6-bin.jar
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://47.107.56.223:3306/mmall_learning?characterEncoding=utf-8
db.username=admin
db.password=admin
配置的三行的192.168.199.193需要替换成所在主机的IP,mall替换成数据库名称
配置第四行和第五行分别配置为数据库连接的用户名和密码
在generatorConfig.xml文件中添加完需要生成的表的配置后
双击图中配置,就可以自动生成mapper和xml文件了
但是!以上仅存在于顺利的情况下!!!下面我会讲一下我遇到的坑和相关的解决方法:)
---------------------------
不忍直视的错误!
报红:cannot resolve symbol "XXX"
mapper.xml文件 链接 Dao层dao.java 爆红,一直提示无法解析? 重启后问题依然存在
原因:代码是easycode 自动生成的,出错的地方就是 找不到Dao类的位置
把它补全
--------------------------
问题一:在Maven Projects侧根本就找不到mybatis-generator,无法双击
解决方法:打开pom文件,在pluginManagement标签的下面创建plugins标签,然后将mybatis-generator插件配置移动到plugins标签中,如图
问题二:双击mybatis-generator后报错
[ERROR] Error resolving version for plugin 'org.apache.maven.plugin:maven-compiler-plugin' from the repositories [local (C:\Users\.m2\repository), central (http://repo.maven.apache.org/maven2)]: Plugin not found in any plugin repository -> [Help 1]
解决方法:pom文件中maven的配置要加version标签,如图
问题三:报错
[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mall: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate failed: Cannot resolve classpath entry: C:Users.m2
解决方法:因为偷懒,datasource.properties文件中的db.driverLocation值是直接在文件夹中复制粘贴的,所以路径的斜线都是“\”,只要改成“/”就可以了,上面的配置步骤中的配置内容已是正确内容
db.driverLocation 找的是你已经在硬盘的驱动文件
问题四:这个问题是后面几个报错的整合
报错1:[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mall: Access denied for user 'mall'@'219.143.190.211' (using password: YES) -> [Help 1]
报错2:[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mall: null, message from server: "Host 'zs-HP.lan' is not allowed to connect to this MySQL server" -> [Help 1]
报错3:[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mall: Access denied for user 'root'@'%' to database 'mall' -> [Help 1]
报错4:[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mall: SELECT command denied to user 'root'@'zs-HP.lan' for table 'cart' -> [Help 1]
报错5:[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mall: Access denied for user 'root'@'zs-HP.lan' (using password: YES) -> [Help 1]
以上报错基本都是出于同一类问题,只要按照如下步骤操作,基本可以避免。
1、找到mysql bin目录下的my.ini文件,在[mysql]下面加上 skip-grant-tables 用于跳过密码
2、mysql开启mysql远程访问权限(cmd以管理员身份运行)
登录到mysql: mysql -uroot -ppwd
查看user表:
mysql> use mysql
Database changed
mysql> select host,user,password,Grant_priv,Super_priv from user;
+--------------+---------+--------------------------------------+------------+------------+
| host | user | password | Grant_priv | Super_priv
+--------------+---------+-------------------------------------------+------------+--------
| LocalHost | root | *FED29C14B2E900D70B11B1F1B370F953BA51| N | Y
+--------------+---------+--------------------------------------+------------+------------+
1 row in set (0.00 sec)
将localhost修改成%。修改成%表示,所有主机都可以通过root用户访问数据库。
命令:mysql> update user set host = '%',Grant_priv='Y', Super_priv='Y' where user = 'root';
再次查看表:mysql>use mysql
查看是否已经修改好
最后!!!输入命令:mysql> FLUSH PRIVILEGES; 刷新之前修改的内容
这才能生效!!!!!
3、修改数据库表权限
如果mysql客户端(本人使用的是Navicate)选中表单机右键可以找到设置权限选项,则勾选相应的操作即可
如果右键没有设置权限选项,则需要新增用户,配置如下
然后双击管理用户,即可进行权限配置
-----------------
原文:https://blog.csdn.net/qq_40307945/article/details/81351302
问题5 tinyint 长度为一或类型为bit
的数据默认会转化为boolean类型数据
如: 表示状态的字段 workstatus 表示有3种状态 Boolean 只有两种
private Boolean workstatus;
由于status不止0,1这两个值,所以不希望返回成boolean类型
解决方法:
- 数据库不要使用 tinyint 使用int 代替
- 需要修改请求连接添加参数
tinyInt1isBit=false 但之后
tinyint类型的属性会变成byte类型也不方便
本人数据库为tinyint 后台实体类与XML都改为 Ingeter jdbcType="INTEGER" (数据库类型不变是 tinyint )
问题6 bigint 作为主键,后台对应的是Long没有出现问题, BigInteger未测试过。
不过,你能容忍bigint做主键的麻烦,为什么不用String做主键,UUID生成token,也可以做主键,加点盐和前缀做为区分。