网站备案核实单制作网页的代码实例
网站备案核实单,制作网页的代码实例,百度pc权重,如何寻找一批做网站的公司目录
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.mzph.cn/diannao/91655.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!