gpt4 book ai didi

java - MySql + MyBatis 多线程应用

转载 作者:行者123 更新时间:2023-11-29 01:38:07 27 4
gpt4 key购买 nike

早上好。我有一个多线程应用程序,它以读写方式访问数据库 mySql。使用 MyBatis。对于 session 管理,它编写了以下类:

public class ConnectionMySQL {

private static final Logger log = Logger.getLogger(ConnectionMySQL.class);

private static SqlSessionFactory sqlSessionFactory;

private ConnectionMySQL() {
}

static {
try {
String resource = "com/application/dao/config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Throwable e) {
log.error("Impossibile avviare la connessione sul DB", e);
}
}

public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}

}

每当我运行查询时,我都会运行这些操作:

public void start() {
System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime())+" ***** Start ****");
long start = System.currentTimeMillis();
SqlSession sessione = ConnectionMySQL.getSession().openSession();
try {
..........
..........
}catch (MessagingException e) {
log.warn("Impossibile inviare messaggio di notifica");
}finally {
sessione.close();
long end = System.currentTimeMillis();
log.info("Numero thread :"+numeroThread+" - Tempo di esecuzione "+ (end - start) +" ms");

}

}

我对 MySQL 和 myBatis 不是很有经验。我想知道这是否是使用 myBatis 处理多线程的正确方法。谢谢。

最佳答案

SqlSessionFactory 是线程安全的。只是传递它。您可以放心使用它。

SqlSession 不是线程安全的,应该只在方法范围中使用。

我会推荐 DAO pattern构造您的数据库代码:

public MyPojo select(int primaryKey) {
try (SqlSession session = sqlSessionFactory.openSession()) {
MyPojoMapper mapper = session.getMapper(MyPojoMapper.class);
return mapper.select(primaryKey);
}
}

关于java - MySql + MyBatis 多线程应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com