1. 程式人生 > >Mybatis generator生成Service,Controller,添加批量新增數據接口(基於mybatis-generator-1.3.5源碼修改)

Mybatis generator生成Service,Controller,添加批量新增數據接口(基於mybatis-generator-1.3.5源碼修改)

src value new lse 項目上線 uuid err opera auth

  好久記錄筆記,這段時間做政府的項目,數據錄入系統基本都是通過excel導入,且數據量大,許多也是單表的錄入,這就有很多可以通用的代碼,如controller,service層的那一套都是可以代碼生成,添加了一個數據庫批量添加接口(目前只支持oracle),代碼是基於mybatis-generator-1.3.5源碼修改後的,具體的源碼解析,後面等項目上線後,再好好整理一下,這裏就粗魯的記錄如何使用。

1:mybatis-generator.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--<plugin type="net.coderbee.mybatis.batch.BatchStatementHandler"></plugin>
        <plugin type="net.coderbee.mybatis.batch.BatchParameterHandler"></plugin>-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--數據庫鏈接地址賬號密碼-->
        <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
                        connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:test"
                        userId="xxxx" password="xxxx" >
            <!--開啟讀取數據庫註釋:為了把註釋寫到相對應的註解裏面-->
            <property name="remarksReporting" value="true"></property>
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!--生成Model類存放位置-->
        <javaModelGenerator targetPackage="com.shsoft.platform.domain" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <!--設置註解,%s占位符,讀取數據庫字段註釋(多個註解用;分隔),一個占位符讀取數據庫字段註釋,第二數據庫字段排序-->
            <property name="annotation" value="@Excel(name = &quot;%s&quot;, fixedIndex = %s);@ApiParam(value = &quot;%s&quot;)"/>
            <!--設置註解需要的包路徑,多個用,分隔-->
            <property name="annotationTargetPackage" value="cn.afterturn.easypoi.excel.annotation.Excel,io.swagger.annotations.ApiParam"/>
        </javaModelGenerator>
        <!--生成映射文件存放位置-->
        <sqlMapGenerator targetPackage="com.shsoft.platform.dao.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!--生成Dao類存放位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.shsoft.platform.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!--生成service,serviceImpl-->
        <javaServiceGenerator targetPackage="com.shsoft.platform.service" targetProject="src/main/java"
                              implementationPackage="com.shsoft.platform.service">
        </javaServiceGenerator>
        
        <!--生成controller-->
        <javaControllerGenerator targetPackage="com.shsoft.platform.ctrl" targetProject="src/main/java">
            <property name="superClass" value="com.shsoft.platform.ctrl.BaseController"></property>
        </javaControllerGenerator>

        <!--生成對應表及類名,添加:enableInsertBatch(是否生成批量添加語句,目前只支持oracle),enableInsertBatchIgnore:批量添加語句中忽略的字段-->
        <table tableName="SYSTEM_NOTICE" domainObjectName="SystemNotice" enableCountByExample="true" enableUpdateByExample="true"
               enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="false" enableInsertBatch="true"
               enableListParam="true">
            <property name="enableInsertBatchIgnore" value="createDt"></property>
        </table>
    </context>
</generatorConfiguration>

2:執行生成代碼

2-1:最後生成 InsertBatch

