MyBatis是一款优秀的持久层框架,它消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis可以让我们编写更少的代码,更加关注业务逻辑。本篇文章将为你提供一个详细的MyBatis入门与进阶指南。
MyBatis入门
1.1 安装MyBatis
首先,你需要在项目中添加MyBatis的依赖。如果你的项目是基于Maven的,可以在pom.xml中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
1.2 配置文件
在项目中创建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="com.mysql.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>
1.3 Mapper接口与XML文件
在项目中创建一个Mapper接口,该接口包含了所有对数据库的查询、插入、更新和删除方法。
public interface UserMapper {
List<User> selectAll();
User selectById(int id);
int insert(User user);
int update(User user);
int deleteById(int id);
}
然后在同一目录下创建一个与接口同名的XML文件,编写具体的SQL语句。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectAll" resultType="com.example.User">
SELECT * FROM user
</select>
<select id="selectById" resultType="com.example.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insert">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<update id="update">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteById">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
1.4 使用MyBatis
在Spring Boot项目中,可以添加以下依赖来整合MyBatis。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
在application.properties或application.yml文件中配置数据源等信息。
mybatis.type-aliases-package=com.example
mybatis.mapper-locations=classpath:mapper/*.xml
最后,在Spring Boot的配置类中,添加MyBatis的配置。
@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {
// ...
}
现在,你可以使用Mapper接口来操作数据库了。
MyBatis进阶技巧
2.1 动态SQL
MyBatis提供了丰富的动态SQL功能,可以方便地实现条件判断、循环等复杂操作。
<select id="selectUsersByCondition" resultType="User">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
2.2 一对多、多对一关联查询
MyBatis支持复杂的一对多、多对一关联查询,只需要在Mapper接口和XML文件中正确配置即可。
<!-- 一对多关联查询 -->
<select id="selectOrderDetailsByOrderId" resultMap="orderDetailMap">
SELECT od.* FROM order_detail od WHERE od.order_id = #{id}
</select>
<resultMap id="orderDetailMap" type="OrderDetail">
<id property="id" column="id"/>
<association property="order" column="order_id" javaType="Order">
<id property="id" column="order_id"/>
<result property="order_id" column="order_id"/>
<!-- ...其他属性映射 -->
</association>
</resultMap>
2.3 代码生成器
MyBatis提供了一款名为MBG(MyBatis Generator)的代码生成器,可以自动生成实体类、Mapper接口和XML文件。
public class MBG {
public static void main(String[] args) throws Exception {
// 配置MBG生成器
Configuration configuration = new Configuration();
// 配置数据源、生成文件路径等
// ...
// 创建MBG生成器
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration);
// 执行MBG生成代码
myBatisGenerator.generate();
}
}
通过MBG生成代码,可以大大提高开发效率。
2.4 性能优化
为了提高MyBatis的性能,你可以:
- 使用合适的缓存策略;
- 使用批量操作减少数据库访问次数;
- 选择合适的数据库连接池;
- 选择合适的SQL语句。
总结
MyBatis是一款非常实用的持久层框架,掌握MyBatis的入门与进阶技巧,可以大大提高你的开发效率。希望这篇文章能帮助你快速掌握MyBatis。
