开发工具与关键技术: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();
}
}