sqlSessionFactoryBuilder->sqlSessionFactory->sqlSession
myBatis uses a Java enumeration wrapper for transaction isolation levels, called TransactionIsolationLevel, but otherwise they work as expected and have the 5 levels supported by JDBC (NONE, READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE).
sqlSession是mybatis使用最有用的实例
Statement Execution Methods(select insert update delete method)
T selectOne(String statement, Object parameter)
List selectList(String statement, Object parameter)
Map selectMap(String statement, Object parameter, String mapKey)
int insert(String statement, Object parameter)
int update(String statement, Object parameter) int delete(String statement, Object parameter)
没有参数 Object parameter
T selectOne(String statement)
List selectList(String statement)
Map selectMap(String statement, String mapKey)
int insert(String statement) int update(String statement)
int delete(String statement)
操作大的数据集for large dataset
List selectList (String statement, Object parameter, RowBounds rowBounds)
Map selectMap(String statement, Object parameter, String mapKey, RowBounds rowbounds)
void select (String statement, Object parameter, ResultHandler handler)
void select (String statement, Object parameter, RowBounds rowBounds, ResultHandler handler)
Batch update statement Flush Method
List flushStatements()
Transaction control methods
void commit() void commit(boolean force)
void rollback() void rollback(boolean force)
LocalCache--second level cache
新的session创建的时候创建一个本地缓存,并绑定,使用这个seesion的相同参数查询不会去数据库中查,本地缓存将会清空遇到update ,commit,rollback,close
记得关闭sqlSession
try (SqlSession session = sqlSessionFactory.openSession()) { // following 3 lines pseudocode for "doing some work" session.insert(...); session.update(...); session.delete(...); session.commit(); }
使用selectProvider
@SelectProvider(type = UserSqlBuilder.class, method = "buildGetUsersByName")
List getUsersByName(String name);
class UserSqlBuilder { public static String buildGetUsersByName(final String name) { return new SQL(){{ SELECT("*"); FROM("users"); if (name != null) { WHERE("name like #{value} || '%'"); } ORDER_BY("id"); }}.toString(); } }
@SelectProvider(type = UserSqlBuilder.class, method = "buildGetUsersByName")
List getUsersByName( @Param("name") String name, @Param("orderByColumn") String orderByColumn);
class UserSqlBuilder { // If not use @Param, you should be define same arguments with mapper method
public static String buildGetUsersByName( final String name, final String orderByColumn) { return new SQL(){{ SELECT("*"); FROM("users"); WHERE("name like #{name} || '%'"); ORDER_BY(orderByColumn); }}.toString(); } // If use @Param, you can define only arguments to be used public static String buildGetUsersByName(@Param("orderByColumn") final String orderByColumn) { return new SQL(){{ SELECT("*"); FROM("users"); WHERE("name like #{name} || '%'"); ORDER_BY(orderByColumn); }}.toString(); } }