MyBatis注解式开发是指直接在Mapper接口的方法上使用注解来编写SQL语句,而不需要额外的XML映射文件。这种方式使代码更加简洁,尤其适合简单的数据库操作场景。以下是MyBatis注解式开发的核心内容和示例:
核心注解
@Select:查询操作。@Insert:插入操作。@Update:更新操作。@Delete:删除操作。@Results&@Result:自定义结果集映射。@Param:为参数命名(当方法有多个参数时使用)。@One:一对一关联查询。@Many:一对多关联查询。
示例代码
1.实体类
publicclassUser{privateLongid;privateStringusername;privateStringemail;// getter/setter 略}2.Mapper接口(使用注解)
importorg.apache.ibatis.annotations.*;importjava.util.List;publicinterfaceUserMapper{// 查询所有用户@Select("SELECT * FROM users")List<User>getAllUsers();// 根据ID查询用户@Select("SELECT * FROM users WHERE id = #{id}")UsergetUserById(Longid);// 插入用户@Insert("INSERT INTO users(username, email) VALUES(#{username}, #{email})")@Options(useGeneratedKeys=true,keyProperty="id")intinsertUser(Useruser);// 更新用户@Update("UPDATE users SET username=#{username}, email=#{email} WHERE id=#{id}")intupdateUser(Useruser);// 删除用户@Delete("DELETE FROM users WHERE id = #{id}")intdeleteUser(Longid);// 复杂查询:使用 @Results 自定义映射@Select("SELECT * FROM users WHERE username LIKE #{keyword}")@Results({@Result(property="id",column="id"),@Result(property="username",column="username"),@Result(property="email",column="email")})List<User>searchUsers(Stringkeyword);}3.配置MyBatis
在MyBatis配置文件中注册Mapper接口:
<mappers><mapperclass="com.example.mapper.UserMapper"/></mappers>多参数处理
当方法有多个参数时,使用@Param注解命名参数:
@Select("SELECT * FROM users WHERE username = #{name} AND age > #{minAge}")List<User>findUsers(@Param("name")Stringname,@Param("minAge")Integerage);关联查询
一对一关联(@One)
@Select("SELECT * FROM orders WHERE id = #{id}")@Results({@Result(property="orderId",column="id"),@Result(property="user",column="user_id",one=@One(select="com.example.mapper.UserMapper.getUserById"))})OrdergetOrderWithUser(Integerid);一对多关联(@Many)
@Select("SELECT * FROM users WHERE id = #{id}")@Results({@Result(property="id",column="id"),@Result(property="orders",column="id",many=@Many(select="com.example.mapper.OrderMapper.getOrdersByUserId"))})UsergetUserWithOrders(Longid);动态SQL
MyBatis注解式开发中,复杂的动态SQL可使用@Provider注解结合SQL提供类:
@SelectProvider(type=UserSqlProvider.class,method="getUserSql")UsergetUserByCondition(Map<String,Object>params);// SQL提供类publicclassUserSqlProvider{publicStringgetUserSql(Map<String,Object>params){StringBuildersql=newStringBuilder("SELECT * FROM users WHERE 1=1");if(params.containsKey("username")){sql.append(" AND username = #{username}");}if(params.containsKey("email")){sql.append(" AND email = #{email}");}returnsql.toString();}}优缺点
- 优点:代码简洁,减少XML文件,适合简单操作。
- 缺点:复杂SQL(如多表关联、动态SQL)维护性较差,建议结合XML使用。
总结
MyBatis注解式开发通过注解直接在接口方法上定义SQL,简化了开发流程。对于简单查询,推荐使用注解;对于复杂查询,可结合XML映射文件或使用@Provider注解。