springboot+mybatis通过实体类自动生成数据库表的方法

 更新时间:2020年07月09日 11:48:05   作者:Dlei东  
这篇文章主要介绍了springboot+mybatis通过实体类自动生成数据库表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

本章介绍使用mybatis结合mysql数据库自动根据实体类生成相关的数据库表。

首先引入相关的pom包我这里使用的是springboot2.1.8.RELEASE的版本

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.0</version>
</dependency>
<dependency>
	<groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
	<artifactId>mybatis-enhance-actable</artifactId>
	<version>1.0.1</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.10</version>
</dependency>

<!--以下两个类需要加入,否则报错无法注入-->
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
	<version>3.4</version>
</dependency>
<dependency>
	<groupId>net.sf.json-lib</groupId>
	<artifactId>json-lib</artifactId>
	<version>2.4</version>
	<classifier>jdk15</classifier>
	<exclusions>
		<exclusion>
			<artifactId>commons-logging</artifactId>
			<groupId>commons-logging</groupId>
		</exclusion>
	</exclusions>
</dependency>

添加数据库配置文件application.properties
application.properties这里是单独配置mybatis自动建表的相关信息。

mybatis.table.auto=update
mybatis.model.pack=com.xxx.xxx.entity//实体类的路径
mybatis.database.type=mysql

mybatis.table.auto=

create:
每次加载hibernate会自动创建表,以后启动会覆盖之前的表,所以这个值基本不用,严重会导致的数据的丢失。

create-drop :
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除,下一次启动会重新创建。

update:
加载hibernate时根据实体类model创建数据库表,这是表名的依据是@Entity注解的值或者@Table注解的值,sessionFactory关闭表不会删除,且下一次启动会根据实体。

model:
更新结构或者有新的实体类会创建新的表。

validate:
启动时验证表的结构,不会创建表 none:启动时不做任何操作

mybatis.model.pack=com.xxx.xxx.entity//你实体类的路径

个人项目配置文件,非统一,根据项目需求配置

进行生成数据库表相关配置

TestConfig配置文件

import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration
@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})//固定的包
public class TestConfig {
	//连接数据库配置文件的地址,具体查阅配置文件的结构
 @Value("${spring.datasource.druid.driver-class-name}")
 private String driver;
	//连接数据库配置文件的地址,具体查阅配置文件的结构
 @Value("${spring.datasource.druid.url}")
 private String url;
	//连接数据库配置文件的地址,具体查阅配置文件的结构
 @Value("${spring.datasource.druid.username}")
 private String username;
	//连接数据库配置文件的地址,具体查阅配置文件的结构
 @Value("${spring.datasource.druid.password}")
 private String password;

 @Bean
 public PropertiesFactoryBean configProperties() throws Exception{
 PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
 propertiesFactoryBean.setLocations(resolver.getResources("classpath*:application.properties"));//classpath*:application.properties是mybatis的生成表配置文件
 return propertiesFactoryBean;
 }

 @Bean
 public DruidDataSource dataSource() {
 DruidDataSource dataSource = new DruidDataSource();
 dataSource.setDriverClassName(driver);
 dataSource.setUrl(url);
 dataSource.setUsername(username);
 dataSource.setPassword(password);
 dataSource.setMaxActive(30);
 dataSource.setInitialSize(10);
 dataSource.setValidationQuery("SELECT 1");
 dataSource.setTestOnBorrow(true);
 return dataSource;
 }

 @Bean
 public DataSourceTransactionManager dataSourceTransactionManager() {
 DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
 dataSourceTransactionManager.setDataSource(dataSource());
 return dataSourceTransactionManager;
 }

 @Bean
 public SqlSessionFactoryBean sqlSessionFactory() throws Exception{
 SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
 sqlSessionFactoryBean.setDataSource(dataSource());
 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
 sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml"));
 sqlSessionFactoryBean.setTypeAliasesPackage("com.xxx.xxx.entity.*");
 //上述classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml固定的包路径
 //com.xxx.xxx.entity.*替换成你的实体类地址
 return sqlSessionFactoryBean;
 }
}

MyBatisMapperScannerConfig配置文件

import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@AutoConfigureAfter(TestConfig.class)//上面第一点配置文件类
public class MyBatisMapperScannerConfig {

