添加常用查询新增方法

开发工具与关键技术:Eclipse 10、java
作者:梁添荣
撰写时间:2020-05-08

项目很多模块都需要各种增删查改,每需要一次就写一次,这样就太浪费时间了,
这时我们可以更改MyBatisBaseDao,添加一些常用的接口,并在mapper/dao对应的mapping文件添加实现该接口的方法,想法如下,重新写一个MybatisBaseDao替换之前的,
重新写所有mapping文件,添加实现MybatisBaseDao接口的方法,具体代码如下:

public class ProjectUtil {
//=====路径
private final static String mappingRelativePath="/src/main/resources/mapping";// 装xml文件的相对路劲

private final static String myBatisBaseDaoPath="/src/main/java/com/gx/commom";//MyBatisBaseDao的相对路劲
private final static String myBatisBaseDaoPackage="com.gx.commom";//MyBatisBaseDao引用包路径,请和myBatisBaseDaoPath相对应

private final static String BaseServicePath="/src/main/java/com/gx/commom";//BaseService的相对路劲
private final static String BaseServicePackage="com.gx.commom";//BaseService引用包路径,请和BaseServicePath相对应

private final static String projectPath=System.getProperty("user.dir");//项目路径

//读取xml后所需的内容
private static String filePath;//xml文件绝对路径
private static String xmlText;//xml文本内容
private static String tableName;//表名
private static String idName;//表主键id名
private static String idPo;//实体类主键id名

private static String insertMethod;//新增方法

public static void main(String[] args) {
	//===创建MyBatisBaseDao和修改xml,必须配套使用
	//getAll();//修改xml
	//updateMyBatisBaseDao();//修改MyBatisBaseDao
	
	//===创建BaseService、BaseServiceImpl、BaseController,若不需要请注释不执行(必须配套使用)
	//createBase();//创建BaseService、BaseController
	//createBaseServiceImpl();//BaseServiceImpl
	
	System.out.println("创建完成!");
}
//获取xml文件绝对路径、文件内容、表名、表主键id名、实体类主键名、idinsert方法
public static void getAll() {
	File mappingFile=new File(projectPath+mappingRelativePath);
	if(mappingFile.isDirectory()) {
		String[] fileNames=mappingFile.list();
		for (String fileName : fileNames) {
			//绝对路径
			filePath=projectPath+mappingRelativePath+"/"+fileName;
			
			File xmlFile=new File(filePath);
			if(xmlFile.exists()) {
					Long xmlFileLength = xmlFile.length();
					byte[] bye=new byte[xmlFileLength.intValue()];
					try {
						FileInputStream in=new FileInputStream(xmlFile);
						in.read(bye);
						in.close();
						String text=new String(bye);
						//文件内容
						xmlText=text;
						
						text=text.substring(text.indexOf("<include"),text.indexOf("</select>"));
						text=text.replace(" ", "");
						text=text.replace("	", "");//tab空格
						text=text.substring(text.indexOf("from"),text.indexOf("=#")+1);
						//表名
						tableName=text.substring(text.indexOf("from")+4,text.indexOf("where"));
						//表id名
						idName=text.substring(text.indexOf("where")+5,text.indexOf("="));
						//实体类id名
						idPo=xmlText.substring(xmlText.indexOf("property=\"")+10,xmlText.indexOf("\" />")).trim();
						//insert方法
						insertMethod=xmlText.substring(xmlText.indexOf("<insert"), xmlText.indexOf("</insert>")+9);
						
					} catch (FileNotFoundException e) {
						System.err.println("获取失败");
						e.printStackTrace();
					} catch (IOException e) {
						System.err.println("获取失败");
						e.printStackTrace();
					}
					
					//创建xml文件
					updateFile();
			}else {
				System.err.println("xml文件不存在");
			}
		}
		 
	}else {
		System.err.println("mapping目录不存在");
	}
	
}
//修改xml文件
public static void updateFile() {
	xmlText=xmlText.substring(0, xmlText.lastIndexOf("</mapper>"));
	StringBuffer buffer=new StringBuffer();
	buffer.append(xmlText+"\r\n"+"<!-- ProjectUtil拓展功能↓ -->"+"\r\r");
	
	//查询所有
	buffer.append("  <select id=\"selectSingleTable\" resultMap=\"BaseResultMap\">\r\n" + 
			"  select\r\n" + 
			"  <include refid=\"Base_Column_List\" />\r\n" + 
			"  from "+tableName+"\r\n" + 
			"  </select>");
	
	buffer.append("\r\r\n");
	
	
	//==新增返回主键
	buffer.append("  <insert id=\"insertAndGetPrimaryKey\" useGeneratedKeys=\"true\" keyProperty=\""+idPo+"\" ");
	buffer.append(insertMethod.substring(insertMethod.indexOf("parameterType"), insertMethod.indexOf("</insert>")+9));
	
	buffer.append("\r\r\n");
	
	//分页查询
	buffer.append("  <select id=\"selectSingleTableByPage\" resultMap=\"BaseResultMap\">\r\n" + 
			"  select\r\n" + 
			"  <include refid=\"Base_Column_List\" />\r\n" + 
			"  from "+tableName+"\r\n" + 
			"  order by "+idName+" desc limit #{startIndex,jdbcType=INTEGER},#{pageSize,jdbcType=INTEGER}\r\n" + 
			"  </select>");
	
	buffer.append("\r\r\n");
	
	//查询总条数
	buffer.append("  <select id=\"totalRowsSingleTable\" resultType=\"java.lang.Integer\">\r\n" + 
			"  SELECT COUNT("+idName+") FROM "+tableName+"\r\n" + 
			"  </select>");
	
	buffer.append("\r\r<!-- ProjectUtil拓展功能↑ -->\r\r\n</mapper>");
	
	//开始创建:如果创建的文件已存在,则删除其文件再创建文件
	try {
		OutputStream outputStream=new FileOutputStream(filePath);
		outputStream.write(buffer.toString().getBytes());
		outputStream.flush();
		outputStream.close();
	} catch (FileNotFoundException e) {
		System.err.println("创建失败");
		e.printStackTrace();
	} catch (IOException e) {
		System.err.println("写入失败");
		e.printStackTrace();
	}
}

//创建MyBatisBaseDao
public static void updateMyBatisBaseDao() {
	StringBuffer buffer=new StringBuffer();
	buffer.append("package "+myBatisBaseDaoPackage+";\r");
	
	buffer.append("import java.io.Serializable;\r\n" + 
			"import java.util.List;\r\n" + 
			"import org.apache.ibatis.annotations.Param;\r\n" + 
			"\r\n" + 
			"import com.gx.vo.SelectOption;\r\n" + 
			"/**\r\n" + 
			" * DAO公共基类,由MybatisGenerator自动生成请勿修改\r\n" + 
			" * @param <Model> The Model Class 这里是泛型不是Model类\r\n" + 
			" * @param <PK> The Primary Key Class 如果是无主键,则可以用Model来跳过,如果是多主键则是Key类\r\n" + 
			" */\r\n" + 
			"public interface MyBatisBaseDao<Model, PK extends Serializable> {\r\n" + 
			"    int deleteByPrimaryKey(PK id);\r\n" + 
			"\r\n" + 
			"    int insert(Model record);\r\n" + 
			"\r\n" + 
			"    int insertSelective(Model record);\r\n" + 
			"\r\n" + 
			"    Model selectByPrimaryKey(PK id);\r\n" + 
			"\r\n" + 
			"    int updateByPrimaryKey(Model record);\r\n" + 
			"    \r\n" + 
			"    int updateByPrimaryKeySelective(Model record);\r\n" + 
			"    \r\n" + 
			"    //==========ProjectUtil拓展功能↓\r\n" + 
			"    \r\n" + 
			"    //==单表操作,xml已实现\r\n" + 
			"    List<Model> selectSingleTable();\r\n" + 
			"    //分页&模糊查询  ps:需要模糊查询请在该SQL添加  如果like不为null,拼接模糊查询语句即可\r\n" + 
			"    List<Model> selectSingleTableByPage(@Param(\"startIndex\")Integer startIndex,@Param(\"pageSize\")Integer pageSize,@Param(\"like\")String like);\r\n" + 
			"    //分页&模糊查询  数据总数  ps:需要模糊查询请在该SQL添加  如果like不为null,拼接模糊查询语句即可\r\n" + 
			"    Integer totalRowsSingleTable(@Param(\"like\")String like);\r\n" + 
			"    //新增并返回主键\r\n" + 
			"    int insertAndGetPrimaryKey(Model record);\r\n" + 
			"    \r\n" + 
			"    //==单表操作,xml未实现\r\n" + 
			"    List<SelectOption> SelectOption();//绑定下拉框\r\n" + 
			"    //根据用户名查询用户,判断是否存在该用户\r\n" + 
			"    Model selectByName(@Param(\"name\")String name);\r\n" + 
			"    \r\n" + 
			"    //==多表操作,xml未实现\r\n" + 
			"    //分页&模糊查询  ps:需要模糊查询请在该SQL添加  如果like不为null,拼接模糊查询语句即可\r\n" + 
			"    List<Model> selectMultilist(@Param(\"startIndex\")Integer startIndex,@Param(\"pageSize\")Integer pageSize,@Param(\"like\")String like);//分页查询\r\n" + 
			"    //分页&模糊查询  数据总数  ps:需要模糊查询请在该SQL添加  如果like不为null,拼接模糊查询语句即可\r\n" + 
			"    Integer totalRowsMultilist(@Param(\"like\")String like);\r\n" + 
			"    \r\n" + 
			"    //==========ProjectUtil拓展功能↑\r\n" + 
			"}");

	//开始创建:如果创建的文件已存在,则删除其文件再创建文件
	try {
		OutputStream outputStream=new FileOutputStream(projectPath+myBatisBaseDaoPath+"/MyBatisBaseDao.java");
		outputStream.write(buffer.toString().getBytes());
		outputStream.flush();
		outputStream.close();
	} catch (FileNotFoundException e) {
		System.err.println("创建失败");
		e.printStackTrace();
	} catch (IOException e) {
		System.err.println("写入失败");
		e.printStackTrace();
	}
	
}

猜你喜欢

转载自blog.csdn.net/weixin_44619313/article/details/106000523