发表于: 2017-12-20 21:41:54

1 581


今日完成

25.测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况。

         代码如下,循环添加1000条数据,测试结果是成功插入了100条,不清楚有什么情况。。。。

    还有个问题这样插入数据感觉好慢啊。。。。

public static void main(String[] args) {
for (int i=1;i<=1000;i++){
testAdd(i,"__"+i,i);
   }
}

@Test
public static void testAdd(int id,String name,int num){

SqlSession sqlSession = null;
   try {
sqlSession = MyBatisUtil.getSqlSession(true);
       /**
        * 映射sql的标识字符串,
   * com.jnshu.mapping.userMapperuserMapper.xml文件中mapper标签的namespace属性的值,
   * addUserinsert标签的id属性值,通过insert标签的id属性值就可以找到要执行的SQL
        */
       String statement = "com.jnshu.mapping.userMapper.addUser";
       User user = new User();
       user.setId(id);
       user.setName(name);
       user.setNum(num);
       //执行插入操作
  sqlSession.insert(statement,user);

       //手动提交事务 sqlSession.commit();
       System.out.println("id="+user.getId());
   } catch (Exception e) {
e.printStackTrace();
   } finally {
//使用SqlSession执行完SQL之后需要关闭SqlSession
       sqlSession.close();
   }
}

26.测试一下连接DB中断后TryCatch是否能正常处理。

public static void testGetId(int id)
{
SqlSession sqlSession= null;
   try {
       sqlSession.close();  //在这里提前关闭了!!!
       sqlSession = MyBatisUtil.getSqlSession(true);
       String statement = "com.jnshu.mapping.userMapper.getId";

       //执行查询返回一个唯一user对象的sql
       User user = sqlSession.selectOne(statement, id);
       System.out.println(user);

   } catch (Exception e) {
e.printStackTrace();
   } finally {
sqlSession.close();
   }
}

测试结果:

这个是否意味着try/catch起作用了?


27.检查一下自己的代码是否符合规范,如果DB的表格有改动,应该改哪些内容,需要多久。

 代码的命名和格式基本符合规范。

如果DB有改动的话,应该需要改实体类,因为实体类和表要相关联,其属性和表的字段要一 一对应;如果是xml文件配置数据库的话要修改sql语句,注解方式修改注解,需要的时间应该要看改动大不大吧。

 

28.数据库里插入100万条数据,对比建索引和不建索引的效率查别。再插入3000万条数据,然后是2亿条,别说话,用心去感受数据库的性能。   


无索引时,我先是插入了一万条数据         

public static void main(String[] args) {
long start = System.currentTimeMillis();

   for (int i=1;i<=10000;i++)
{
testAdd(i,"—-"+i,i);
   }

long end = System.currentTimeMillis();
   System.out.println("插入10万条数据所需时间" + (end - start));
}

结果如下,用时223秒。。。。那我插入100W不要半个小时多了。。。

     

我看到有的师兄用的是双循环,如下

public static void main(String[] args) {
long start = System.currentTimeMillis();
   for (int l=0;l<1;l++) {
      for (int i = 1; i <= 10000; i++) {
          testAdd(i, "—-" + i, i);
       }
  }
long end = System.currentTimeMillis();
System.out.println("OK,用时::" + (end - start) + "ms");
}


结果只快了50多秒而已。。。

  


遇到的疑惑

1,我看了别的师兄的第25个步骤,他们循环调用1000中间会出现异常,不知道是不是我没理解这个步骤的实际内容。                

2,关于插入数据慢的问题。


明日计划

看看怎么实现快速插入数据的方法。


收获

感受到了MySQL的性能


返回列表 返回列表
评论

    分享到