mybaites执行DDL建表、添加字段、同步数据库,mysql数据库

mybaites执行DDL建表、添加字段、同步数据库

最近做项目有一个功能是实现同步数据库,在网上搜了很多没有找到合适的,自己拼凑出来了完整的sql,在这里分享一下,也当作自己的工作笔记,本人是刚毕业的小白,写的不好勿喷!

建表CREATE TABLE

//我这里是传一个hashMap把表名放到map里,剩下的字段在同一个实体类里,就放到了ArrayList里(因为建表时候可能会有多个字段),
update id="createTable"  parameterType="hashMap">
					create table ${param.tableName}//这是表名
		<foreach collection="param.list" item="item"  open="(" separator="," close=")">
					//colCode是字段代码  colDatatype是字段类型 colLength是字段长度,因为可能是浮点型所以需要判断一下
					${item.colCode} ${item.colDatatype}(${item.colLength}
				<if test="item.colPrecision !=null and item.colPrecision != ''">
					,${item.colPrecision}//colPrecision是小数位
				</if>
				)//isPk是主键
				<if test="item.isPk != null and item.isPk != ''">
					${item.isPk}
				</if>//isNull是是否为空
				   ${item.isNull}
				<if test="item.colDefault !=null and item.colDefault != ''">
					default ${item.colDefault}//这是默认值
				</if>
				<if test="item.isAutoIncrement !=null and item.isAutoIncrement != ''">
				    	${item.isAutoIncrement}//是否自增
				</if>
				<if test="item.colComment != null and item.colComment !=''">
					comment #{item.colComment}//注释
				</if>
		</foreach>
</update>

上面的主键,是否为空,自增等不要忘了在controller里进行判断哦,这里放一部分我写的判断

for (SysColumns sysColumns : list) {
            if ((sysColumns.getIsPk()).equals("Y")){
                sysColumns.setIsPk("PRIMARY KEY");
            }else {
                sysColumns.setIsPk(null);
            }
            if ((sysColumns.getIsNull()).equals("N")){
                sysColumns.setIsNull("not null");
            }else {
                sysColumns.setIsNull("null");
            }
            if ((sysColumns.getIsAutoIncrement()).equals("Y")){
                sysColumns.setIsAutoIncrement("auto_increment");
            }else {
                sysColumns.setIsAutoIncrement(null);
            }
        }

单独添加字段的,alter table时候用的

//这里我是把每一个属性都单独put到map里了,这个也不要忘了在controller里进行判断,这个和上面的有点不大一样,这里就不放了,太乱了见谅。。。
<update id="addColumns" parameterType="hashMap">
		alter table ${param.tableName} add ${param.colCode} ${param.colDatatype}(${param.colLength}
		<if test="param.colPrecision !=null and param.colPrecision != ''">
			,${param.colPrecision}
		</if>
		)
		<if test="param.isPk != null and param.isPk != ''">
		    	${param.isPk}
		</if>
		  ${param.isNull}
		<if test="param.colDefault !=null and param.colDefault != ''">
			default ${param.colDefault}
		</if>
		<if test="param.isAutoIncrement !=null and param.isAutoIncrement != ''">
			 ${param.isAutoIncrement}
		</if>
		<if test="param.colComment != null and param.colComment != ''">
			comment #{param.colComment}
		</if>

	</update>

##SysTable实体类

public class SysTable extends BaseEntity {
	//tableId
    private Long tableId;
    //unitId是表所属模块的Id
    private Long  unitId;
    //表代码(英文名)
    private String tableCode;
    //表名(中文名)
    private String tableName;
    //是否部署
    private String isDeploy;
    //部署者
    private String deployBy;
    //部署时间
    private Date deployTime;
    
    //下面是set和get方法还有重写toString
    

##SysColumns实体类

public class SysColumns extends BaseEntity {
	//colId
    private Long colId;
    //所属表的Id
    private Long  tableId;
    //字段名(中文名)
    private String colName;
    //字段名(英文名)
    private String   colCode;
    //字段注释
    private String  colComment;
    //字段类型
    private String    colDatatype;
    //字段长度
    private Long colLength;
    //小数位
    private Long colPrecision;
    //默认值
    private String  colDefault;
    //是否为空
    private String  isNull;
    //是否主键
    private String isPk;
    //是否自增
    private String isAutoIncrement;
    //部署者
    private String deployBy;
    //部署时间
    private Date deployTime;

最后附上一个从数据库向平台同步字段的代码

超级超级笨的办法同步的。。。全是截取字符串。。。这里就不多解释了,因为我写完了我自己都看不懂了。。。太乱了。。。

<select id="selectColumns" parameterType="String" resultMap="SysColumnsResult">
		SELECT a.colCode,a.colName,a.colDatatype,a.colPrecision,a.colDefault,a.colComment,IF((position(',' in a.colLength))>0, (SUBSTRING_INDEX(a.colLength ,',',1)),a.colLength) as colLength,a.isPk,a.isNull,a.isAutoIncrement from (
select COLUMN_NAME as 'colCode',column_comment as 'colName',SUBSTRING_INDEX(column_type,'(',1) as 'colDatatype',NUMERIC_SCALE as 'colPrecision',
column_default as 'colDefault',column_comment as 'colComment',
IF((position('(' in column_type))>0, (SUBSTRING_INDEX(SUBSTRING(column_type,1,LENGTH(column_type)-1) ,'(',-1)),NULL) as'colLength',
		IF(column_key='PRI','Y','N') as 'isPk', IF(IS_NULLABLE='NO','N','Y') as 'isNull',
		IF(EXTRA='auto_increment','Y','N') as'isAutoIncrement' from INFORMATION_SCHEMA.Columns
		where table_name=#{tableName} and table_schema='ruoyu'
		) a
	</select>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值