public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); String mapperLocations = env.getProperty("mybatis.mapperLocations"); String configLocation = env.getProperty("mybatis.configLocation"); typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); VFS.addImplClass(SpringBootVFS.class); final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage(typeAliasesPackage); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations)); sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); return sessionFactory.getObject(); }
时间: 2023-12-06 17:40:21 浏览: 140
这是一个 Java Spring Boot 中配置 MyBatis 的方法,其中:
- 通过 `env.getProperty` 方法获取配置文件中的属性值,包括 MyBatis 的别名包路径、Mapper 文件路径和 MyBatis 配置文件路径。
- 通过 `setTypeAliasesPackage` 方法设置别名包路径。
- 通过 `SqlSessionFactoryBean` 设置数据源、别名包路径、Mapper 文件路径和 MyBatis 配置文件路径。
- 最后通过 `sessionFactory.getObject()` 获取 SqlSessionFactory 实例。
这个方法中的 `SpringBootVFS` 是 MyBatis 提供的 VFS 实现类,用于扫描类路径下的 Mapper 文件。
相关问题
ApplicationContext applicationContext = SpringContextUtils.getApplicationContext(); SqlSessionFactory sqlSessionFactory = applicationContext.getBean("sqlSessionFactory",SqlSessionFactory.class); SqlSession sqlSession = sqlSessionFactory.openSession(); Connection connection = sqlSession.getConnection(); String url = connection.getMetaData().getURL(); //拿到库名 String databaseName = extractDatabaseName(url); //解析sql拿到表名 String mybatisSql = SqlUtils.getMybatisSql(joinPoint,sqlSessionFactory); String tableName = mybatisSql.substring(7, mybatisSql.indexOf(" SET"));优化代码
可以将上述代码优化为:
```
@Autowired
private SqlSessionFactory sqlSessionFactory;
public String getTableName(JoinPoint joinPoint) throws SQLException {
SqlSession sqlSession = sqlSessionFactory.openSession();
Connection connection = sqlSession.getConnection();
String url = connection.getMetaData().getURL();
String databaseName = extractDatabaseName(url);
String mybatisSql = SqlUtils.getMybatisSql(joinPoint, sqlSessionFactory);
String tableName = mybatisSql.substring(7, mybatisSql.indexOf(" SET"));
return tableName;
}
```
这里使用了 `@Autowired` 注解来注入 `SqlSessionFactory` 对象,避免了手动获取 `ApplicationContext` 和从中获取 `SqlSessionFactory` 的过程,同时也不需要手动关闭 `SqlSession` 对象。
public class GetSqlSession { /** * 获取SqlSession对象 */ public static SqlSession createSqlSession() { SqlSessionFactory sqlSessionFactory = null; InputStream input = null; SqlSession session = null; try{ //获得mybatis的环境配置文件 String resource = "mybatis-config.xml"; //以流的方式获取resource(mybatis的环境配置文件)s input = Resources.class.getResourceAsStream(resource); //创建会话工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(input); //通过工厂得到SqlSession session = sqlSessionFactory.openSession(); return session; } catch (IOException e){ e.printStackTrace(); return null; } } public static void main(String[] args) { System.out.println(createSqlSession()); } }怎么修改IOException报错异常
IOException 是一个受检查的异常,需要进行处理或者抛出。你可以将异常处理方式改为抛出异常,让上层的方法来处理。修改代码如下:
```
public static SqlSession createSqlSession() throws IOException {
SqlSessionFactory sqlSessionFactory = null;
InputStream input = null;
SqlSession session = null;
// 获得 mybatis 的环境配置文件
String resource = "mybatis-config.xml";
// 以流的方式获取 resource(mybatis 的环境配置文件)
input = Resources.class.getResourceAsStream(resource);
// 创建会话工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
// 通过工厂得到 SqlSession
session = sqlSessionFactory.openSession();
return session;
}
```
这里直接将 IOException 抛出了,让调用者来处理。
阅读全文