java-mybatis-代码生成

1.概要

1.1 初衷

最近做了一个简单的,mybatis代码生成的东西,很简单,主要解决mybatis做添加和修改机能的时候需要大量的变量,这样处理起来很容易失误,所以弄个这个。对于数据库的,insert,update,delete,select。insert,update,delete几乎都是变化很少的,基本上所有的表处理方式不会有太大的差别。而select 相对变化更大,但是代码也相对更简单,这里的简单指设置的字段少,不容易失误。所以这里将insert,update,delete的代码自动生成。

另外最近有个思想,开发无非就是处理if\else\while。而while就是我们提高程序效率的关键,也是工作效率的关键,把多少逻辑交给while决定了,我们将多少重复的工作交给了计算机。也决定了我们的效率。所以别做重复的事成为了我们工作的目标,做多少重复的事情成了我们效率的关键,那么如果少做重复的事情呢,有两个方法:

1.通过设计合理的切割逻辑消除容易

2.减少自己重复的工作量,而这正是程序能做的,那我们是不是可以自己根据自己的工作情况制定一些工具,来取代自己重复的工作呢,当然很多工具已经做了这件事,但是针对具体的情况,具体的业务,具体的公司情况。通用的工具能力是有限的,那么我们是否可以尝试给自己做些合适的工具呢,于是有了这篇文章,代码不难,很简单。但我想这么做是否是个好主意呢,我决定逐渐的尝试。

1.2 知识点

// 当前目录下创建文件
file = new File("./" + createClassName() + "Mapper.java");
// 创建按字符向流中写入数据的对象
fw = new FileWriter(file.getPath());
// 向流中写入数据
fw.write(s, 0, s.length());
fw.flush();
fw.close();

1.3 业务点

//数据库的字段名
    String tableFields = "id,module_name,enable,name,note_time";
    //表名
    String tbName = "test_model";
    //生成文件的包名
    String packageName = "com.xjc.test";

 

2.代码 

