一、MyBatis简介
MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行了封装,简化了数据库的操作。MyBatis可以让我们编写更少的代码,达到更高效的数据库操作。它支持自定义SQL、存储过程以及高级映射。
二、MyBatis入门
2.1 MyBatis环境搭建
添加依赖:在项目的
pom.xml文件中添加MyBatis的依赖。<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency>配置MyBatis:创建
mybatis-config.xml文件,配置数据源、事务管理器等。<configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/your_database"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> </dataSource> </environment> </environments> </configuration>编写Mapper接口:定义Mapper接口,用于映射SQL语句。
public interface UserMapper { User getUserById(int id); }编写Mapper XML:创建Mapper XML文件,定义SQL语句。
<mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper>
2.2 MyBatis基本操作
获取SqlSession:通过
SqlSessionFactoryBuilder获取SqlSession。SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession sqlSession = sqlSessionFactory.openSession();执行查询:使用
SqlSession的selectOne方法执行查询。User user = sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", 1); System.out.println(user.getName());提交事务:执行完操作后,需要提交事务。
sqlSession.commit(); sqlSession.close();
三、MyBatis进阶
3.1 动态SQL
MyBatis支持动态SQL,可以方便地实现条件查询、分页查询等功能。
条件查询:使用
<if>标签实现条件判断。<select id="getUserByCondition" resultType="com.example.User"> SELECT * FROM user <where> <if test="name != null"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </where> </select>分页查询:使用
<choose>、<when>、<otherwise>标签实现分页。<select id="getUserByPage" resultType="com.example.User"> SELECT * FROM user <where> <choose> <when test="page == 1"> ORDER BY age ASC </when> <when test="page == 2"> ORDER BY age DESC </when> <otherwise> ORDER BY id ASC </otherwise> </choose> </where> LIMIT #{offset}, #{pageSize} </select>
3.2 实体类与数据库表的映射
自动映射:MyBatis默认支持自动映射,只需在实体类中定义属性名与数据库列名一致即可。
自定义映射:使用
<resultMap>标签自定义映射关系。<resultMap id="userResultMap" type="com.example.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> </resultMap>
3.3 一对一、一对多、多对多关系
一对一:使用
<one-to-one>标签实现一对一关系。<resultMap id="userResultMap" type="com.example.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> <one-to-one property="address" select="com.example.mapper.AddressMapper.getAddressById"/> </resultMap>一对多:使用
<collection>标签实现一对多关系。<resultMap id="userResultMap" type="com.example.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> <collection property="orders" ofType="com.example.Order"> <id column="order_id" property="id"/> <result column="user_id" property="userId"/> <result column="amount" property="amount"/> </collection> </resultMap>多对多:使用联合查询实现多对多关系。
<select id="getUsersByDepartmentId" resultType="com.example.User"> SELECT u.* FROM user u JOIN user_department ud ON u.id = ud.user_id WHERE ud.department_id = #{departmentId} </select>
四、MyBatis项目实战技巧
使用MyBatis Generator生成代码:通过MyBatis Generator可以自动生成Mapper接口、Mapper XML和实体类。
缓存机制:MyBatis提供了多种缓存机制,如一级缓存、二级缓存等,可以提高数据库操作效率。
整合Spring框架:将MyBatis与Spring框架整合,实现声明式事务管理。
使用插件:MyBatis支持自定义插件,可以扩展框架功能。
性能优化:通过合理配置MyBatis、优化SQL语句、使用缓存等方式提高系统性能。
通过以上内容,相信大家对MyBatis已经有一定的了解。希望这篇文章能帮助大家快速上手MyBatis,并掌握项目实战技巧。