<insert id="insertBatch" parameterType="java.util.List">
    insert into FIXED_ASSETS_INDICATOR (ID, ORDER_MARK, COUNT_TIME, 
      CITY, CITY_CODE, FIXED_INVESTMENT_TOTAL, 
      FIXED_INVESTMENT_SPEED_UP, FOLK_INVESTMENT_TOTAL, 
      FOLK_INVESTMENT_SPEED_UP, REALTY_INVESTMENT_TOTAL, 
      REALTY_INVESTMENT_SPEED_UP, EMPLOYMENT_INVESTMENT_TOTAL, 
      EMPLOYMENT_INVESTMENT_SPEED_UP, TECHNOLOGY_INVESTMENT_TOTAL, 
      TECHNOLOGY_INVESTMENT_SPEED_UP, INFRASTRUCTURE_TOTAL, 
      INFRASTRUCTURE_SPEED_UP, HIGH_TECH_TOTAL, 
      HIGH_TECH_SPEED_UP, MANUFACTURING_TOTAL, 
      MANUFACTURING_SPEED_UP)
    <foreach close=")" collection="list" item="item" open="(" separator="UNION">
      SELECT #{item.id,jdbcType=VARCHAR}, #{item.orderMark,jdbcType=DECIMAL}, #{item.countTime,jdbcType=TIMESTAMP}, 
        #{item.city,jdbcType=VARCHAR}, #{item.cityCode,jdbcType=VARCHAR}, #{item.fixedInvestmentTotal,jdbcType=DECIMAL}, 
        #{item.fixedInvestmentSpeedUp,jdbcType=FLOAT}, #{item.folkInvestmentTotal,jdbcType=DECIMAL}, 
        #{item.folkInvestmentSpeedUp,jdbcType=FLOAT}, #{item.realtyInvestmentTotal,jdbcType=DECIMAL}, 
        #{item.realtyInvestmentSpeedUp,jdbcType=FLOAT}, #{item.employmentInvestmentTotal,jdbcType=DECIMAL}, 
        #{item.employmentInvestmentSpeedUp,jdbcType=FLOAT}, #{item.technologyInvestmentTotal,jdbcType=DECIMAL}, 
        #{item.technologyInvestmentSpeedUp,jdbcType=FLOAT}, #{item.infrastructureTotal,jdbcType=DECIMAL}, 
        #{item.infrastructureSpeedUp,jdbcType=FLOAT}, #{item.highTechTotal,jdbcType=DECIMAL}, 
        #{item.highTechSpeedUp,jdbcType=FLOAT}, #{item.manufacturingTotal,jdbcType=DECIMAL}, 
        #{item.manufacturingSpeedUp,jdbcType=FLOAT} FROM DUAL
    </foreach>
  </insert>

2-2:生成service

public class FixedAssetsIndicatorServiceImpl implements FixedAssetsIndicatorService {
    @Autowired
    private FixedAssetsIndicatorMapper fixedAssetsIndicatorMapper;

    public int insertBatch(List<FixedAssetsIndicator> list) {
        if(list != null && list.size() > 0 ){
            FixedAssetsIndicatorExample fixedAssetsIndicatorExample = new FixedAssetsIndicatorExample();
            fixedAssetsIndicatorExample.createCriteria().andCountTimeEqualTo(list.get(0).getCountTime());
            fixedAssetsIndicatorMapper.deleteByExample(fixedAssetsIndicatorExample);
            return fixedAssetsIndicatorMapper.insertBatch(list);
        }
        return 0;
    }
    public PageInfo<FixedAssetsIndicator> list(ListFixedAssetsIndicatorParam param) {
        FixedAssetsIndicatorExample example = new FixedAssetsIndicatorExample();
        if(param.getCountTime() != null){
            example.createCriteria().andCountTimeEqualTo(param.getCountTime());
        }
        PageHelper.startPage(param.getPageNum(), param.getPageSize());
        example.setOrderByClause("ORDER_MARK");
        List<FixedAssetsIndicator> fromDB = fixedAssetsIndicatorMapper.selectByExample(example);
        PageInfo pageInfo = new PageInfo(fromDB);
        return pageInfo;
    }

    public FixedAssetsIndicator get(String id) {
        return fixedAssetsIndicatorMapper.selectByPrimaryKey(id);
    }

    public void save(FixedAssetsIndicator toDB) {
        fixedAssetsIndicatorMapper.insertSelective(toDB);
    }

    public void delete(String id) {
        fixedAssetsIndicatorMapper.deleteByPrimaryKey(id);
    }

    public void update(FixedAssetsIndicator toDB) {
        fixedAssetsIndicatorMapper.updateByPrimaryKeySelective(toDB);
    }
}

2-3:生成controller:添加excel導入導出接口(基於easypoi導入導出)

@Slf4j
@Controller
@RequestMapping("/fixedAssetsIndicator")
@Api(description = "能源投資統計科:分市固定資產投資主要指標")
public class FixedAssetsIndicatorController extends BaseController {

    @Autowired
    private FixedAssetsIndicatorService fixedAssetsIndicatorService;

    @ApiOperation(value = "列表查詢", httpMethod = "POST")
    @RequestMapping("/list.do")
    @ResponseBody
    public JSONResult list(@Validated ListFixedAssetsIndicatorParam param) throws ShsoftException {
        JSONResult result = new JSONResult(fixedAssetsIndicatorService.list(param));
        return result;
    }

    @ApiOperation(value = "單條查詢", httpMethod = "POST")
    @RequestMapping("/get.do")
    @ResponseBody
    public JSONResult get(String id) throws ShsoftException {
        JSONResult result = new JSONResult(fixedAssetsIndicatorService.get(id));
        return result;
    }

