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

mybatis-plus-generatormybatis-plus是用于简化MyBatis开发的两个工具。mybatis-plus是一个MyBatis的增强工具包,提供了一些便捷的操作,节约了编写简单SQL的时间。而mybatis-plus-generator是一个代码生成器,可以自动生成一些基本的ControllerService、Mapper和Mapper.xml文件。 通过整合mybatis-plus和mybatis-plus-generator,我们可以更高效地开发项目中的单表增删改查功能。使用mybatis-plus-generator可以自动生成一些基本的文件,例如ControllerService、Mapper和Mapper.xml,极大地减少了手动创建这些文件的时间和工作量。而mybatis-plus提供的便捷操作可以节约编写简单SQL的时间。 然而,对于一些逻辑复杂、多表操作或动态SQL等情况,建议使用原生SQL来处理。mybatis-plus支持原生SQL的使用,通过写原生SQL可以更灵活地满足这些复杂需求。 综上所述,通过整合mybatis-plus和mybatis-plus-generator,我们可以在开发中更高效地处理单表的增删改查功能,并且对于复杂的需求可以使用原生SQL来满足。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring cloud整合MyBatis-plus和mybatis-plus-generator](https://blog.csdn.net/cssweb_sh/article/details/123767029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mybatis-plus-generatormybatisplus代码生成器篇)](https://blog.csdn.net/b13001216978/article/details/121690960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值