SqlSession 是 MyBatis 的核心接口之一,提供了多个执行 SQL 语句的方法,包括 查询(select)、插入(insert)、更新(update)、删除(delete) 以及 管理事务 的方法。
1. SqlSession 主要 SQL 方法
SqlSession 主要提供了以下几类 SQL 相关的方法:
方法名作用适用场景selectOne(String statement, Object parameter)查询单条记录当查询结果最多只有一条数据时selectList(String statement, Object parameter)查询多条记录获取列表数据selectMap(String statement, Object parameter, String mapKey)查询结果并转换为 Map以某个字段作为 Map 的 Keyinsert(String statement, Object parameter)插入数据执行 INSERT 语句update(String statement, Object parameter)更新数据执行 UPDATE 语句delete(String statement, Object parameter)删除数据执行 DELETE 语句
2. select 查询方法
(1) 查询单条数据:selectOne()
User user = sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", 1);
System.out.println(user);
特点:
只能返回一条数据,如果结果超过一条,会抛出 TooManyResultsException。适用于通过主键查询单个对象的场景。
(2) 查询多条数据:selectList()
List
for (User user : userList) {
System.out.println(user);
}
特点:
返回 List
(3) 查询并转换为 Map:selectMap()
Map
特点:
适用于需要将查询结果转换为 Map 结构的情况,mapKey 作为 Map 的 Key。比如 mapKey="id",那么 Map 的 Key 是 id,Value 是 User 对象。
3. insert 插入数据
User newUser = new User(null, "Alice", "alice@example.com");
int rows = sqlSession.insert("com.example.mapper.UserMapper.insertUser", newUser);
sqlSession.commit();
// 记得提交事务
System.out.println("影响行数:" + rows);
特点:
返回值是受影响的行数。MyBatis 默认不是自动提交事务,需要 sqlSession.commit(); 提交事务。
4. update 更新数据
User user = new User(1, "UpdatedName", "updated@example.com");
int rows = sqlSession.update("com.example.mapper.UserMapper.updateUser", user);
sqlSession.commit();
System.out.println("更新成功:" + rows);
特点:
适用于 UPDATE 语句,返回值是受影响的行数。
5. delete 删除数据
int rows = sqlSession.delete("com.example.mapper.UserMapper.deleteUserById", 1);
sqlSession.commit();
System.out.println("删除成功:" + rows);
特点:
适用于 DELETE 语句,返回值是受影响的行数。
6. 事务管理
手动提交事务
sqlSession.commit(); // 提交事务
回滚事务
sqlSession.rollback(); // 回滚事务
默认情况下,MyBatis 不会自动提交事务,必须手动调用 commit()。如果使用 openSession(true),则会自动提交事务:
SqlSession sqlSession = sqlSessionFactory.openSession(true); // 自动提交
7. 总结
方法作用selectOne()查询单条数据selectList()查询多条数据selectMap()查询数据并转为 Mapinsert()插入数据update()更新数据delete()删除数据commit()提交事务rollback()回滚事务