    @ApiOperation(value = "刪除", httpMethod = "POST")
    @RequestMapping("/delete.do")
    @ResponseBody
    public JSONResult delete(String id) throws ShsoftException {
        fixedAssetsIndicatorService.delete(id);
        return new JSONResult();
    }

    @ApiOperation(value = "新增", httpMethod = "POST")
    @RequestMapping("/save.do")
    @ResponseBody
    public JSONResult save(@Validated FixedAssetsIndicator toDB) throws ShsoftException {
        toDB.setId(new UUIDFactory().generate().toString());
        fixedAssetsIndicatorService.save(toDB);
        return new JSONResult();
    }

    @ApiOperation(value = "修改", httpMethod = "POST")
    @RequestMapping("/update.do")
    @ResponseBody
    public JSONResult update(@Validated FixedAssetsIndicator toDB) throws ShsoftException {
        fixedAssetsIndicatorService.update(toDB);
        return new JSONResult();
    }


    @ApiOperation(value = "導出", httpMethod = "POST")
    @RequestMapping("/export.do")
    @ResponseBody
    public JSONResult exportExcel(@Validated ListFixedAssetsIndicatorParam param, HttpServletRequest request, HttpServletResponse response) throws ShsoftException {
        JSONResult result = new JSONResult();
        PageInfo<FixedAssetsIndicator> pageInfo = fixedAssetsIndicatorService.list(param);
        List<FixedAssetsIndicator> list = pageInfo.getList();
        List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
        if(list != null && list.size() > 0){
            for (int i = 0; i < list.size(); i++) {
                Map<String, Object> lm = new HashMap<String, Object>();
                if(list.get(i).getCity() != null ){
                    lm.put("city", list.get(i).getCity());
                }
                if(list.get(i).getCityCode() != null ){
                    lm.put("cityCode", list.get(i).getCityCode());
                }
                if(list.get(i).getFixedInvestmentTotal() != null ){
                    lm.put("fixedInvestmentTotal", list.get(i).getFixedInvestmentTotal());
                }
                if(list.get(i).getFixedInvestmentSpeedUp() != null ){
                    lm.put("fixedInvestmentSpeedUp", list.get(i).getFixedInvestmentSpeedUp());
                }

                if(list.get(i).getFolkInvestmentTotal() != null ){
                    lm.put("folkInvestmentTotal", list.get(i).getFolkInvestmentTotal());
                }
                if(list.get(i).getFolkInvestmentSpeedUp() != null ){
                    lm.put("folkInvestmentSpeedUp", list.get(i).getFolkInvestmentSpeedUp());
                }
                listMap.add(lm);
            }
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(param.getCountTime());
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("maplist", listMap);
        map.put("year", calendar.get(Calendar.YEAR));
        map.put("month", calendar.get(Calendar.MONTH + 1));
        TemplateExportParams params = new TemplateExportParams("excel_temple/固定資產投資/分市固定資產投資主要指標.xls");
        Workbook workbook = ExcelExportUtil.exportExcel(params, map);
        OutputStream os = null;
        try {
            response.setHeader("content-Type", "application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-disposition","attachment;filename=分市固定資產投資主要指標.xls");
            os = response.getOutputStream();
            workbook.write(os);
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }


    @ApiOperation(value = "導入", httpMethod = "POST")
    @RequestMapping("/import.do")
    @ResponseBody
    public JSONResult importExcel(HttpServletRequest request) throws ShsoftException {
        MultipartHttpServletRequest multipartHttpServletRequest = ((MultipartHttpServletRequest) request);
        MultipartFile file = multipartHttpServletRequest.getFile("file");
        JSONResult result = new JSONResult();
        ImportParams params = new ImportParams();
        params.setTitleRows(3);
        params.setHeadRows(1);
        params.setStartRows(1);
        try {
            if(file.getSize() > 0){
                List<FixedAssetsIndicator> dataList = new ShExcelImportUtils().importExcelByIs(file.getInputStream(), FixedAssetsIndicator.class,
                        params, false).getList();
                fixedAssetsIndicatorService.insertBatch(dataList);
            }else{
                result = new JSONResult(new ErrorMessage(Error.DAMPE_FIELD_UNAUTH.getCode(),Error.DAMPE_FIELD_UNAUTH.getMessage()));
            }
        } catch (Exception e) {
            throw new ShsoftException(e.getMessage(),e);
        }
        return result;
    }




}

若文章在表述和代碼方面如有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論!希望能互相學習。需要源碼和jar包的留下郵箱

Mybatis generator生成Service,Controller,添加批量新增數據接口(基於mybatis-generator-1.3.5源碼修改)