The client sends the same SQL query statement to the database server. If the database is accessed every time, performance will be reduced.
So how to improve?
mybatis provides us with a first-level cache strategy
Between the opening and closing of a sqlSession, the sqlSession object (actually the Executor) will maintain a cached object when querying data. , first search the cache to see if the data exists. If it exists, take it out directly. If it does not exist, send a SQL query to the database, and then store the query data in the cache and return it to the program.
There will be a problem:
If during the first and second queries, a program changes the data of the database to be queried, it will cause the read data to be Wrong, that is,
dirty reading, actually mybatis will clear the cache after sqlSession executes the commit() method. The second time you query, you will still query from the database.
You can also manually call the clearCache() method of sqlSession to clear the cache
Small example:
@Test public void testCacheLever1() throws Exception{ SqlSession session = factory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); //第一次请求,查询id为1的用户 User user = mapper.findUserById(1); System.out.println(user); //更改数据,会清空缓存 user.setUsername("yyyy"); mapper.updateUser(user); session.commit(); //第二次查询会从缓存中找 User user2 = mapper.findUserById(1); System.out.println(user2); session.close(); }
Question:
If sqlSession is closed, the cache will be cleared. How to use caching to improve efficiency?
Okay, the next article will introduce to you mybatis second-level cache.
The above is the Mybatis first-level cache introduced by the editor. I hope it will be helpful to you. If you have any questions, please leave me a message and the editor will reply to you in time. I would also like to thank you all for your support of the PHP Chinese website!
For more in-depth understanding of Mybatis first-level cache related articles, please pay attention to the PHP Chinese website!