Cue*_*ero 5 java mysql jdbc mybatis
对于最简单的查询。
我的JDBC代码是这样的:
String sql = "SELECT videos.id, videos.connector_id, videos.season_number FROM videos WHERE videos.connector_type = 'show';";
System.out.println("Create statement...");
Scanner scanner = new Scanner(System.in);
while (true) {
int input = scanner.nextInt();
long start = System.nanoTime();
stmt = conn.prepareStatement(sql);
ResultSet resultSet = stmt.executeQuery();
System.out.println("Time 1: " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start));
}
Run Code Online (Sandbox Code Playgroud)
而 MyBatis 代码是这样的:
<select id="queryTest" resultType="map">
SELECT videos.id, videos.connector_id, videos.season_number FROM videos WHERE connector_type = 'show';
</select>
try (SqlSession session = DatabaseConnFactory.getSqlSession()) {
start = System.nanoTime();
maps = session.selectList("queryTest", parameterWrapper);
System.out.println("Time 1: " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start));
}
Run Code Online (Sandbox Code Playgroud)
不考虑第一次查询,对于后面的查询,JDBC总是在6ms~10ms左右,MyBatis在31~35ms左右,大约是3倍。
对于更复杂的查询(6个内连接和一个order by),JDBC只需要25~30ms,而MyBatis需要80~100ms。
我试图避免使用映射器,而是使用 session.selectList、session.select 和 session.selectCursor,但没有一个比 MaBatis.Mapper 有明显更好的性能。
如何提高 MyBatis 的性能?
定义查询的获取大小,如下面的代码所示:
<select id="queryTest" fetchSize="1000" resultType="map">
Run Code Online (Sandbox Code Playgroud)
如果您有 1000 条记录,默认fetch size in jdbc for oracle is 10和 in会使速度变得非常慢。sql developer it is 50因此,在这种情况下,您需要根据您的要求定义合适的获取大小。
| 归档时间: |
|
| 查看次数: |
4133 次 |
| 最近记录: |