zoukankan      html  css  js  c++  java
  • Mybatis-generator生成Service和Controller

      好久记录笔记,这段时间做政府的项目,数据录入系统基本都是通过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包的留下邮箱

    转载于:https://www.cnblogs.com/lishun1005/p/10057129.html

  • 相关阅读:
    npm更换成淘宝镜像源以及cnpm
    Windows下使用CMD命令进入MySQL数据库
    python 中 __name__ == '__main__'该如何理解与其作用介绍
    SQL Server数据库一直显示“正在还原”的解决方法
    如何更改SqlServer数据库登录验证模式
    cookie与session区别
    基于layui的select change事件ajax响应(主要用于省市区级联响应,其他的只要修改一下也可适应)
    字母、汉字、特殊符号组成的字符串排序问题
    The source attachment does not contain the source for the file HashMap.class
    Mysql常见SQL查询应用场景
  • 原文地址:https://www.cnblogs.com/twodog/p/12135512.html
Copyright © 2011-2022 走看看