MybatisCodeGenerator解析

github:https://github.com/Cukuyo/MybatisCodeGenerator

本项目是基于Jdk 1.8和maven开发的一款自动生成Mybatis Po层、dao层、mapper层、service层、serviceImpl层的工具,自动生成的代码则是我平常使用的编码习惯和规范,如果有问题或者发现BUG请提交一份Issue,如果你能赋予它更多的功能和更强的性能则更好
在这里插入图片描述

这个项目其实大部分都是苦力活,没什么技术含量,基本就是读取指定数据库数据表的字段,然后往不同文件写不同数据

唯一有点技术含量的就是读取数据库

连接

pom.xml加上mysql依赖

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>LATEST</version>
		</dependency>

代码里写上

    /**
     * 数据库连接对象
     */
    private Connection connection;
    /**
     * SQL执行对象
     */
    private Statement statement;
        public void connect() throws SQLException {
        //2018年10月14日:应用程序不再需要显式地加载JDBC驱动程序使用forname ()。
        //现有的项目目前加载JDBC驱动程序使用forname()将继续没有修改
//        try {
//            //指定JDBC连接时调用的DriverManager,注意:
//            //1、不要导入com.mysql.cj.jdbc.*,否则你会有麻烦的!
//            //2、newInstance()调用是针对一些损坏的Java实现的解决方案
//            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new SQLException(e.getMessage());
//        }

        String url = "jdbc:mysql://" + ip + ":" + port;
        connection = DriverManager.getConnection(url, user, password);
        statement = connection.createStatement();

查询有哪些数据库

这里直接用查sql的方式,不走驱动的api

    public List<String> getDatabases() throws SQLException {
        ResultSet resultSet = statement.executeQuery("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA");
        List<String> dbNameList = new LinkedList<>();
        while (resultSet.next()) {
            dbNameList.add(resultSet.getString("SCHEMA_NAME"));
        }
        resultSet.close();
        return dbNameList;
    }

查询库下有哪些表

也是直接走sql

    public List<Table> getTables(String dbName) throws SQLException {
        ResultSet resultSet = statement.executeQuery(
                "SELECT TABLE_NAME,TABLE_COMMENT " +
                        "FROM information_schema.TABLES " +
                        "WHERE TABLE_SCHEMA=" + '\'' + dbName + '\'');
        List<Table> tableList = new LinkedList<>();
        while (resultSet.next()) {
            Table table = new Table();
            .....................
            tableList.add(table);
        }
        resultSet.close();
        return tableList;
    }

查询表的字段属性

走sql

    public List<Column> getColumns(String dbName, String tableName) throws SQLException {
        ResultSet resultSet = statement.executeQuery(
                "SELECT COLUMN_NAME,DATA_TYPE,COLUMN_TYPE,COLUMN_KEY,COLUMN_COMMENT " +
                        "FROM information_schema.COLUMNS " +
                        "WHERE TABLE_SCHEMA=" + '\'' + dbName + '\'' + " AND TABLE_NAME=" + '\'' + tableName + '\'');
        List<Column> columnList = new LinkedList<Column>();
        while (resultSet.next()) {
            Column column = new Column();
             ...............
            columnList.add(column);
        }
        resultSet.close();
        return columnList;
    }

导出mybatis代码

导出

        FileOutputStream fileOutputStream = new FileOutputStream(path);
        OutputStreamWriter writer = new OutputStreamWriter(fileOutputStream, ExportInfo.CHARSET_NAME);
        writer.write();
	    writer.write();
	    .................//老夫就一个字,写!
        writer.close();

踩的坑

1、获取到字段的属性了,那么得知道它对应的java类型,这是个苦力活,不信你瞧
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-type-conversions.html和JdbcTypeSearch这个类,全是一个字一个字敲的
2、写dao层你会发现需要po层的包名,写service层需要dao层和po层的包名,写serviceImpl层需要dao、service、po三层的包名,类似的坑还有一两个,所以我索性全放在一个ExportInfo里,然后传给每一个导出的函数,你看

	.........................................................
	..........................
    private String poPackageName;
    private String poClassName;
    private String poPackageClassName;
    private String poVariableName;
    private String poFileName;

    private String daoPackageName;
    private String daoClassName;
    private String daoPackageClassName;
    private String daoVariableName;
    private String daoFileName;

    private String servicePackageName;
    private String serviceClassName;
    private String servicePackageClassName;
    private String serviceVariableName;
    private String serviceFileName;

    private String serviceImplPackageName;
    private String serviceImplClassName;
    private String serviceImplPackageClassName;
    private String serviceImplVariableName;
    private String serviceImplFileName
    ...........................................
    ........................
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值