Mybatis是一个强大的持久层框架,支持自定义SQL和存储过程,简化了数据库操作。本文将详细介绍Mybatis的基本概念、环境搭建以及核心组件,帮助你全面了解Mybatis持久层框架学习。
Mybatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,使得开发人员能将更多精力放在业务逻辑上。本文将详细介绍Mybatis的基本概念、开发环境配置与搭建,以及Mybatis的核心组件介绍。
Mybatis通过使用XML或注解来配置和映射原生类型、接口和JavaPojo(持久化对象)之间的交互。Mybatis的核心特性包括:
Mybatis的基本使用包括映射文件的编写、SQL语句的配置与执行、参数传递与结果映射。下面通过一个示例来展示如何实现这些功能。
Mybatis使用XML文件描述SQL语句。以下是一个简单的映射文件示例:
<mapper namespace="com.example.mapper.UserMapper"> <select id="selectUser" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id} </select> </mapper>
在Java代码中,可以通过SqlSession执行SQL语句:
import org.apache.ibatis.session.SqlSession; public class MyBatisExample { public static void main(String[] args) { SqlSession session = // 获取SqlSession实例 User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1); // 打印用户信息 System.out.println(user); } }
Mybatis支持参数传递和结果映射。如下所示:
<select id="selectUser" parameterType="int" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id} </select>
User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1);
动态SQL允许根据不同的条件动态生成SQL语句。Mybatis提供了if
、choose
、when
、otherwise
和foreach
等标签来实现动态SQL。
<select id="selectUserById" resultType="com.example.model.User"> SELECT * FROM users WHERE 1=1 <if test="id != null"> AND id = #{id} </if> <if test="name != null"> AND name = #{name} </if> </select>
<select id="selectUsersByIds" resultType="com.example.model.User"> SELECT * FROM users WHERE id IN <foreach item="item" index="index" collection="ids" open="(" separator="," close=")"> #{item} </foreach> </select>
关联映射允许一个对象关联另一个对象。例如,用户对象可以关联订单对象:
<association property="orders" javaType="java.util.List" column="user_id" select="selectOrderById"/>
Mybatis支持延迟加载和手动加载。延迟加载允许在需要时加载关联数据,手动加载则允许显式加载关联数据。
// 延迟加载 session.selectList("com.example.mapper.UserMapper.selectUser", 1); // 手动加载 User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1); user.getOrders();
Mybatis可以与Spring框架集成,通过Spring管理SqlSessionFactory和SqlSession。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean>
在进行Mybatis开发之前,需要先配置好开发环境。以下为示例项目中使用的Maven依赖配置:
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.7.0</version> <scope>test</scope> </dependency> </dependencies>
Mybatis的配置文件mybatis-config.xml
包含数据库连接信息以及其他配置项。下面是一个简单的配置示例:
<configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mydb" /> <property name="username" value="root" /> <property name="password" value="password" /> </dataSource> </environment> </environments> </configuration>
接下来,编写Java代码来加载Mybatis配置并执行SQL查询。这里使用简单的方法来创建SqlSessionFactory实例和获取SqlSession。
import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MyBatisExample { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); // 使用session进行数据库操作 } }
SqlSessionFactory:SqlSessionFactory是创建SqlSession的工厂,它是线程不安全的。可以使用SqlSessionFactoryBuilder来创建SqlSessionFactory。
SqlSession:SqlSession代表Mybatis与数据库交互的会话,可以执行SQL语句并返回映射的结果。SqlSession是线程不安全的,每次数据库操作结束后应关闭SqlSession。
通过这些核心组件,Mybatis能够有效简化数据库操作,增强开发效率。