 @Bean
 public MapperScannerConfigurer mapperScannerConfigurer() throws Exception{
  MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
   mapperScannerConfigurer.setBasePackage("com.xxx.xxx.mapper.*;com.gitee.sunchenbin.mybatis.actable.dao.*");
  mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
  //com.xxx.xxx.mapper.*替换成你的mapper地址
  //com.gitee.sunchenbin.mybatis.actable.dao.*固定的包
  return mapperScannerConfigurer;
 }

}

新建实体进行测试

注:@Table(name = “”)及@Column(name = “id”)注解使用,实体类继承BaseModel。

import com.gitee.sunchenbin.mybatis.actable.annotation.Column;
import com.gitee.sunchenbin.mybatis.actable.annotation.Table;
import com.gitee.sunchenbin.mybatis.actable.command.BaseModel;
import com.gitee.sunchenbin.mybatis.actable.constants.MySqlTypeConstant;

@Table(name = "em_t")//新建表数据库表名
public class EmpAttr extends BaseModel{
 private static final long serialVersionUID = 5199244153134426433L;

 @Column(name = "id",type = MySqlTypeConstant.INT,length = 11,isKey = true,isAutoIncrement = true)
 private String id;

 @Column(name="ename",type= MySqlTypeConstant.VARCHAR)
 private String ename;

 @Column(name="sal",type= MySqlTypeConstant.VARCHAR)
 private String sal;

 @Column(name="job",type= MySqlTypeConstant.VARCHAR)
 private String job;

 //...省略get,set方法
}

运行项目

会控制台会显示说新建表完成
2020-07-08 11:02:13.895 INFO 48536 — [ main] s.m.a.m.s.SysMysqlCreateTableManagerImpl : 开始创建表:em_t
2020-07-08 11:02:13.983 INFO 48536 — [ main] s.m.a.m.s.SysMysqlCreateTableManagerImpl : 完成创建表:em_t

 . ____   _   __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.8.RELEASE)

2020-07-08 11:02:11.264 INFO 48536 --- [   main] com.qiaoyuantest.www.WwwApplication  : Starting WwwApplication on DD-HP with PID 48536 (E:\mysoft\kaifasoft\kaifa_code\idea\myiperf_springboot\target\classes started by DD in E:\mysoft\kaifasoft\kaifa_code\idea\myiperf_springboot)
2020-07-08 11:02:11.266 INFO 48536 --- [   main] com.qiaoyuantest.www.WwwApplication  : The following profiles are active: prod
2020-07-08 11:02:12.207 INFO 48536 --- [   main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-07-08 11:02:12.208 INFO 48536 --- [   main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2020-07-08 11:02:12.228 INFO 48536 --- [   main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 10ms. Found 0 repository interfaces.
2020-07-08 11:02:12.301 INFO 48536 --- [   main] o.s.c.a.ConfigurationClassPostProcessor : Cannot enhance @Configuration bean definition 'myBatisMapperScannerConfig' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
2020-07-08 11:02:12.522 INFO 48536 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$54b62352] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-07-08 11:02:12.613 INFO 48536 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'redisConfiguration' of type [com.qiaoyuantest.www.config.RedisConfiguration$$EnhancerBySpringCGLIB$$9518fca7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-07-08 11:02:12.651 ERROR 48536 --- [   main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.2.7] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
2020-07-08 11:02:12.808 ERROR 48536 --- [   main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.2.7] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
2020-07-08 11:02:12.927 INFO 48536 --- [   main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8910 (http)
2020-07-08 11:02:12.937 ERROR 48536 --- [   main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.2.7] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
2020-07-08 11:02:12.937 INFO 48536 --- [   main] o.a.coyote.http11.Http11NioProtocol  : Initializing ProtocolHandler ["http-nio-8910"]
2020-07-08 11:02:12.944 INFO 48536 --- [   main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-07-08 11:02:12.944 INFO 48536 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.24]
2020-07-08 11:02:13.035 INFO 48536 --- [   main] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext
2020-07-08 11:02:13.036 INFO 48536 --- [   main] o.s.web.context.ContextLoader   : Root WebApplicationContext: initialization completed in 1732 ms
2020-07-08 11:02:13.623 INFO 48536 --- [   main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-07-08 11:02:13.676 INFO 48536 --- [   main] c.g.s.m.a.m.handler.StartUpHandlerImpl : databaseType=mysql,开始执行mysql的处理方法
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2020-07-08 11:02:13.829 INFO 48536 --- [   main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
file类型的扫描
2020-07-08 11:02:13.895 INFO 48536 --- [   main] s.m.a.m.s.SysMysqlCreateTableManagerImpl : 开始创建表:em_t
2020-07-08 11:02:13.983 INFO 48536 --- [   main] s.m.a.m.s.SysMysqlCreateTableManagerImpl : 完成创建表:em_t
2020-07-08 11:02:14.002 INFO 48536 --- [   main] c.q.www.config.RedisConfiguration  : 自定义RedisCacheManager加载完成
2020-07-08 11:02:14.826 INFO 48536 --- [   main] o.a.coyote.http11.Http11NioProtocol  : Starting ProtocolHandler ["http-nio-8910"]
2020-07-08 11:02:14.849 INFO 48536 --- [   main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8910 (http) with context path ''
2020-07-08 11:02:14.851 INFO 48536 --- [   main] com.qiaoyuantest.www.WwwApplication  : Started WwwApplication in 4.162 seconds (JVM running for 4.863)


此时查看一下数据库表会发现新建有em_t表


新建表就这样完成。

如出现
Error creating bean with name ‘startUpHandlerImpl': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/lang/ArrayUtils错误


说明pom缺省包或者包不正确

<!--以下两个类需要加入,否则报错无法注入-->
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.4</version>
	</dependency>
	<dependency>
		<groupId>net.sf.json-lib</groupId>
		<artifactId>json-lib</artifactId>
		<version>2.4</version>
		<classifier>jdk15</classifier>
		<exclusions>
			<exclusion>
				<artifactId>commons-logging</artifactId>
				<groupId>commons-logging</groupId>
			</exclusion>
		</exclusions>
	</dependency>

如需要项目源码或者对代码有疑问的评论留言,下期会动手实现mybatis plus内嵌的CRUD自动增删改查

到此这篇关于springboot+mybatis通过实体类自动生成数据库表的方法的文章就介绍到这了,更多相关springboot mybatis实体类生成数据库表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中jakarta.validation数据校验几个主要依赖包讲解

    Java中jakarta.validation数据校验几个主要依赖包讲解

    在Java开发中,BeanValidationAPI提供了一套标准的数据验证机制,尤其是通过JakartaBeanValidation(原HibernateValidator)实现,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • java实现连连看游戏课程设计

    java实现连连看游戏课程设计

    这篇文章主要为大家详细介绍了java实现连连看游戏课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • SpringBoot3+SpringSecurity6前后端分离的项目实践

    SpringBoot3+SpringSecurity6前后端分离的项目实践

    SpringSecurity6 的用法和以前版本的有较大差别,本文主要介绍了SpringBoot3+SpringSecurity6前后端分离的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Spring MVC获取HTTP请求头的两种方式小结

    Spring MVC获取HTTP请求头的两种方式小结

    这篇文章主要介绍了Spring MVC获取HTTP请求头的两种方式小结,帮助大家更好的理解和使用Spring MVC,感兴趣的朋友可以了解下
    2021-01-01
  • SpringBoot使用JPA实现查询部分字段

    SpringBoot使用JPA实现查询部分字段

    这篇文章主要介绍了SpringBoot使用JPA实现查询部分字段方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java 多线程Synchronized和Lock的区别

    Java 多线程Synchronized和Lock的区别

    这篇文章主要介绍了Java 多线程Synchronized和Lock的区别,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • Springboot使用jxls实现同sheet多个列表展示

    Springboot使用jxls实现同sheet多个列表展示

    这篇文章主要介绍了Springboot使用jxls实现同sheet多个列表展示,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java接口的本质解析

    Java接口的本质解析

    Java接口是初学者必须经历的基础,但初学之时肯定不会完全懂,温故而知新本篇文章就带你重拾接口全面掌握
    2022-03-03
  • java设计模式Ctrl C和Ctrl V的原型模式详解

    java设计模式Ctrl C和Ctrl V的原型模式详解

    这篇文章主要为大家介绍了java设计模式Ctrl C和Ctrl V的原型模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java模仿微信实现零钱通简易功能(两种版本)

    Java模仿微信实现零钱通简易功能(两种版本)

    本文主要介绍了使用Java开发零钱通项目, 模仿微信实现简易功能,可以完成收益入账,消费,查看明细,退出系统等功能。文中一共介绍了两种实现方法,快来学习吧
    2021-12-12

最新评论