请选择 进入手机版 | 继续访问电脑版

spring boot + mybatis + mysql逆向工程独立项目

[复制链接]
小甜心 发表于 2021-1-1 18:33:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
将逆向工程单独剥离出来,作为一个独立的项目


  • 创建一个spring boot 的工程,并导入逆向工程的依赖和插件。此中xml设置如下:
  1.     4.0.0            org.springframework.boot        spring-boot-starter-parent        2.4.1                 com.zhangxiaosan.top    demo    0.0.1-SNAPSHOT    demo    Demo project for Spring Boot            1.8                            org.mybatis.spring.boot            mybatis-spring-boot-starter            2.1.4                            org.springframework.boot            spring-boot-devtools            runtime            true                            mysql            mysql-connector-java            runtime                            org.springframework.boot            spring-boot-configuration-processor            true                            org.springframework.boot            spring-boot-starter-test            test                                    org.mybatis.generator            mybatis-generator-core            1.3.5                                                    org.springframework.boot                spring-boot-maven-plugin                                                    org.mybatis.generator                mybatis-generator-maven-plugin                1.3.2                                    true                    true                                       
复制代码

  • application.properties 中设置数据库的毗连:
  1. #数据库设置spring.datasource.username=rootspring.datasource.password=rootspring.datasource.url=jdbc:mysql://localhost:3306/StudentApartmentManager?serverTimezone=UTC&useSSL=false&allowMultiQueries=truespring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
复制代码
3.在spring boot的启动入口中加入以下方法:
  1. package main;import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.exception.InvalidConfigurationException;import org.mybatis.generator.exception.XMLParserException;import org.mybatis.generator.internal.DefaultShellCallback;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import java.io.File;import java.io.IOException;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;@SpringBootApplicationpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);        //调用逆向生成的方法。        try {            DemoApplication.startGenerator();        } catch (IOException e) {            e.printStackTrace();        } catch (XMLParserException e) {            e.printStackTrace();        } catch (InvalidConfigurationException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }    /**     * 加入的方法,开始逆向生成     * */    public  static void startGenerator() throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {        List warnings=new ArrayList();        boolean overWriter=true;//指向设置文件          //指定设置文件路径        File configFile=new File(DemoApplication.class.getResource("/generatorConfig.xml").getFile());                ConfigurationParser cp=new ConfigurationParser(warnings);        Configuration config=cp.parseConfiguration(configFile);        DefaultShellCallback callback=new DefaultShellCallback(overWriter);        MyBatisGenerator myBatisGenerator=new MyBatisGenerator(config,callback,warnings);        myBatisGenerator.generate(null);    }}
复制代码
在此逆向工程中加入了对数据库字段的加密和解密使用。目前只提供有 AES 和 MD5两种方法。

若想要扩展其他的加密方式。过程如下:
1.在下图的文件中添加加密的方式。以AES加密算法为例在下图的privacy 文件夹中创建Aes类写加密解密方法。

Aes加密解密方法如下:
  1. package privacy;import java.util.Base64;public class Aes {    /**     * 加密     * */    public static String encrypt(String src) {        try {            String result = Base64.getEncoder().encodeToString(src.getBytes("UTF-8"));            return result;        } catch (Exception e) {            throw new RuntimeException("encrypt fail!", e);        }    }    /**     * 解密     * */    public static String decrypt(String src) {        try {            byte[] asBytes = Base64.getDecoder().decode(src);            String result = new String(asBytes,"UTF-8");            return result;        } catch (Exception e) {            throw new RuntimeException("decrypt fail!", e);        }    }}
复制代码

  • 创建AesTypeHandler类,继续mybatis 提供的 BaseTypeHandler底子类型处置处罚器。重写方法:
    分别为:

    • 取值方法:当取出值时,对指定的字段数据举行解密处置处罚。getNullableResult
    • 设置值方法:当设置值时,对指定字段举行加密处置处罚。setNonNullParameter
      并在方法中处置处罚逻辑。
      例如:

  1. package privacy;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class AesTypeHandler extends BaseTypeHandler {    @Override    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)            throws SQLException {        if (parameter != null){            ps.setString(i, Aes.encrypt((String)parameter));        }    }    @Override    public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {        String columnValue = rs.getString(columnName);        return Aes.decrypt(columnValue);    }    @Override    public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {        String columnValue = rs.getString(columnIndex);        return Aes.decrypt(columnValue);    }    @Override    public String getNullableResult(CallableStatement cs, int columnIndex)            throws SQLException {        String columnValue = cs.getString(columnIndex);        return Aes.decrypt(columnValue);    }}
复制代码
设置好后,注意在generatorConfig.xml文件生成表的设置中设置需要加密解密的字段,如下例如:
暗码使用MD5加密
手机号使用AES加密

启动逆向工程

如下图:赤色部门文件为项目启动入口,启动后生成蓝色部门,蓝色部门内里就有生成的各个数据表对应的文件,即在generatorConfig.xml中设置生成的文件。

注意:

  • 发起生成的蓝色部门的报名最好以自己创建的项目的报名一致。
  • 将生成的文件复制到项目中。包罗加密秘密的privacy文件夹一起复制。
  • 生成的实体Mapper.xml文件中修改对加密解密设置的文件路径,如下图:
    上图:逆向生成的Mapper.xml

上图:复制到项目后的的Mapper.xml
测试逆向生成的xml加密解密字段

写一个添加方法。将数据添加到数据库。此处省略添加代码(网上使用mybatis的增删改查例子大把多。)
添加之后在数据库中加密后的字段如下:

添加查询方法,在数据库中将纪录查询出来,(省略查询代码)

暗码部门为null的原因:暗码在使用md5加密时,也就是逆向工程项目的privacy 文件夹中的Md5TypeHandler类型处置处罚器中在对取值的使用时直接返回了null,如下图:

若要处置处罚,则自行按需求修改即可。
扩展,类型处置处罚器除了加密解密字段处置处罚之外,同理还能处置处罚时间和时间戳(存入数据时存下时间戳,取出时格式化时间为yyy-MM-dd HH:mm:ss格式)。又大概性别(存入时为1和0 ,取出时转换为男和女),还能应用在其他的状态值的处置处罚上。。。。。

逆向工程的源码:
  1. git clone git@github.com:llittlethree/mybatisGenerator.git
复制代码
来源:https://blog.csdn.net/qq_38313548/article/details/111991059
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )