实现A.CTable使用mybatis/mybatis-plus自动创建表,保姆级教程
我的问题是手动打错了配置文件,导致找错很久…本篇以Mybatis为主官方官方地址:https://gitee.com/sunchenbin/mybatis-enhance文档地址:https://www.yuque.com/sunchenbin/actable/ag3y1y1.引入maven<!-- A.C.Table 自动创建表 --><dependency><gr
我的问题是手动打错了配置文件,导致找错很久…
本篇以Mybatis为主
官方
官方地址:https://gitee.com/sunchenbin/mybatis-enhance
文档地址:https://www.yuque.com/sunchenbin/actable/ag3y1y
1.引入maven
<!-- A.C.Table 自动创建表 -->
<dependency>
<groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
<artifactId>mybatis-enhance-actable</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
使用mybatis-plus配合使用为了避免jar包版本冲突问题可以参照以下方式引入依赖
异常表现为:项目启动过程中报OrderBy注解ClassNotFindException异常
<dependency>
<groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
<artifactId>mybatis-enhance-actable</artifactId>
<version>1.5.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</exclusion>
</exclusions>
</dependency>
2.配置
1.有些配置是要引入插件的
2.有些配置是使用自己的
复制的时候注意一下yaml文件必要的格式
官方配置:
mybatis:
#如果使用了mybatis-plus,需要把classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml配置到这里:mybatis-plus.mapper-locations
mapper-locations: classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml
table:
auto: update
#create 系统启动后,会将所有的表删除掉,然后根据model中配置的结构重新建表,该操作会破坏原有数据。
#update 系统会自动判断哪些表是新建的,哪些字段要修改类型等,哪些字段要删除,哪些字段要新增,该操作不会破坏原有数据。
#none 系统不做任何处理。
#add 新增表/新增字段/新增索引/新增唯一约束的功能,不做修改和删除 (只在版本1.0.9.RELEASE及以上支持)。
model:
pack: com.chen.pagehelper.entity #扫描用于创建表的对象的包名,多个包用“,”隔开
database:
type: mysql #数据库类型 目前只支持mysql
启动类加上官方的(必备)
@MapperScan({"com.gitee.sunchenbin.mybatis.actable.dao.*"})
@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})
我的示例:
mapper-locations: 在,逗号前引入官方插件的配置,后面的是自己的
mybatis:
#在,逗号前引入插件的配置,后面的是自己的
mapper-locations: classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml,classpath*:com/chen/pagehelper/mapper/*.xml
type-aliases-package: com/chen/pagehelper/entity
table:
auto: update
#create 系统启动后,会将所有的表删除掉,然后根据model中配置的结构重新建表,该操作会破坏原有数据。
#update 系统会自动判断哪些表是新建的,哪些字段要修改类型等,哪些字段要删除,哪些字段要新增,该操作不会破坏原有数据。
#none 系统不做任何处理。
#add 新增表/新增字段/新增索引/新增唯一约束的功能,不做修改和删除 (只在版本1.0.9.RELEASE及以上支持)。
model:
pack: com.chen.pagehelper.entity #扫描自己用于创建表的对象的包名,多个包用“,”隔开
database:
type: mysql #数据库类型 目前只支持mysql
我的启动类
在,逗号前面引入的是官方的,后面是自己的,可以的
@MapperScan({"com.gitee.sunchenbin.mybatis.actable.dao.*","com.person.provider.mapper","com.chen.pagehelper.mapper"})
@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*","com.chen"})
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
我的连接配置:
连接配置基本没什么要求,还是常规的。
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
3.实体类映射字段
3.1 底层默认是自动java类型转换字段类型
Java数据类型 | 对应Mysql数据类型 |
---|---|
java.lang.String | MySqlTypeConstant.VARCHAR |
java.lang.Long | MySqlTypeConstant.BIGINT |
java.lang.Integer | MySqlTypeConstant.INT |
java.lang.Boolean | MySqlTypeConstant.BIT |
java.math.BigInteger | MySqlTypeConstant.BIGINT |
java.lang.Float | MySqlTypeConstant.FLOAT |
java.lang.Double | MySqlTypeConstant.DOUBLE |
java.lang.Short | MySqlTypeConstant.SMALLINT |
java.math.BigDecimal | MySqlTypeConstant.DECIMAL |
java.sql.Date | MySqlTypeConstant.DATE |
java.util.Date | MySqlTypeConstant.DATE |
java.sql.Timestamp | MySqlTypeConstant.DATETIME |
java.sql.Time | MySqlTypeConstant.TIME |
long | MySqlTypeConstant.BIGINT |
int | MySqlTypeConstant.INT |
boolean | MySqlTypeConstant.BIT |
float | MySqlTypeConstant.FLOAT |
double | MySqlTypeConstant.DOUBLE |
short | MySqlTypeConstant.SMALLINT |
char | MySqlTypeConstant.VARCHAR |
3.2 默认自动识别并修改字段名
如:levelId -> level_id
3.3 更多的注解参数官方有的,自己查一下吧
https://www.yuque.com/sunchenbin/actable/ca4vsf
@Data
@Table(value = "u_user", comment = "所有用户")
@TableCharset(MySqlCharsetConstant.UTF8)
@TableEngine(MySqlEngineConstant.InnoDB)
public class UserLogin {
/**
* 唯一id
*/
@IsKey //是否主键
@IsAutoIncrement //是否自增
private Long id;
/**
* 用户等级id 0:普通用户 1:社区管理 2:街道管理 3:市区管理 4:市级管理 5.省份管理
*/
@Column(name = "level_id", comment = "用户等级", length = 1,isNull = false)
private Long levelId;
/**
* 用户名
*/
@Column(name = "user_name", comment = "用户名", length = 50,isNull = false)
private String username;
/**
* 密码
*/
@Column(name = "password", comment = "密码", length = 255,isNull = false)
private String password;
/**
* 昵称
*/
@Column(name = "nickname", comment = "昵称", length = 50)
private String nickname;
/**
* 手机号码
*/
@Column(name = "mobile", comment = "手机号码", length = 20,isNull = false)
private String mobile;
/**
* 邮箱
*/
@Column(name = "email", comment = "邮箱", length = 50)
private String email;
/**
* 头像
*/
@Column(name = "header", comment = "头像", length = 255)
private String header;
/**
* 性别
*/
@Column(name = "gender", comment = "性别", length = 2)
private Integer gender;
/**
* 生日
*/
@Column(name = "birth", comment = "生日", type = MySqlTypeConstant.TIMESTAMP,length = 50)
private Date birth;
/**
* 所在城市
*/
@Column(name = "city", comment = "所在城市", length = 50)
private String city;
}
4.启动
运行启动类
5.成功
在运行栏看到下面这两行就表示成功了!
1.开始创建表 Table
2.完成创建表 Table
2022-04-06 00:19:13.091 INFO 13620 --- [ restartedMain] c.g.s.m.a.m.handler.StartUpHandlerImpl : databaseType=mysql,开始执行mysql的处理方法
2022-04-06 00:19:13.112 INFO 13620 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2022-04-06 00:19:13.234 INFO 13620 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2022-04-06 00:19:13.324 INFO 13620 --- [ restartedMain] s.m.a.m.s.SysMysqlCreateTableManagerImpl : 开始创建表:u_user
2022-04-06 00:19:13.385 INFO 13620 --- [ restartedMain] s.m.a.m.s.SysMysqlCreateTableManagerImpl : 完成创建表:u_user
数据库:
6.可能出现的问题
6.1 jar包冲突
在运行栏可能出现这样的提示,我的解决办法是吧Mybatis-plus的依赖删除了,当然我只是在实验,如果真的是应用的话,你可以试一试最上面的解决maven冲突
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
6.2 配置文件Key没对
配置mybatis.table.auto错误无法识别,我的情况是配置文件key没对,和后半句说的没关系,因为官方就是支持这四种策略,怎么会不支持呢?
官方的:mybatis.table.auto
我的:mybatis.tabie.auto
修改之后就成功运行了!
2022-04-06 01:34:31.160 INFO 13036 --- [ restartedMain] c.g.s.m.a.m.handler.StartUpHandlerImpl : databaseType=mysql,开始执行mysql的处理方法
2022-04-06 01:34:31.181 INFO 13036 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2022-04-06 01:34:31.316 INFO 13036 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2022-04-06 01:34:31.324 WARN 13036 --- [ restartedMain] s.m.a.m.s.SysMysqlCreateTableManagerImpl : 配置mybatis.table.auto错误无法识别,当前配置只支持[none/update/create/add]三种类型!
祝大家使用愉快!
更多推荐
所有评论(0)