当前位置: 首页 > news >正文

网站开发如何报价安徽网站制作公司

网站开发如何报价,安徽网站制作公司,开网店卖什么最赚钱,阿里 建设网站目录 0.为什么mybatis的foreach比JDBC的addBatch慢 1.引入依赖 2.Controller层 3.Service层 4.Utils工具类 5.自定义监听器 6.实体类 7Mapper层 不用Mybatis的原因就是因为在大量数据插入的时候jdbc性能比mybatis好1. 首先分批读取Excel中的数据 这一点EasyExcel有自己…目录 0.为什么mybatis的foreach比JDBC的addBatch慢 1.引入依赖 2.Controller层 3.Service层 4.Utils工具类 5.自定义监听器 6.实体类 7Mapper层 不用Mybatis的原因就是因为在大量数据插入的时候jdbc性能比mybatis好1. 首先分批读取Excel中的数据 这一点EasyExcel有自己的解决方案 2.其次就是DB里插入怎么去插入这20w条数据 当然不能一条一条循环应该批量插入20w条数据 3.使用JDBC事务的批量操作将数据插入到数据库 整个Demo连接打开下载即可包含数据库表 整个Demo连接打开下载即可包含数据库表 整个Demo连接打开下载即可包含数据库表​​​​​​整个Demo连接打开下载即可包含数据库表 整个Demo连接打开下载即可包含数据库表 0.为什么mybatis的foreach比JDBC的addBatch慢 ORM 框架开销MyBatis 的 foreach 操作涉及到将对象数据转换为 SQL 语句的过程在这个过程中需要进行对象到 SQL 的映射、动态 SQL 的解析等操作这些额外的操作会增加开销。 数据库连接管理MyBatis 在执行 foreach 操作时会频繁地获取和释放数据库连接而数据库连接的获取和释放是一个相对耗时的操作特别在百万级数据的情况下这种开销可能会积累导致性能下降。 SQL 语句生成MyBatis 的 foreach 操作在执行过程中会生成大量的 SQL 语句这可能会导致数据库的缓存失效、重新编译查询计划等从而影响性能。 批量插入优化JDBC 的 addBatch 可以直接利用底层数据库的批量插入功能而 MyBatis 的 foreach 操作在某些数据库上可能不能充分利用数据库的批量插入优化。 1.引入依赖 dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.7/version /dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.2/version /dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion2.0.42/version /dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.47/version /dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.18/version /dependency dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version /dependency dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.3.2/version /dependency dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId /dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactIdscopeprovided/scope /dependency dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope /dependency 2.Controller层 Slf4j RestController RequestMapping(excel) public class ExcelController {Autowiredprivate UserService userService;//导出GetMapping(/exportExcel)public String exportExcel(HttpServletRequest request, HttpServletResponse response){String fileD:;long startTime System.currentTimeMillis();log.debug(-------------开始插入-------------------);userService.exportInspectionPlan(request,response);return ok;}//导入PostMapping(/importExcel)public void importExcel(MultipartFile multipartFile) throws IOException {if (multipartFile.isEmpty()) {return;}// 这里 需要指定读用哪个class去读然后读取第一个sheet 文件流会自动关闭// 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行EasyExcel.read(multipartFile.getInputStream(), ExportPlanInformationVo.class,new PageReadListenerExportPlanInformationVo(dataList - {for (ExportPlanInformationVo user : dataList) {//将导入的数据用mybatisPlus一个个添加进数据库System.out.println(user);}})).sheet(现场巡视计划报表).doRead();}/*** 1. 首先分批读取Excel中的数据* 这一点EasyExcel有自己的解决方案** 2.其次就是DB里插入怎么去插入这20w条数据* 当然不能一条一条循环应该批量插入20w条数据* 同样不能选择Mybatis的批量插入因为效率低** 3.使用JDBC事务的批量操作将数据插入到数据库* *///批量导入PostMapping(/batchImportExcel)public void batchImportExcel(MultipartFile file) throws IOException {if (BeanUtil.isEmpty(file)){log.debug(传入的文件不能为空);return ;}if (!Objects.requireNonNull(file.getOriginalFilename()).endsWith(xls) !file.getOriginalFilename().endsWith(xlsx)){log.debug(请上传Excel文件);return ;}CommonExportListenerDto commonExportListenerDto new CommonExportListenerDto();EasyExcel.read(file.getInputStream(),commonExportListenerDto).doReadAll();} }3.Service层 Service Slf4j public class UserService { //Resourceprivate IndMapper indMapper;//文件导出public void exportInspectionPlan(HttpServletRequest request, HttpServletResponse response) {//以上需要根据自己的业务去做数据处理 这里就不做展示try {//给文件命名String fileName ExcelTest;// 设置响应头response.setContentType(application/vnd.ms-excel);response.setCharacterEncoding(UTF-8);// 设置防止中文名乱码fileName URLEncoder.encode(fileName, utf-8);// 文件下载方式(附件下载还是在当前浏览器打开)response.setHeader(Content-disposition, attachment;filename fileName .xlsx);//向excel表格写入数据EasyExcel.write(response.getOutputStream(), ExportPlanInformationVo.class).sheet(下方导航).doWrite(getAll()); /*//下载到指定路径String fileUrl D://ExcelTest.xlsx;//向excel表格写入数据EasyExcel.write(fileUrl, ExportPlanInformationVo.class).sheet(下方导航).doWrite(getAll()); */} catch (Exception e) {log.error(出现错误 {}, e);}}public ListExportPlanInformationVo getAll(){//根据业务逻辑获取数据 // ListExportPlanInformationVo all indMapper.getAll();return indMapper.getAll();}} 4.Utils工具类 import java.sql.*; import java.time.LocalDateTime; import java.util.List; import java.util.Map;public class JDBCUtil {private static String url jdbc:mysql://localhost:3306/test?useUnicodetruecharacterEncodingutf8allowMultiQueriestrueuseSSLfalse;private static String username root;private static String password 196713;private static String driverName com.mysql.jdbc.Driver;/*** 获取连接对象** return 连接对象*/public static Connection getConnection() {Connection conn null;try {// 1. 注册驱动Class.forName(driverName);// 2. 获取连接对象conn DriverManager.getConnection(url, username, password);} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return conn;}/*** 释放资源** param connection 连接对象* param statement 预编译执行对象* param resultSet 结果集*/public static void releaseResources(Connection connection, PreparedStatement statement, ResultSet resultSet) {// 释放资源if (connection ! null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}if (statement ! null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (resultSet ! null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}}public static void insertBatch(ListMapObject, Object dataList, String sql) {Connection conn null;PreparedStatement pstm null;try {conn getConnection();//如果需要开启事务此处需要将自动提交关闭// conn.setAutoCommit(false);//预编译sqlpstm (PreparedStatement) conn.prepareStatement(sql);for (MapObject, Object map : dataList) {//此处类型判断不完整后续可以借鉴jdk自行封装拦截器for (int i 1; i map.size(); i) {Object o map.get(i-1);if (BeanUtil.isEmpty(o)) {pstm.setString(i, null);continue;}if (o instanceof String) {pstm.setString(i, o.toString());continue;}if (o instanceof Integer) {pstm.setInt(i, Integer.parseInt(o.toString()));continue;}if (o instanceof LocalDateTime) {pstm.setDate(i, new Date(System.currentTimeMillis()));continue;}if (o instanceof Boolean) {pstm.setBoolean(i, Boolean.parseBoolean(o.toString()));}}//添加到同一个批处理中pstm.addBatch();}//执行批处理pstm.executeBatch();//如果需要开启事务此处需要手动提交事务//conn.commit();} catch (Exception e) {e.printStackTrace();}}}5.自定义监听器 Data Slf4j public class CommonExportListenerDto extends AnalysisEventListenerMapObject, Object {/*** 表头数据存储所有的表头数据*/private ListMapInteger, String headList new ArrayList();/** 数据体*/private ListMapObject, Object dataList new ArrayList();/*** 存储全部表头数据* param headMap* param context*/Overridepublic void invokeHeadMap(MapInteger, String headMap, AnalysisContext context) {headList.add(headMap);}/*** 每一条数据解析都会来调用* param data* param context*/Overridepublic void invoke(MapObject, Object data, AnalysisContext context) {dataList.add(data);if (dataList.size() 3) {saveData();// 存储完成清理 listdataList ListUtils.newArrayListWithExpectedSize(2000);}}/*** 所有数据解析完成之后的操作* param analysisContext*/Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {saveData();}private void saveData() {log.info({}条数据开始存储数据库, dataList.size());//批量导入JDBCUtil.insertBatch(dataList,INSERT INTO ind (a,b,c,d,e) VALUES(?,?,?,?,?););log.info(存储数据库成功);} } 6.实体类 Data Builder NoArgsConstructor AllArgsConstructor HeadRowHeight(value 30) // 头部行高 ContentRowHeight(value 25) // 内容行高 ColumnWidth(value 20) // 列宽 HeadFontStyle(fontName 宋体, fontHeightInPoints 11) public class ExportPlanInformationVo implements Serializable {// 1. 如果不想某个字段在excel中出现 可以加 ExcelIgnore注解ExcelProperty(value a)private String a;// Dict(code inspectionType, fieldName inspectionTypeName)ExcelProperty(value b)private String b;ExcelProperty(value c)private String c;ExcelProperty(value d)private String d;ExcelProperty(value c)private String e;} 7Mapper层 Mapper public interface IndMapper {Select(select * from ind)ListExportPlanInformationVo getAll();}
http://www.hkea.cn/news/14493571/

相关文章:

  • 香河住房与建设局网站山东省建设安全监督站的网站
  • 地方门户类网站有哪些微信小程序开发教程从零开始
  • 广东宏福建设有限公司网站网页升级中紧急自动转跳中
  • 厦门做网站找哪家公司研发管理系统软件
  • 通了网站建设静态网站什么样
  • 西安网站建设工程抖音小程序助手
  • dede做的网站怎样去换模版谁有恶意点击软件
  • 网站建设的实训报告的实训感受动画网站建设
  • 网站服务器租赁费用表格用jsp进行网站开发
  • 学院网站建设项目概述温州专业营销网站
  • 如何构建电子商务网站如何优化培训方式
  • 商务网站建设综合实训wordpress 缩进
  • 小米手机官方网站朝阳网站seo
  • 网站建设与管理专业就业前景蓝色系的网站
  • 深圳市企业网站建设价格宽带专家网站
  • 网站设计工资一般多少东莞seoseo优化排名
  • 网站开发是啥了html旅游网页完整代码
  • 推广网站文案外贸企业网站管理系统
  • r2网站做生存分析莱芜新闻视频回放
  • 自己做网站可以揽业务吗济南专门做网站的公司
  • 昌吉北京网站建设工作室可以做什么行业
  • 河北邢台手机网站建设wordpress网页特效
  • 做网站推广电话网站建设培训视频教程
  • 应不应该购买老域名建设新网站网站设计总结
  • 聊城企业做网站推广公司注册公司代理
  • 域名注册了后怎么建设网站seo搜索引擎优化论文
  • 上海 网站平台开发crm客户管理系统模块
  • 了解网站开发的一般过程建设外国商城网站
  • 平江高端网站建设怎么创建微信公众号免费
  • 百度收录最好的网站城乡建设证书查询官网