Springboot,Mybatis根据实体类自动建表
Springboot,Mybatis根据实体类自动建表
在创建实体类的同时还要在数据库建表,如果只是很少的属性那么无所谓,但是当实体类很多或者字段很多时这就是一个非常让人不爽的事情了
通常有两种思路,一种是根据数据库来自动创建实体类,这个mybatis-generator已经提供了方法
还有一种思路就是根据实体类来自动建立表格
这里需要用到A.CTable框架,也就是mybatis-enhance-actable
一个小Demo,一步步来
首先添加依赖项
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.17</version></dependency><!-- 添加mybatis依赖 --><!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency><!--添加A.CTable框架 --><dependency><groupId>com.gitee.sunchenbin.mybatis.actable</groupId><artifactId>mybatis-enhance-actable</artifactId><version>1.0.3</version></dependency><!-- 阿里系的Druid依赖包 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.9</version></dependency><!-- Druid 依赖 log4j包 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
项目结构如下
然后在application.yml文件里添加配置信息
#服务配置
server:port: 8080spring:#数据库配置datasource:username: yourusernamepassword: yourpassworddriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://yoururl#阿里druid连接池驱动配置信息type: com.alibaba.druid.pool.DruidDataSource#连接池的配置信息druid:#初始化大小,最小,最大initial-size: 2#A.CTable配置
mybatis:#自动更新表table:auto: true#实体类扫描地址model:pack: com.boot_demo.demo1.entity#数据库类型 database:type: mysql
下面开始写配置信息
@Configuration
@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})
public class TestConfig {@Value("${spring.datasource.driver-class-name}")private String driver;@Value("${spring.datasource.url}")private String url;@Value("${spring.datasource.username}")private String username;@Value("${spring.datasource.password}")private String password;@Beanpublic YamlPropertiesFactoryBean configProperties() throws Exception{YamlPropertiesFactoryBean propertiesFactoryBean = new YamlPropertiesFactoryBean();PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();propertiesFactoryBean.setResources(resolver.getResources("classpath*:application.yml"));return propertiesFactoryBean;}@Beanpublic 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;}@Beanpublic DataSourceTransactionManager dataSourceTransactionManager() {DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource());return dataSourceTransactionManager;}@Beanpublic 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.example.entity.*");return sqlSessionFactoryBean;}}
@Configuration
@AutoConfigureAfter(TestConfig.class)
public class MyBatisMapperScannerConfig {@Beanpublic MapperScannerConfigurer mapperScannerConfigurer() throws Exception{MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setBasePackage("com.example.dao.*;com.gitee.sunchenbin.mybatis.actable.dao.*");mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");return mapperScannerConfigurer;}
}
下面创建实体类
根据Column注解在数据库创建指定的结构
@Table(name="test")
public class Test {@Column(name="id",type= MySqlTypeConstant.VARCHAR)private String id;@Column(name="value",type = MySqlTypeConstant.VARCHAR)private String value;@Column(name="comment",type = MySqlTypeConstant.VARCHAR)private String comment;}
如果指定了某个字段为主键且要自增,那么该字段必须为Integer-MySqlTypeConstant.INT且需要在Column注解中添加如下属性
isKey = true,isAutoIncrement = true
mybatis-enhance-actable本身BaseMysqlCRUDManager提供了根据实体类进行简单增删改查的方法,当然如果有特殊需要还是要自己写mapper映射的,这里就不写了,来看看它提供的基础方法
先写dao层
@Repository
public class TestDao {@Autowiredprivate BaseMysqlCRUDManager baseMysqlCRUDManager;public void delete(Test test){baseMysqlCRUDManager.delete(test);}public void insert(Test test){baseMysqlCRUDManager.save(test);}
}
然后写一下service层
@Service
public class TestServiceImpl implements TestService {@Autowiredprivate TestDao testDao;@Overridepublic void insert(Test test) {testDao.insert(test);}@Overridepublic void delete(Test test) {testDao.delete(test);}
}
controller层
@RestController
@RequestMapping("/test")
public class TestController {@Autowiredprivate TestService testService;@RequestMapping("/hello")public String hello(){return "hello";}@RequestMapping("/add")public String add(){Test test=new Test();test.setId(UUID.randomUUID().toString());test.setValue("插入测试");test.setComment("插入测试");try {testService.insert(test);} catch (Exception e) {e.printStackTrace();return "failed";}return "success";}@RequestMapping("/remove")public String remove(){Test test=new Test();test.setId("1b2c3d4e");try {testService.delete(test);} catch (Exception e) {e.printStackTrace();return "failed";}return "success";}
}
下面启动项目,我们可以看到控制台日志出现这样的信息
这就代表数据库表已经建立成功了
如果控制台出现ClassNotFound:apache.common.lang.ArrayUtils的报错,就需要再添加一下依赖
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency>
下面测试一下add和delete方法
我先在数据库中添加数据
数据添加成功
数据删除成功
参考文章
spring-boot + mybatis-enhance-actable 实现mybatis自动建表
SpringBoot+Mybatis 自动创建数据表
Springboot,Mybatis根据实体类自动建表相关推荐
- hibernate mysql 自动建表_配置hibernate根据实体类自动建表功能
Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码update upda ...
- 配置hibernate根据实体类自动建表功能
Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...
- java实体类生成mysql表_springboot+mybatis通过实体类自动生成数据库表的方法
前言 本章介绍使用mybatis结合mysql数据库自动根据实体类生成相关的数据库表. 首先引入相关的pom包我这里使用的是springboot2.1.8.RELEASE的版本 org.mybatis ...
- Hibrenate实现根据实体类自动创建表或添加字段
Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 实现: 在配置hibernate的配置文件中将hbm2ddl.auto设置为update,如:Xml代码&l ...
- SpringBoot集成JPA根据实体类自动生成表
数据库是mysql,在application.properties中的写法如下: 原来配置这样的时候确实可以生产表的 #spring.jpa.hibernate.ddl-auto=update 多方查 ...
- c 自动生成mysql表结构_EntityFrameworkCore 根据实体类自动创建数据库
1.首先新建 Asp.Net Core WebApi 项目 2.添加一下引用 : 2.1 Pomelo.EntityFrameworkCore.MySql(我用的Mysql 根据自己情况引用就行) ...
- Springboot+Maven+Mybatis-enhance-actable 根据实体类自动更新数据库表和字段
参考文章springboot+mybatis/mybatis-plus根据实体类自动创建数据库表,我在上面加了需要修改的说明 目录 pom.xml application.yml DataSource ...
- Springboot 之 Hibernate自动建表(Mysql)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 引入Maven依赖包 <dependency><groupId>org.sp ...
- SpringBoot - MyBatis-Plus使用详解2(设置实体类对应的表名、字段名 )
二.设置模型对应的表名.字段名 1,设置关联的表名 (1)默认情况下,如果数据库表是使用标准的下划线命名,并且能对应上实体类的类名,我们就不需要特别去手动匹配.比如有张 user_info 表,那么会 ...
最新文章
- 写在前面-Terraform
- JavaScript之事件的绑定与移除
- Win的phpstudy安装VC报错
- D. Multiset(树状数组 + 二分)
- Linux网络编程实例详解
- MongoDB3.xxx 用户创建
- 微软再次“封杀” Flash Player!
- linux消息队列总结
- hadoop实现单词统计
- 一张图搞懂CPU、OpenGL/DirectX、显卡驱动和GPU之间的关系
- 喜欢这样的游戏---流畅的俯视坦克射击游戏
- UEditor .Net版本任意文件上传漏洞复现
- C语言全局变量限定范围,C语言范围规则
- 静态路由Route不生效的解决方法
- WEB项目的相对路径与绝对路径
- 【iPhone】添加订阅日历URL-节假日
- 时间频度和时间复杂度
- Android笔记系列--获取手机号码
- Java影院网上购票管理系统_java影院售票管理系统
- 华为H22M-03服务器安装CentOS 7操作系统