MyBatis使用小记:从入门到入坑
2023-12-07 15:12:53
引言
MyBatis是一个优秀的ORM框架,它可以将Java对象与数据库表映射起来,简化了Java代码与数据库的交互。作为一名Java开发人员,MyBatis是我必不可少的利器之一。在多年的使用过程中,我也遇到了不少坑,本文将从MyBatis的入门基础开始,分享一些使用MyBatis时遇到的坑,希望能帮助大家少走一些弯路。
MyBatis基础
MyBatis的核心思想是将Java对象与数据库表映射起来,从而简化Java代码与数据库的交互。MyBatis提供了两种映射方式:XML映射和注解映射。XML映射是MyBatis的传统映射方式,而注解映射是MyBatis 3.0之后才引入的新方式。
注解映射更为简洁直观,因此我更推荐使用注解映射。下面是一个使用注解映射的简单例子:
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
// 省略其他属性和方法
}
在上面的例子中,@Table
注解用于指定Java对象对应的数据库表名,@Id
注解用于指定主键列,@GeneratedValue
注解用于指定主键生成策略。
MyBatis使用中的坑
在使用MyBatis的过程中,我也遇到了不少坑,下面列举一些常见的坑:
- 问题字段查不到原因:MyBatis selectByExample 方法
selectByExample
方法是MyBatis提供的一个查询方法,它可以根据Example对象来查询数据库。但是,如果你在使用selectByExample
方法时遇到了问题字段查不到的情况,那么很有可能是因为你的Example对象中没有设置正确的属性值。
- resultMap中id不能是自动生成的
在使用resultMap时,如果主键是自动生成的,那么就不能将其作为resultMap的id。这是因为MyBatis在执行查询时,会根据resultMap的id来匹配Java对象的属性。如果主键是自动生成的,那么MyBatis就无法根据id来匹配Java对象的属性,从而导致查询结果为空。
- 模糊查询时,不能使用通配符
%
在使用模糊查询时,不能直接在SQL语句中使用通配符%
。这是因为MyBatis会将SQL语句中的通配符%
替换成数据库的通配符。例如,如果你在SQL语句中使用%
查询所有以张
开头的用户,那么MyBatis会将SQL语句中的%
替换成MySQL的通配符%
,从而导致查询结果为空。
总结
MyBatis是一个强大的ORM框架,它可以简化Java代码与数据库的交互。在使用MyBatis的过程中,我们可能会遇到一些坑,但是只要我们了解这些坑并采取相应的措施,就可以避免这些坑。希望本文能够帮助大家少走一些弯路,更好地使用MyBatis。