mybatis/mysql-高级insert
来源:互联网 发布:mac 查找文件夹路径 编辑:程序博客网 时间:2024/05/17 08:44
好东西都是要拿出来分享的,最近在做的项目,有这样的需求 1.处理大量数据的插入(Replace into) 分析:A: 数据量大 ——》尽量减少连接mysql的次数(非常耗时),一次性插入。 B:数据可能有重复 ——》如果你采用先查出数据库所有的数据,再重写hashcode和equal用set集合进行重复过滤,难免也有点太过复杂与耗时。
//由于工作保密性质,所有的字段分析,我采用自定义的简单类型,说明问题即可。 //采用Replace into //会根据主键与索引判断是否重复,若有重复是删除旧数据,插入新数据 //--------mybatis------------- <insert id="insertBatchByReplace" parameterType="java.util.List" > Replace into book ( name, price , pic, description )VALUES <foreach collection="list" item="book" separator="," > (#{book.name}, #{book.price}, #{book.pic}, #{book.description} ) </foreach> </insert> //---------------mapper---------- @Mapper public interface BookMapper { List<Book> findAll(); int insertBatchByReplace(List<Book> list); } //---------------test--------------- @RunWith(SpringRunner.class)@SpringBootTestpublic class BookMapperTest { @Autowired private BookMapper bookMapper; @Test public void testInsertBatchByReplace() { //mybatis多数据源博客有详细解释(报错:Table 'mybatis.book' doesn't exist) DynamicDataSource.setDatabaseType(DataSourceType.lucene); //此行代码与下面无关 ArrayList<Book> list = Lists.newArrayList(); int count = 1 ; while (count <= 10) { Book book = new Book(); book.setName("testName " + count ); //设置name为索引,会以name为判断 book.setPrice(0.0 + count ); book.setPic("testPic " + count ); book.setDescription("testDescription " + count ); count ++; list.add(book); if (count % 2 == 0) { list.add(book); //重复数据 } } int i=bookMapper.insertBatchByReplace(list); Assert.assertTrue( i > 0 ); }}
2.插入定时处理后发生溢流路段的speed结果(ON DUPLICATE KEY UPDATE ) 分析:发生溢流的路段数据量可能小,但是可能是insert可能是update, 你需要的只是该对象中的speed 字段与updateTime字段的变化 ——》如果采用根据主键 和索引 采用update语句,难免也要使用for循环//ON DUPLICATE KEY UPDATE 如果有主键或者索引重复 则会修改相应的字段// ---------------------mybatis---------------------- <insert id="insertWithUpdate" parameterType="com.mybatis.datasources.dataobject.Book"> insert into book ( name, price , pic, description ) VALUES ( #{name}, #{price}, #{pic}, #{description} ) ON DUPLICATE KEY UPDATE pic= #{pic}, description = #{description} </insert>//------------------mapper------------------------- int insertWithUpdate(Book book); @Test public void testInsertWithUpdate() { //mybatis多数据源博客有详细解释(报错:Table 'mybatis.book' doesn't exist) DynamicDataSource.setDatabaseType(DataSourceType.lucene); //此行代码与下面无关 ArrayList<Book> list = Lists.newArrayList(); int count = 1 ; while (count <= 10) { Book book = new Book(); book.setName("testName " + count ); //设置name为索引,这点真的很重要!!!!!!! book.setPrice(0.0 + count ); book.setPic("testPic " + count + count); book.setDescription("testDescription " + count + count ); count ++; int i=bookMapper.insertWithUpdate(book); Assert.assertTrue( i > 0 ); } }
0 0
- mybatis/mysql-高级insert
- mysql replace, insert 高级用法
- MyBatis+MySql Insert操作失败解决办法
- mybatis 在mysql上数据不能insert
- MyBatis+MySql Insert操作失败解决办法
- MyBatis+MySql Insert操作失败解决办法
- mybatis mysql 批量insert 返回主键
- mybatis mysql 批量insert 返回主键
- Mybatis+mysql之insert返回主键id
- mysql数据库的批量update,insert 在mybatis中
- mybatis+mysql insert添加数据后返回数据主键id
- MyBatis insert 返回主键的方法(oracle和mysql)
- MyBatis insert 返回主键的方法(oracle和mysql)
- MyBatis+MySQL 进行insert之后可获取主键ID
- mybatis批量insert生成mysql自增id
- MyBatis高级
- MYSQL INSERT
- MySQL:INSERT
- 用C++实现复数类
- JUnit测试
- C# 字符串(String)
- mongodb创建集群遇到的问题
- C++ 多线程ole读取Excel
- mybatis/mysql-高级insert
- C# 结构(Struct)
- 解除页面禁止复制限制
- 【fcCRFs】Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials
- genymotion提示virtualization engine not found plugin loading aborted,创建COM对象失败
- FFmpeg x86汇编优化一--x86inc.asm分析
- JSON.parse()和JSON.stringify()
- Vue 那些乱七八糟的错误
- 通过串口发送mavlink指令