package createCode.xml;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class CreateMapperAndInterface {
    static String kongGe = "	";
    //数据库的字段名
    String tableFields = "id,module_name,enable,name,note_time";
    //表名
    String tbName = "test_model";
    //生成文件的包名
    String packageName = "com.xjc.test";
    File file;
    FileWriter fw;
    

    public static void main(String[] args) {
	CreateMapperAndInterface dom = new CreateMapperAndInterface();
	dom.main();
    }
    public void main(){
	createModel();
	creatInterface();
	createMapper();
    }

    public void creatInterface() {
	try {
	    file = new File("./" + createClassName() + "Mapper.java");
	    fw = new FileWriter(file.getPath());
	    writeLine("package " + packageName);
	    writeLine("import java.util.List;");
	    writeLine("import org.apache.ibatis.annotations.Param;");
	    writeLine("import "+packageName+"."+createClassName()+";");
	    writeLine("");
	    writeLine("public interface " + createClassName() + "Mapper{");
	    writeLine(getKongGe(1) + "public void insert(" + createClassName() + " obj);");
	    writeLine(getKongGe(1) + "public void update(" + createClassName() + " obj);");
	    writeLine(getKongGe(1) + "public void delete(String id);");
	    writeLine(getKongGe(1) + "deletes(@Param(\"ids\") String[] ids)");
	    writeLine("}");
	    fw.flush();
	    fw.close();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
    }

    public void createModel() {
	try {
	    file = new File("./" + createClassName() + ".java");
	    fw = new FileWriter(file.getPath());
	    writeLine("package "+packageName+";");
	    writeLine("");
	    writeLine("public class "+createClassName()+" {");
	    String[] arrayFields = tableFields.split(",");
	    for (int i = 0; i < arrayFields.length; i++) {
		writeLine(getKongGe(1)+"private String "+desplayFilds(arrayFields[i])+";");
	    }
	    writeLine("}");
	    fw.flush();
	    fw.close();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
    }

    public void createMapper() {
	try {
	    file = new File("./" + createClassName() + "Mapper.xml");
	    if (file.exists()) {
		file.createNewFile();
		file.getPath();
	    }
	    fw = new FileWriter(file.getPath());
	    writeLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
	    writeLine(
		    "<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\" >");
	    writeLine("<mapper namespace=\"com.itumpsub.dao.itrm.AlarmCardForUserMapper\">");
	    writeLine(getKongGe(1) + "<insert id=\"insert\" parameterType=\"" + packageName + "." + createClassName()
		    + "\">");
	    writeLine(getKongGe(2) + createInsert());
	    writeLine(getKongGe(1) + "</insert>");
	    writeLine(getKongGe(1) + "<update id=\"update\" parameterType=\"" + packageName + "." + createClassName()
		    + "\">");
	    writeLine(getKongGe(2) + createUpdate());
	    writeLine(getKongGe(1) + "</update>");
	    writeLine(getKongGe(1) + "<delete id=\"delete\">");
	    writeLine(getKongGe(2) + createDelete());
	    writeLine(getKongGe(1) + "</delete>");
	    createDeletes();
	    writeLine("</mapper>\r\n");
	    fw.flush();
	    fw.close();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
    }

    private String createClassName() {
	return captureName(desplayFilds(this.tbName));
    }

    private void writeLine(String s) {
	s = s + "\r\n";
	try {
	    fw.write(s, 0, s.length());
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
    }

    private String getKongGe(int count) {
	StringBuilder ret = new StringBuilder();
	for (int i = 0; i < count; i++) {
	    ret.append(kongGe);
	}
	return ret.toString();
    }

    public String createInsert() {
	StringBuilder insertSql = new StringBuilder();
	StringBuilder insertTable = new StringBuilder();
	StringBuilder insertValues = new StringBuilder();

	String[] arrayFields = tableFields.split(",");
	for (int i = 1; i < arrayFields.length; i++) {
	    String classFild = createClassFilds(arrayFields[i]);
	    if (i == 1) {
		insertTable.append(tbName + "(" + arrayFields[i]);
		insertValues.append("values(#{" + classFild + "}");
	    } else if (i == (arrayFields.length - 1)) {
		insertTable.append("," + arrayFields[i] + ")");
		insertValues.append(",(#{" + classFild + "})");
	    } else {
		insertTable.append("," + arrayFields[i]);
		insertValues.append(",(#{" + classFild + "}");
	    }
	}
	insertSql.append(")");
	insertSql.append("insert into " + tbName + insertTable.toString() + "\r\n " + insertValues.toString());
	return insertSql.toString();
    }

    public String createUpdate() {
	StringBuilder updateSql = new StringBuilder();
	updateSql.append("update " + tbName + " set ");
	String[] arrayFields = tableFields.split(",");
	for (int i = 1; i < arrayFields.length; i++) {
	    String classFild = createClassFilds(arrayFields[i]);
	    if (i == 1) {
		updateSql.append(arrayFields[i] + "=#{" + classFild + "}");
	    } else {
		updateSql.append("," + arrayFields[i] + "=#{" + classFild + "}");
	    }
	}
	updateSql.append("\n where " + arrayFields[0] + "=#{" + createClassFilds(arrayFields[0]) + "}");
	return updateSql.toString();
    }

    public String createDelete() {
	String[] arrayFields = tableFields.split(",");
	StringBuilder deleteSql = new StringBuilder();
	deleteSql.append(
		"delete from " + tbName + " where " + arrayFields[0] + "=#{" + createClassFilds(arrayFields[0]) + "}");
	return deleteSql.toString();
    }

    public void createDeletes() {
	String[] arrayFields = tableFields.split(",");
	writeLine(getKongGe(1) + "<delete id=\"deletes\">");
	writeLine(getKongGe(2) + "delete from " + tbName);
	writeLine(getKongGe(2) + "where " + arrayFields[0] + " in");
	writeLine(getKongGe(2)
		+ "<foreach item=\"id\" collection=\"ids\" separator=\",\" open=\"(\" close=\")\" index=\"\">");
	writeLine(getKongGe(3) + "#{id}");
	writeLine(getKongGe(2) + "</foreach>");
	writeLine(getKongGe(1) + "</delete>");
    }

    private String createClassFilds(String filed) {
	String[] array = filed.split("_");
	String ret = array[0];
	if (array.length > 1) {
	    for (int i = 1; i < array.length; i++) {
		ret = ret + captureName(array[i]);
	    }
	}
	return ret;
    }

    private String desplayFilds(String filed) {
	String[] array = filed.split("_");
	String ret = array[0];
	if (array.length > 1) {
	    for (int i = 1; i < array.length; i++) {
		ret = ret + captureName(array[i]);
	    }
	}
	return ret;
	// System.out.println("private String " + ret + ";");
    }

    public String captureName(String name) {
	return name.substring(0, 1).toUpperCase() + name.substring(1);
    }
}

3.生成的文件

3.1TestModel.java

package com.xjc.test;

public class TestModel {
	private String id;
	private String moduleName;
	private String enable;
	private String name;
	private String noteTime;
}

3.2 TestModelMapper.java 

package com.xjc.test
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.xjc.test.TestModel;

public interface TestModelMapper{
	public void insert(TestModel obj);
	public void update(TestModel obj);
	public void delete(String id);
	deletes(@Param("ids") String[] ids)
}

 3.3 TestModelMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.itumpsub.dao.itrm.AlarmCardForUserMapper">
	<insert id="insert" parameterType="com.xjc.test.TestModel">
		)insert into test_modeltest_model(module_name,enable,name,note_time)
 values(#{moduleName},(#{enable},(#{name},(#{noteTime})
	</insert>
	<update id="update" parameterType="com.xjc.test.TestModel">
		update test_model set module_name=#{moduleName},enable=#{enable},name=#{name},note_time=#{noteTime}
 where id=#{id}
	</update>
	<delete id="delete">
		delete from test_model where id=#{id}
	</delete>
	<delete id="deletes">
		delete from test_model
		where id in
		<foreach item="id" collection="ids" separator="," open="(" close=")" index="">
			#{id}
		</foreach>
	</delete>
</mapper>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值