通过Mybatis Generator生成Mapper java类和xml配置文件后,执行我的工具即可实现读写分离。
package org.rwsplit.main; import java.io.Closeable; import java.io.IOException; public class Base { protected static void close(Closeable... closeAbles){ if (closeAbles == null || closeAbles.length <= 0) { return; } for (Closeable closeAble : closeAbles) { if (closeAble != null) { try { closeAble.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
package org.rwsplit.main; import java.io.File; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; import org.rwsplit.util.FileUtil; public class RwSplit extends Base{ static Properties ENVPRO = new Properties(); static String FILENAME = "rwsplit.properties"; static String JAVA_READ_HOME = "java.home"; static String XML_READ_HOME = "xml.home"; static String JAVA_EXT = "Mapper.java"; static String XML_EXT = "Mapper.xml"; public static void main(String[] args) { InputStreamReader envFr = null; FileInputStream fis = null; try { fis = new FileInputStream(FILENAME); envFr = new InputStreamReader(fis,"UTF-8"); ENVPRO.load(envFr); String javaHome = ENVPRO.getProperty(JAVA_READ_HOME); reJava(javaHome); String xmlHome = ENVPRO.getProperty(XML_READ_HOME); reXml(xmlHome); } catch (IOException e) { e.printStackTrace(); } finally { close(envFr,fis); } } private static void reJava(String javaHome) throws IOException { File file = new File(javaHome); File[] javaFile = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(JAVA_EXT) && !name.contains("Read") && !name.contains("Write"); } }); for(File java : javaFile){ int index = java.getName().lastIndexOf(JAVA_EXT); File writeJava = new File(java.getParentFile(),"write/"+java.getName().substring(0, index)+"Write"+JAVA_EXT); FileUtil.copyFile(java, writeJava); replaceJavaContent(writeJava); File readJava = new File(java.getParentFile(),"read/"+java.getName().substring(0, index)+"Read"+JAVA_EXT); FileUtil.copyFile(java, readJava); replaceJavaContent(readJava); java.delete(); } } private static void reXml(String xmlHome) throws IOException { File file = new File(xmlHome); File[] xmlFile = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(XML_EXT) && !name.contains("Read") && !name.contains("Write"); } }); for(File xml : xmlFile){ int index = xml.getName().lastIndexOf(XML_EXT); File writeXml = new File(xml.getParentFile(),"write/"+xml.getName().substring(0, index)+"Write"+XML_EXT); FileUtil.copyFile(xml, writeXml); replaceNamespace(writeXml,"Write"); File readXml = new File(xml.getParentFile(),"read/"+xml.getName().substring(0, index)+"Read"+XML_EXT); FileUtil.copyFile(xml, readXml); replaceNamespace(readXml,"Read"); xml.delete(); } } public static void replaceJavaContent(File java) throws IOException { String content = FileUtil.readTxtByNIO(30*1024, java); content = content.replaceFirst("(package .*?);", "$1."+(java.getName().contains("Read")?"read":"write")+";"); String c2 = content.replaceFirst("public interface \\w+", "public interface "+java.getName().substring(0,java.getName().lastIndexOf("."))); FileUtil.writeFile(java, c2); } public static void replaceNamespace(File xml, String type) throws IOException { String content = FileUtil.readTxtByNIO(30*1024, xml); String c2 = content.replaceFirst("namespace=\"(.*?)\\.(\\w+)Mapper\"", "namespace=\"$1."+type.toLowerCase()+".$2"+type+"Mapper\""); FileUtil.writeFile(xml, c2); } }
package org.rwsplit.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileUtil { public static void copyFile(File src, File dest) throws IOException { FileInputStream in = new FileInputStream(src); if (!dest.exists()){ dest.getParentFile().mkdirs(); dest.createNewFile(); } FileOutputStream out = new FileOutputStream(dest); int c; byte buffer[] = new byte[1024]; while ((c = in.read(buffer)) != -1) { for (int i = 0; i < c; i++) out.write(buffer[i]); } in.close(); out.close(); } public static void writeFile(File file,String content) throws IOException { file.delete(); if (!file.exists()){ file.getParentFile().mkdirs(); file.createNewFile(); } FileOutputStream out = new FileOutputStream(file, true); out.write(content.getBytes("utf-8")); out.close(); } /** * NIO读取文件 * * @param fin * @return String */ public static String readTxtByNIO(int bufSize, File file){ return readTxtByNIO(bufSize, file, "UTF-8"); } /** * NIO读取文件 * * @param fin * @return String */ public static String readTxtByNIO(int bufSize, File file, String charset) { RandomAccessFile randomAccessFile = null; FileChannel fcin = null; StringBuilder strBuf = new StringBuilder(); ByteBuffer rBuffer = ByteBuffer.allocate(bufSize); byte[] bs = new byte[bufSize]; try { randomAccessFile = new RandomAccessFile(file, "r"); fcin = randomAccessFile.getChannel(); while (fcin.read(rBuffer) != -1) { int rSize = rBuffer.position(); rBuffer.rewind(); rBuffer.get(bs); rBuffer.clear(); String tempString = new String(bs, 0, rSize, charset); strBuf.append(tempString); } } catch (IOException e) { e.printStackTrace(); } finally { try { fcin.close(); randomAccessFile.close(); } catch (IOException e) { e.printStackTrace(); } } return strBuf.toString(); } }
java.home=C:/workspace2/apus/trunks/1.0/apus-web/src/main/java/com/odianyun/swift/apus/mapper xml.home=C:/workspace2/apus/trunks/1.0/apus-web/src/main/resources/mapper
相关推荐
MyBatis-Generator是一款强大的工具,它可以帮助开发者自动化地生成MyBatis相关的XML配置文件,以及对应的Java Bean和DAO类。这个工具极大地提高了开发效率,减少了手动编写这些基础代码的时间,使得开发者能够更加...
MyBatis Generator(MBG)是一个强大的工具,用于自动生成MyBatis的SQL映射文件、Java POJO类以及DAO接口和实现类。这个工具极大地简化了开发过程,特别是当处理大量的数据库表时,可以避免手动编写重复的代码。...
MyBatis Generator(MBG)是一个强大的工具,用于自动生成MyBatis的Mapper XML文件、Java POJO(Plain Old Java Object)实体类以及相关的getter和setter方法。它极大地简化了开发工作,使得开发者无需手动编写这些...
资源中整合了SSM,并实现了数据库读写分离。使用mybatis-generator动态生成mapper、dao、po,封装了常用的工具类,后期还继续维护,加上分布式缓存等等。
Mybatis-Generator是一款强大的自动化工具,专为Mybatis框架设计,极大地简化了开发过程中对实体类、DAO接口和Mapper XML文件的手动编写工作。通过配置,它可以自动生成这些代码,帮助开发者快速构建项目,提高开发...
Mybatis逆向工程jar包是针对Mybatis框架的一种工具性资源,主要用于简化数据库表结构到Mybatis的Mapper接口、XML配置文件以及实体类的生成过程。这个压缩包包含四个jar文件,它们各自承担不同的功能,使得开发者能够...
Mybatis Generator是一款自动化工具,能够根据数据库表结构自动生成Java实体类、Mapper接口和XML配置文件,大大减少了手动编写这些代码的工作量。只需配置好Generator的规则,就能一键生成符合需求的代码。 整合这...
MyBatis Generator是MyBatis框架的一个辅助工具,它可以自动生成MyBatis的Mapper接口、XML配置文件以及对应的实体类,极大地减少了手动编写这些代码的工作量。在分库分表场景下,MyBatis Generator可以生成针对每个...
它不依赖任何特定的ORM框架,可以与JDBC、MyBatis、Hibernate等无缝集成,支持水平扩展,实现分库分表、读写分离等高级功能。 二、环境配置 在本示例中,我们采用SpringBoot作为基础开发框架,Mybatis-Plus作为...
`Pro02MapperMBG`涉及到了MyBatis Generator(MBG),这是一个强大的代码生成工具。MBG可以自动生成MyBatis的Mapper接口、XML映射文件以及对应的实体类,大大减少了手动编写这些代码的时间。在本示例中,我们可能...
通过自动化工具,如MyBatis的Generator,可以根据数据库表结构自动生成这些层的模板代码,大大减少了重复劳动。 集成Redis到SSM中,需要在Spring配置文件中添加Redis的相关配置,包括连接池、序列化方式等。然后,...
3. **Mybatis Generator**:Mybatis Generator是一款代码生成工具,它可以基于数据库表自动生成Mybatis的Mapper接口、XML配置文件和Model类。在本项目中,使用"Mybatis-generator-config"配置文件,开发者可以定制化...
1. **mybatis-generator1.3.2**:MyBatis Generator是一个强大的工具,它可以生成MyBatis的SQL映射文件、Java模型类和Java DAO接口。通过配置XML文件,用户可以指定数据库表,Generator会自动生成相应的Java代码,这...
本话题将深入探讨如何利用工具,如"generator.rar",从Mysql数据库表自动生成Mybatis的XML映射文件和Bean类,从而实现快速开发和提高效率。 首先,我们来理解一下核心概念: 1. **Mybatis**:这是一个基于Java的...
"renren-generator"这个工具就是这样的一个例子,它的核心功能是基于数据库中的表结构,自动生成对应的Java代码,包括POJO(Plain Old Java Object)、DAO(Data Access Object)、Service以及Mapper文件。...
4. MyBatis Generator:自动生成Model、Mapper接口及XML配置文件,减少手动编写代码。 5. 事务管理:与Spring集成,支持声明式和编程式事务管理。 在合同管理系统中,我们可以看到以下几个主要模块: 1. 用户管理:...
5. 自动化代码生成:描述中提到的“自动生成代码插件”可能指的是使用工具如MyBatis Generator或Lombok,这些工具能够自动根据数据库模型生成Java实体类、DAO层代码以及Mapper XML文件,提高开发效率,减少手动编码...
1. **安装与配置**:在MyEclipse中安装Ibatis支持的插件,如MyBatis Generator,它能自动生成SQL映射文件、模型类和DAO接口。同时,需要在项目的`pom.xml`或`build.gradle`文件中添加Ibatis的依赖库。 2. **创建...
- MySQL主从复制,读写分离 - Spring Async - Spring Cache - Swagger - Spring Test - MockMvc - HTTPS - Spring DevTools - Spring Actuator - Logback+Slf4j多环境日志 - i18n - Maven Multi-Module - WebSocket ...