溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot+mybatis通過實體類如何自動生成數據庫表

發布時間:2020-07-10 11:00:39 來源:億速云 閱讀:4292 作者:清晨 欄目:開發技術

這篇文章主要介紹springboot+mybatis通過實體類如何自動生成數據庫表,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

前言

==9

首先引入相關的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//你實體類的路徑

個人項目配置文件,非統一,根據項目需求配置

springboot+mybatis通過實體類如何自動生成數據庫表

進行生成數據庫表相關配置

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)

springboot+mybatis通過實體類如何自動生成數據庫表

此時查看一下數據庫表會發現新建有em_t表

springboot+mybatis通過實體類如何自動生成數據庫表

新建表就這樣完成。

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

springboot+mybatis通過實體類如何自動生成數據庫表

說明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通過實體類如何自動生成數據庫表的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女