前言
在基于 MyBatis 的项目中,
SqlSession
对象是操作数据库的核心对象。它是 MyBatis 与底层数据库之间的桥梁,可以用它来执行 SQL 语句、提交事务、关闭连接等。
SqlSession的创建和关闭
SqlSession
对象的创建是通过SqlSessionFactory
工厂对象来实现的。
SqlSessionFactory
对象是由 MyBatis 的配置文件mybatis-config.xml
和映射文件*.xml
组成的。下面是一个简单的
mybatis-config.xml
示例:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/*.xml"/> </mappers> </configuration>
在
mybatis-config.xml
中,我们需要配置数据源、事务管理器、映射文件等信息。其中数据源可以使用 MyBatis 自带的POOLED
数据源或者第三方数据源。
当我们需要使用
SqlSession
对象时,可以通过SqlSessionFactory
对象的openSession()
方法来获取。示例如下:String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession();
openSession()
方法有多个重载形式,可以传入不同的参数来满足不同的需求。例如,我们可以通过传入ExecutorType
枚举类型来指定执行器的类型,也可以通过传入boolean
类型的参数来指定是否自动提交事务等。
SqlSession
对象使用完毕后,需要及时关闭以释放资源。可以通过调用close()
方法来关闭SqlSession
对象。示例如下:sqlSession.close();
在一些场景下,我们需要在事务执行结束后才提交事务,或者在事务发生异常时进行回滚。这时可以通过调用
commit()
和rollback()
方法来手动提交和回滚事务。
SqlSession的操作方法
selectOne()
selectOne()
方法用于查询单个结果,通常用于查询一条记录或者统计记录数等。示例如下:
User user = sqlSession.selectOne("com.example.mapper.UserMapper.selectUserById", 1);
selectOne()
方法的参数是一个字符串类型的 SQL 语句,它需要传入两个参数:第一个参数是映射文件中定义的 SQL 语句的唯一标识符,第二个参数是执行 SQL 语句所需要的参数。在上面的示例中,我们查询了 ID 为 1 的用户信息。
selectList()
selectList()
方法用于查询多条记录,通常用于查询列表数据等。示例如下:
User user = sqlSession.selectOne("com.example.mapper.UserMapper.selectUserById", 1);
electList()
方法的参数和selectOne()
方法类似,它也需要传入两个参数:映射文件中定义的 SQL 语句的唯一标识符和执行 SQL 语句所需要的参数。在上面的示例中,我们查询了所有用户的信息。
insert()
insert()
方法用于插入数据,通常用于插入一条记录。示例如下:User user = new User(); user.setUsername("Tom"); user.setPassword("123456"); int result = sqlSession.insert("com.example.mapper.UserMapper.insertUser", user);
insert()
方法的第一个参数是映射文件中定义的 SQL 语句的唯一标识符,第二个参数是需要插入的数据对象。在上面的示例中,我们插入了一个用户名为 Tom,密码为 123456 的用户信息。
update()
update()
方法用于更新数据,通常用于更新一条记录。示例如下:User user = new User(); user.setId(1); user.setUsername("Tom"); user.setPassword("654321"); int result = sqlSession.update("com.example.mapper.UserMapper.updateUser", user);
update()
方法的第一个参数是映射文件中定义的 SQL 语句的唯一标识符,第二个参数是需要更新的数据对象。在上面的示例中,我们更新了 ID 为 1 的用户信息。
delete()
delete()
方法用于删除数据,通常用于删除一条记录。示例如下:int result = sqlSession.delete("com.example.mapper.UserMapper.deleteUserById", 1);
delete()
方法的第一个参数是映射文件中定义的 SQL 语句的唯一标识符,第二个参数是执行 SQL 语句所需要的参数。在上面的示例中,我们删除了 ID 为 1 的用户信息。
总结
SqlSession
对象是 MyBatis 与底层数据库之间的桥梁,用于执行 SQL 语句、提交事务、关闭连接等操作。在使用SqlSession
对象时,需要先通过SqlSessionFactory
工厂对象来创建SqlSession
对象,然后在操作完毕后及时关闭SqlSession
对象以释放资源。
SqlSession
对象有多个方法可以用来操作数据库,其中比较常用的方法有selectOne()
、selectList()
、insert()
、update()
、delete()
等。在使用这些方法时,需要注意传入的参数,以及返回结果的类型和数量。在实际项目中,我们通常会将 SQL 语句和 Java 代码分离,使用 XML 配置文件来定义 SQL 语句,这样既方便管理又方便维护。使用
SqlSession
对象时,需要指定 SQL 语句的唯一标识符,并传入执行 SQL 语句所需要的参数。除了 XML 配置文件外,MyBatis 还支持使用注解来定义 SQL 语句,这样可以在 Java 代码中直接编写 SQL 语句,使得代码更加简洁。在使用注解时,需要注意注解的使用方式以及参数的传递方式。
总的来说,
SqlSession
对象是 MyBatis 中最为重要的对象之一,它承担着执行 SQL 语句、提交事务、关闭连接等任务。在使用SqlSession
对象时,需要遵循正确的操作流程,及时关闭SqlSession
对象以释放资源。同时,在编写 SQL 语句时,需要注意传入的参数及返回结果的类型和数量,避免出现错误。