前言:
原本想使用autogenerator 是 mybatis-plus 的官方代码生成器 ,尝试了一下,竟然报错,原因可能是mybatis-plus和mybatis-plus-generator 的版本不一致,因为我用的mybatis-plus 的版本是3.42 ,但是mybatis-plus-generator的3.4.2不知道怎么了,下载不下来,只能下载3.4.1,发现运行起来老是报错,还有一堆配置说明要看,于是自己手写生成代码的工具类,觉得更简单些。分享给大家,请多多指教。
pom文件引入java-mysql 驱动依赖
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>8.0.22</version>
</dependency>
单类代码实现,复制粘贴到编辑器里,主方法运行即可。
import org.apache.commons.lang3.stringutils;
import java.io.file;
import java.io.fileoutputstream;
import java.sql.connection;
import java.sql.databametadata;
import java.sql.drivermanager;
import java.sql.resultt;
暗恋语录import java.text.simpledateformat;
import java.util.date;
/**
* mybatis plus通用生成工具
* 可生成业务接口、mapper接口、实体类
*
* @author tarzan liu
* @date 2021/4/10 19:44
*/
public class mybatisplustools {
private static final string driver = “com.mysql.cj.jdbc.driver”;//驱动
private static final string ur = “root”; //数据库账号
private static final string pwd = “123456”; //数据库密码
private static final string url = “
jdbc:mysql://127.0.0.1:3306/ofcms” + “?ur=” + ur + “&password=” + pwd+”&uunicode=true&characterencoding=utf-8&zerodatetimebehavior=converttonull”; //链接参数
private static string tablename = “of_cms_ad”; // 数据库表名
private static string aliasname = “cms_ad”; // 数据库别名,可以与数据库表名相同
private static final string packagepath = “com/tarzan/cms”; //mapper.xml命名空间路径
private static final string packagename = “com.tarzan.cms”; //mapper.xml命名空间路径
private static final string author = “tarzan”; // 作者
private static final string rootpathname = “src/main/java/”; // 默认生成主文件夹路径
private static connection getconnection = n北京婚姻调查ull;
static simpledateformat format = new simpledateformat(“yyyy-mm-dd hh:mm:ss”);
/**
* 链接数据库
*/
private static connection getconnections() {
try {
class.forname(driver);
getconnection = drivermanager.getconnection(url);
} catch (exception e) {
e.printstacktrace();
}
return getconnection;
}
/**
* 格式化默认值
*/
private static strin特价商品g defaultvalue(string value) {
if (stringutils.isnotblank(value)) {
return “;默认值:” + value;
}
{
return “”;
}
}
private static string getaliasname(string tablename,string prefix){
return tablename.substring(prefix.length());
}
/**
* 格式化数据类型
* 返回的是基本类型的包装类
* 如果使用基本数据类型long
*/
private static string formattype(string typevalue) {
if (“bit”.equalsignoreca(typevalue)) {
return “boolean”;
}
el if (
typevalue.equalsignoreca(“int”) || typevalue.equalsignoreca(“int unsigned”)
|| typevalue.equalsignoreca(“tinyint”) || typevalue.equalsignoreca(“tinyint unsigned”)
|| typevalue.equalsignoreca(“smallint”) || typevalue.equalsignoreca(“smallint unsigned”)
|| typevalue.equalsignoreca(“mediumint”) || typevalue.equalsignoreca(“mediumint unsigned”)
) {
return “integer”;
} el if (typevalue.equalsignoreca(“bigint”) || typevalue.equalsignoreca(“bigint unsigned”)) {
return “long”;
} el if (typevalue.equalsignoreca(“float”) || typevalue.equalsignoreca(“float unsigned”)) {
return “float”;
} el if (typevalue.equalsignoreca(“decimal”) || typevalue.equalsignoreca(“decimal unsigned”) || typevalue.equalsignoreca(“numeric”) || typevalue.equalsignoreca(“numeric unsigned”)
|| typevalue.equalsignoreca(“real”) || typevalue.equalsignoreca(“real unsigned”) || typevalue.equalsignoreca(“money”) || typevalue.equalsignoreca(“money unsigned”)
|| typevalue.equalsignoreca(“smallmoney”) || typevalue.equalsignoreca(“smallmoney unsigned”)) {
return “double”;
} el if (typevalue.equalsignoreca(“varchar”) || typevalue.equalsignoreca(“char”)
|| typevalue.equalsignoreca(“nvarchar”) || typevalue.equalsignoreca(“nchar”)
|| typevalue.equalsignoreca(“text”)) {
return “string”;
} el if (typevalue.equalsignoreca(“datetime”)) {
return “date”;
} el if (typevalue.equalsignoreca(“image”)) {
return “blod”;
} el {
return “long”;
}
}
/**
* 驼峰转换
*/
private static string columntoproperty(string column) {
stringbuilder result = new stringbuilder();
// 快速检查
if (column == null || column.impty()) {
// 没必要转换
return “”;}
el column =column.tolowerca();
if (!column.contains(“_”)) {
// 不含下划线,仅将首字母小写
return column.substring(0, 1).tolowerca() + column.substring(1);
} el {
// 用下划线将原始字符串分割
string[] columns = column.split(“_”);
for (string columnsplit : columns) {
// 跳过原始字符串中开头、结尾的下换线或双重下划线
if (columnsplit.impty()) {
continue;
}
// 处理真正的驼峰片段
if (result.length() == 0) {
// 第一个驼峰片段,全部字母都小写
result.append(columnsplit.tolowerca());
} el {
// 其他的驼峰片段,首字母大写
result.append(columnsplit.substring(0, 1).toupperca()).append(columnsplit.substring(1).tolowerca());
}
}
return result.tostring();
}
}
/**
* 实体名称转换
*/
private static string formatbeanname(string column) {
stringbuilder result = new stringbuilder();
// 快速检查
if (column == null || column.impty()) {
// 没必要转换
return “”;
} el if (!column.contains(“_”)) {
// 不含下划线,仅将首字母大写
return column.substring(0, 1).toupperca() + column.substring(1);
} el {
// 用下划线将原始字符串分割
string[] columns = column.split(“_”);
for (string columnsplit : columns) {
// 跳过原始字符串中开头、结尾的下换线或双重下划线
if (columnsplit.impty()) {
continue;
}
// 处理真正的驼峰片段
result.append(columnsplit.substring(0, 1).toupperca()).append(columnsplit.substring(1).tolowerca());
}
return result.tostring();
}
}
/**
* 实体类字段
*/
private static void getbean(string tablename,string aliasname) {
getconnection = getconnections();
stringbuilder sb = new stringbuilder();
try {
databametadata dbmd = getconnection.getmetadata();
resultt rs = dbmd.getcolumns(null, “%”, tablename, “%”);
string beanname = formatbeanname(aliasname);
sb.append(“package “+packagename+”.entity;\n\n”);
sb.append(“import com.baomidou.mybatisplus.annotation.tablename;\n”);
sb.append(“import lombok.data;\n”);
int length=sb.length();
boolean dateflag=fal;
sb.append( ” /**\n” +
” * @author ” + author + “\n” +
” * @date “+ format.format(new date())+”\n” +
” */\n” +
“@data\n” +
“@tablename(\””+tablename+”\”)\n” +
“public class “+beanname+”entity {\n”);
while (rs.next()) {
if(formattype(rs.getstring(“type_name”)).equals(“date”)){
dateflag=t什么是双学位rue;
}
sb.append(“\t//”).append(rs.getstring(“remarks”)).append(defaultvalue(rs.getstring(“column_def”))).append(“\n”);
sb.append(“\tprivate “).append(formattype(rs.getstring(“type_name”))).append(” “).append(columntoproperty(rs.getstring(“column_name”))).append(“;\n”);
}
sb.append(“} “);
if(dateflag){
sb.inrt(length, “import java.util.date;\n”);
}
} catch (exception e) {
e.printstacktrace();
}
write(sb.tostring(),”entity.java”,”entity”);
system.err.println(“\n类型:java数据层实体类(bean.java)” + “\n状态:成功” + “\n时间:” + format.format(new date()) + “\n”);
}
/**
* 生成dao层接口
*/
private static void getmapper(string tablename,string aliasname) {
stringbuilder sb = new stringbuilder();
try {
string beanname = formatbeanname(aliasname);
sb.append(“package “+packagename+”.mapper;\n\n”);
sb.append(“import com.baomidou.mybatisplus.core.mappe乐嘉性格色彩测试题r.bamapper;\n”);
sb.append(“import “+packagename+”.entity.”+beanname+”entity;\n”);
sb.append( “/**\n” +
” * @author ” + author + “\n” +
” * @date “+ format.format(new date())+”\n” +
” */\n” +
“public interface “+beanname+”mapper extends bamapper<“+beanname+”entity>{\n” +
” \n” +
“}”);
} catch (exception e) {
e.printstacktrace();
}
write(sb.tostring(),”mapper.java”,”mapper”);
system.err.println(“\n类型:java数据持久层接口(dao.java)” + “\n状态:成功” + “\n时间:” + format.format(new date()) + “\n”);
}
/**
* 生成rvice层接口
*/
private static void getrvice(string tablename,string aliasname) {
stringbuilder sb = new stringbuilder();
try {
string beanname = formatbeanname(aliasname);
sb.append(“package “+packagename+”.rvice;\n\n”);
sb.append(“import com.baomidou.mybatisplus.extension.rvice.impl.rviceimpl;\n”);
sb.append(“import org.springframework.stereotype.rvice;\n”);
sb.append(“import “+packagename+”.mapper.”+beanname+”mapper;\n”);
sb.append(“import “+packagename+”.entity.”+beanname+”entity;\n”);
sb.append( “/**\n” +
” * @author ” + author + “\n” +
” * @date “+ format.format(new date())+”\n” +
” */\n” +
“@rvice\n” +
“public class “+beanname+”rvice extends rviceimpl<“+beanname+”mapper, “+beanname+”entity>{\n” +
“\n” +
“}”);
} catch (exception e) {
e.printstacktrace();
}
write(sb.tostring(),”rvice.java”,”rvice”);
system.err.println(“\n类型:java业务层接口(rvice.java)” + “\n状态:成功” + “\n时间:” + format.format(new date()) + “\n”);
}
/**
* 写文件,支持中文字符,在linux redhad下测试过
* @param str 文本内容
* @param name 文本名称
* */
private static void write(string str, string name,string type) {
try {
file dir = new file(rootpathname +packagepath+ “/” + type);
dir.mkdirs();
string path = dir.getpath() + “/” + formatbeanname(aliasname)+name;
file file = new file(path);
if (!file.exists())
file.createnewfile();
fileoutputstream out = new fileoutputstream(file, fal); //如果追加方式用true
stringbuilder sb = new stringbuilder();
sb.append(str + “\n”);
out.write(sb.tostring().getbytes(“utf-8”));//注意需要转换对应的字符集
out.clo();
} catch (exception e) {
e.printstacktrace();
}
}
//一次生产所有表
private static void tablenames() {
getconnection = getconnections();
try {
databametadata dbmd = getconnection.getmetadata();
resultt rs = dbmd.gettables(getconnection.getcatalog(), null, null, new string[] { “table” });
while (rs.next()) {
tablename=rs.getstring(“table_name”);
aliasname=getaliasname(tablename,”of_”);
//实体
getbean(tablename,aliasname);
//dao层接口
getmapper(tablename,aliasname);
//业务类接口
getrvice(tablename,aliasname);
}
} catch (exception e) {
e.printstacktrace();
}
}
public static void main(string[] args) {
// tablenames();
//实体
getbean(tablename,aliasname);
//mapper接口
getmapper(tablename,aliasname);
//业务类接口
getrvice(tablename,aliasname);
}
}
生成文件截图
实体
mapper
rvice
本文发布于:2023-04-05 02:50:29,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/2435ac2f412711b75387e2e373e51e6f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:mybatisplus代码生成器使用(java代码生成工具).doc
本文 PDF 下载地址:mybatisplus代码生成器使用(java代码生成工具).pdf
留言与评论(共有 0 条评论) |