在本线程中添加object数据,必须在本线程中才能获取出来。。其他线程获取不到。
public class Test { public static void main(String[] args) { final ThreadLocal<String> thread=new ThreadLocal<>(); thread.set("助兴"); new Thread(){ @Override public void run() { String temp=thread.get(); System.out.println("结果是:"+temp); }; }.start(); 这样是获取不到结果的!!!!! } }
Filter过滤器和Servlet在一个线程中,并且在servlet前面执行,这就可以在Filter过滤器中添加数据,让Servlet使用。。
service中的sqlsessionFactory 实例化的过程是一个比较耗费性能的过程
1 public class mybtaisutil { 通过这种方式可以保证只有一个factory 2 private static SqlSessionFactory factory; 4 static{ 5 try { 6 InputStream is = Resources.getResourceAsStream("mybatis.xml"); 7 factory = new SqlSessionFactoryBuilder().build(is); 14 } catch (IOException e) { 15 // TODO Auto-generated catch block 16 e.printStackTrace(); 17 } 22 }
/**
* 获取sqlsession对象
*/
public static SqlSession getsession(){
SqlSession session = tl.get();
if(session==null){
tl.set(factory.openSession());
}
return tl.get();
}
关闭sqlsession对象
public static void closesession(){
SqlSession session = tl.get();
if(session!=null){
session.close();
}
tl.set(null);
} 23 }