工具框架用spring-batch,数据库是mysql(未做特殊优化)。
比较数据框架mybatis和spring jdbc的插入效率。
Mybatis三种实现:
1、mybatis的官方写法
public void batchInsert1(List<Poi> poilist) throws Exception { SqlSession sqlSession = sqlSessionFactory.getObject().openSession(ExecutorType.BATCH); PoiMapper pmapper = sqlSession.getMapper(PoiMapper.class); try { for (Poi poi : poilist) { pmapper.insertPoi(poi); } sqlSession.commit(); } finally { sqlSession.close(); } }
其中Poi是一个bean。
PoiMapper定义:
public interface PoiMapper { @Insert("insert into tb_poi (tag, poi, poiid, meshid, owner, featcode, sortcode, namec, namee, namep, names) values (#{tag}, GeomFromText(#{point}), #{poiid}, #{meshid}, #{owner}, #{featcode}, #{sortcode}, #{namec}, #{namee}, #{namep}, #{names}) ") public void insertPoi(Poi poi); }
2、利用mysql特性,拼写insert sql。
public void batchInsert2(List<Poi> poilist) throws Exception { SqlSession sqlSession = sqlSessionFactory.getObject().openSession(ExecutorType.BATCH); try { sqlSession.insert("com.emg.trans.mapper.batchMapper.batchInsert", poilist); sqlSession.commit(); } finally { sqlSession.close(); } }
“com.emg.trans.mapper.batchMapper.batchInsert”在mybatis的xml中定义的sql,定义如下:
<mapper namespace="com.emg.trans.mapper.batchMapper"> <insert id="batchInsert" parameterType="List"> insert into tb_poi (tag, poi, poiid, meshid, owner, featcode, sortcode, namec, namee, namep, names) values <foreach collection="list" item="poi" index="index" separator="," > (#{poi.tag}, GeomFromText(#{poi.point}), #{poi.poiid}, #{poi.meshid}, #{poi.owner}, #{poi.featcode}, #{poi.sortcode}, #{poi.namec}, #{poi.namee}, #{poi.namep}, #{poi.names}) </foreach> </insert> </mapper>
3、利用spring的事务,直接执行插入操作。
@Transactional("dbTransaction") public void batchInsert3(List<Poi> poilist) throws Exception { for (Poi poi : poilist) { apmapper.insertPoi(poi); } }
apmapper是PoiMapper的实例,用@Autowired配置。
Spring-JDBC的三种实现:
A、用spring事务执行插入操作
@Transactional("dbTransaction") public void batchInsertJDBC1(List<Poi> poilist) throws DataAccessException { String sql = "insert into tb_poi (tag, poi, poiid, meshid, owner, featcode, sortcode, namec, namee, namep, names) values (?, GeomFromText(?), ?, ?, ?, ?, ?, ?, ?, ?, ?)"; for (Poi poi : poilist) { Object[] args = {poi.getTag(), poi.getPoint(), poi.getPoiid(), poi.getMeshid(), poi.getOwner(), poi.getFeatcode(), poi.getSortcode(), poi.getNamec(), poi.getNamee(), poi.getNamep(), poi.getNames()}; jdbcTemplate.update(sql, args); } }
B、用spring事务和springjdbc的batchUpdate
@Transactional("dbTransaction") public void batchInsertJDBC2(List<Poi> poilist) throws DataAccessException { String sql = "insert into tb_poi (tag, poi, poiid, meshid, owner, featcode, sortcode, namec, namee, namep, names) values (?, GeomFromText(?), ?, ?, ?, ?, ?, ?, ?, ?, ?)"; List<Object[]> batchArgs = new ArrayList<Object[]>(); for (Poi poi : poilist) { Object[] args = {poi.getTag(), poi.getPoint(), poi.getPoiid(), poi.getMeshid(), poi.getOwner(), poi.getFeatcode(), poi.getSortcode(), poi.getNamec(), poi.getNamee(), poi.getNamep(), poi.getNames()}; batchArgs.add(args); } jdbcTemplate.batchUpdate(sql, batchArgs); }
C、用spring事务,利用mysql特性,拼写insert sql。
@Transactional("dbTransaction") public void batchInsertJDBC3(List<Poi> poilist) throws DataAccessException { StringBuffer sqlbuf = new StringBuffer() .append("insert into tb_poi (tag, poi, poiid, meshid, owner, featcode, sortcode, namec, namee, namep, names) values "); MessageFormat form = new MessageFormat("(''{0}'', GeomFromText(''{1}''), ''{2}'', ''{3}'', ''{4}'', ''{5}'', ''{6}'', ''{7}'', ''{8}'', ''{9}'', ''{10}''),"); for (Poi poi : poilist) { Object[] args = {poi.getTag(), poi.getPoint(), poi.getPoiid(), poi.getMeshid(), poi.getOwner(), poi.getFeatcode(), poi.getSortcode(), poi.getNamec().replaceAll("'", "\\\\'"), poi.getNamee().replaceAll("'", "\\\\'"), poi.getNamep().replaceAll("'", "\\\\'"), poi.getNames().replaceAll("'", "\\\\'")}; sqlbuf.append(form.format(args)); } String sql = sqlbuf.toString(); sql = sql.substring(0, sql.length()-1); jdbcTemplate.update(sql); }
测试一:每次处理100条,共600条。
测试二:每次处理1000条,共9000条。
直接上结论:
mybatis.1最慢。而且慢很多,很多。
mybatis.2很快。是mybatis中最快的。
mybatis.3比2慢一点。
jdbc.A比B稍快,两者差不多,和mybatis.3也在伯仲之间。
jdbc.C最快,比其他5种都快。
大排行,从用时少到用时多:
jdbc.C < mybatis.2 < jdbc.A < jdbc.B , mybatis.3 << mybatis.1
相关推荐
总之,这个压缩包提供了 MyBatis 3.4.1 和 MyBatis-Spring 1.3.0 的完整环境,结合 MySQL 5.7 数据库,是学习和实践 MyBatis-Spring 整合的一个理想起点。通过深入阅读文档、配置示例和运行示例,开发者能够快速掌握...
<artifactId>mysql-connector-java <version>8.0.23 <!-- MyBatis Plus Starter --> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter <version>3.5.1 ``` #### 四、新建表 ...
《MyBatis-Spring 1.2.5:整合...总之,MyBatis-Spring 1.2.5是Java开发中的一个重要组件,它有效地连接了MyBatis和Spring,使得开发者可以更方便地利用两个框架的功能,提高开发效率,同时保持代码的清晰和可维护性。
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root ``` (3) 配置MyBatis:创建mybatis-config.xml文件,定义SqlSessionFactory,并在配置...
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在...
mybatis与spring整合时所依赖的jar包,包括: 1.Mybatis所需的jar包括: ant-1.9.6.jar ant-launcher-1.9.6.jar ... mysql-connector-java-5.1.45-bin.jar commons-dbcp2-2.2.0.jar commons-pool2-2.5.0.jar
标题 "一个基础mybatis-spring程序所需的jar包" 指出的是构建一个基于MyBatis和Spring框架的简单应用程序所需要的核心库。描述提到的是针对Spring接口编程的基础配置,能够支持基本功能的实现。标签 "mybatis spring...
- **添加依赖**:在`pom.xml`或`build.gradle`中引入`spring-boot-starter-data-jpa`和`mybatis-spring-boot-starter`依赖。例如,在`pom.xml`中: ```xml <groupId>org.springframework.boot <artifactId>...
在Java Web开发中,Spring框架和MyBatis-Plus的集成是常见的数据访问技术组合。Spring作为一款强大的轻量级框架,提供了依赖注入、AOP(面向切面编程)等功能,而MyBatis-Plus则是在MyBatis的基础上进行扩展,简化了...
开发者可以通过简单的配置就能享受到Spring Boot的便利性和MyBatis的灵活性。同时,Linux环境下的部署也相对直观,适合服务器部署。在实际项目中,结合这两个框架,我们可以构建出高效、稳定的Web应用。
【标题】"springboot-mybatis-demo"是一个演示项目,展示了如何在Spring Boot框架下整合MyBatis和MySQL数据库。这个项目是基于现有的示例代码进行调整和改造的,旨在为学习者提供一个基础的实践环境。 【描述】该...
因此,为了弥补这一空白,MyBatis社区决定自己动手,创建了一个名为MyBatis-Spring的小型库,旨在为Spring和MyBatis之间搭建桥梁。 **关键特点:** - **简化配置**:减少用户配置MyBatis和Spring环境所需的样板...
《Spring Boot集成MyBatis详解:基于spring-boot-starter-mybatis-2.1.2》 在现代Java开发中,Spring Boot以其简化配置、快速启动的特性,深受开发者喜爱。而MyBatis作为轻量级的持久层框架,以其灵活的SQL映射,...
<artifactId>mysql-connector-java <!-- Oracle JDBC Driver --> <groupId>com.oracle.ojdbc</groupId> <artifactId>ojdbc8 <version>19.x.x ``` 接下来,配置两个数据源。在SpringBoot的配置文件`...
《Spring Boot集成MyBatis详解:基于spring-boot-starter-mybatis-2.1.3》 在Java开发领域,Spring Boot...在实际开发中,还可以利用Spring Boot的自动化配置和MyBatis的动态SQL功能,进一步提升开发效率和代码质量。
【Mybatis-Spring 整合】\n\nMybatis-Spring 是一个将 Mybatis ORM 框架与 Spring 框架整合的库,它使得在 Spring 应用中使用 Mybatis 更加方便,实现了事务管理和 DAO 对象的自动创建。\n\n1. **添加依赖**\n为了在...
总结起来,`spring-boot-starter-mybatis-spring-boot-1.3.1`提供了方便的集成方案,使得Spring Boot项目能无缝对接MyBatis,极大地提高了开发效率。在实际项目中,根据具体需求对配置进行微调,就可以轻松实现数据...
本文将详细介绍如何在Spring Boot项目中集成MyBatis,以及如何下载和使用相关的版本。 首先,我们要明确的是,`spring-boot-starter-mybatis`是Spring Boot官方提供的一个起步依赖(Starter),它简化了在Spring ...
例如,Spring的`spring-context`、`spring-beans`、`spring-jdbc`和`spring-tx`,以及MyBatis的`mybatis`和`mybatis-spring`等。这些库分别提供了Spring的上下文、bean管理、数据库事务控制以及与MyBatis的集成接口...
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root mybatis.mapper-locations=classpath:mapper/*.xml ``` 3. **自动配置** Spring...