一个查询的方法测试(Junit)通过
放到线程里就不行了 查不到结果 也不报错
本来期待多线程模拟多有用户同时访问
Thread :
public void run() {
Integer s = 0;
try {
s = Lee.selectAllAccountCount();
System.out.println(s+"..............."); // 没值 也不报错
} catch (SQLException e) {
e.printStackTrace();
}
}Junit
@Test
public void threadDb(){
Integer s = 0;
try {
s = Lee.selectAllAccountCount();
System.out.println(s+"..............."); // ----- s 有值,没问题
} catch (SQLException e) {
e.printStackTrace();
}
Tas t;
for (int i = 0; i < 3; i++) {
t= new Tas();
t.start();
}
if(1==1){
t= new Tas();
t.start();
}
}sqlMap.xml:
<select id="selectAllLeeCount" resultClass="int">
select count(*) from Lee
</select>
Dao:
public static Integer selectAllLeeCount () throws SQLException {
System.out.println("+++++++++++++");
return (Integer)sqlMapper.queryForObject("selectAllLeeCount");
}
放到线程里就不行了 查不到结果 也不报错
本来期待多线程模拟多有用户同时访问
Thread :
public void run() {
Integer s = 0;
try {
s = Lee.selectAllAccountCount();
System.out.println(s+"..............."); // 没值 也不报错
} catch (SQLException e) {
e.printStackTrace();
}
}Junit
@Test
public void threadDb(){
Integer s = 0;
try {
s = Lee.selectAllAccountCount();
System.out.println(s+"..............."); // ----- s 有值,没问题
} catch (SQLException e) {
e.printStackTrace();
}
Tas t;
for (int i = 0; i < 3; i++) {
t= new Tas();
t.start();
}
if(1==1){
t= new Tas();
t.start();
}
}sqlMap.xml:
<select id="selectAllLeeCount" resultClass="int">
select count(*) from Lee
</select>
Dao:
public static Integer selectAllLeeCount () throws SQLException {
System.out.println("+++++++++++++");
return (Integer)sqlMapper.queryForObject("selectAllLeeCount");
}
会不会这个的返回结果就是0呢?可以debug单步跟踪以下
就算是0他也要输出的呀
可是他什么都没有
这跟ibatis多线程没什么问题, 一般不建议直接使用 JUnit 来测试,它对多线程支持并不好。
去 Google Search Keyword: "JUnit 多线程测试",会有你需要的答案。
还有如果实现正确不存在多线程的问题
本来Ibatis就能够在多线程下操作