MyBatis简介
MyBatis是一款优秀的持久层框架,它消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis通过简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
快速入门
环境搭建
添加依赖:在项目的
pom.xml文件中添加MyBatis的依赖。<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency>配置文件:创建
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/mybatis_db?useSSL=false&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration>编写映射文件:在
UserMapper.xml中定义SQL语句,将接口方法与SQL映射起来。<mapper namespace="com.example.mapper.UserMapper"> <select id="selectUser" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> </mapper>编写接口:定义与映射文件相对应的接口。
public interface UserMapper { User selectUser(Integer id); }运行测试:在测试类中注入
SqlSessionFactory,并通过它获取SqlSession来执行查询。public class UserMapperTest { private final SqlSessionFactory sqlSessionFactory; public UserMapperTest() throws IOException { sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml")); } @Test public void testSelectUser() throws IOException { try (SqlSession session = sqlSessionFactory.openSession()) { UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUser(1); Assert.assertEquals(user.getUsername(), "example"); } } }
高效应用技巧
使用注解替代XML
MyBatis支持使用注解来代替XML配置,这样可以使代码更加简洁。
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUser(Integer id);
}
动态SQL
MyBatis提供了动态SQL的功能,可以根据条件动态构建SQL语句。
@SelectProvider(type = SqlProvider.class, method = "buildSelect")
List<User> selectUsers(Map<String, Object> params);
public class SqlProvider {
public String buildSelect(Map<String, Object> params) {
StringBuilder sql = new StringBuilder("SELECT * FROM user WHERE 1=1");
if (params.containsKey("username")) {
sql.append(" AND username = #{username}");
}
if (params.containsKey("age")) {
sql.append(" AND age = #{age}");
}
return sql.toString();
}
}
批量操作
MyBatis支持批量插入、更新和删除操作,可以大大提高效率。
@Insert({
"<script>",
"INSERT INTO user (username, age) VALUES",
"<foreach collection='users' item='user' separator=','>",
"(#{user.username}, #{user.age})",
"</foreach>",
"</script>"
})
int insertUsers(List<User> users);
缓存机制
MyBatis提供了强大的缓存机制,可以缓存查询结果,提高性能。
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
总结
MyBatis是一款非常优秀的持久层框架,它通过简单的配置和映射文件,可以将Java代码与数据库操作完美结合。通过以上介绍,相信你已经对MyBatis有了初步的了解。在实际开发中,可以根据需求灵活运用MyBatis的各项功能,提高开发效率。
