本章节将介绍怎样简单的使用 MyBatis 注解,示例如下:
(1)使用 @Select、@Results 和 @Result 三个注解实现 select 查询,以及将查询结果进行结果映射。如下:
@Select("SELECT user_id, name, sex, age FROM user") @Results({ @Result(id=true, column="user_id", property="userId"), @Result(column="name", property="name"), @Result(column="sex", property="sex"), @Result(column="age", property="age") }) List<UserBean> demo();
(2)使用 @ResultMap 注解引用 Mapper XML 文件中 <resultMap> 定义的映射。如下:
/** * 引用 BookMapper.xml 中名为 userMap 的结果映射 * @return */ @Select("SELECT user_id, name, sex, age FROM user") @ResultMap("userMap") List<UserBean> demo();
Mapper XML 文件内容如下:
<?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.hxstrive.mybatis.annotation.demo2.UserMapper"> <!-- 结果映射,和其他方法共用 --> <resultMap id="userMap" type="com.hxstrive.mybatis.annotation.demo2.UserBean" > <id column="user_id" jdbcType="INTEGER" property="userId" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="sex" jdbcType="VARCHAR" property="sex" /> <result column="age" jdbcType="INTEGER" property="age" /> </resultMap> </mapper>
(3)使用 @One 注解实现一对一关联映射。如下:
@Select("SELECT book_id, book_name, price, content FROM book") @Results({ @Result(id=true, column="book_id", property="bookId"), @Result(column="book_name", property="bookName"), @Result(column="price", property="price"), @Result(column="content", property="content"), @Result(column="book_id", property="bookExt", one=@One(select="getExtBookExtById") ) }) List<BookBean> demo(); @Select("select book_id, book_summary, book_content " + "from book_ext where book_id=#{bookId}") @Results({ @Result(id=true, column="book_id", property="bookId"), @Result(column="book_summary", property="bookSummary"), @Result(column="book_content", property="bookContent") }) BookExtBean getExtBookExtById(Integer bookId);
上面实例中,在 demo() 方法中,使用 @Result 注解的 one 属性配合 @One 注解实现关联映射。其中,@One 注解通过 select 属性指定了 getExtBookExtById 方法,当每条数据映射时,将会调用
getExtBookExtById 方法。
(4)使用 @Many 注解实现一对多关联关系映射。如下:
@Select("SELECT `user_id`, `name`, `sex`, `age` FROM `user`") @Results({ @Result(id=true, column="user_id", property="userId"), @Result(column="name", property="name"), @Result(column="sex", property="sex"), @Result(column="age", property="age"), @Result(column="user_id", property="userContactList", many=@Many(select="getUserContactByUserId") ) }) List<UserBean> getUserList(); @Select("SELECT `id`, `user_id`, `usage`, `number` FROM `user_contact` " + "where user_id=#{userId}") @Results({ @Result(id=true, column="id", property="id"), @Result(column="user_id", property="userId"), @Result(column="usage", property="usage"), @Result(column="number", property="number") }) List<UserContactBean> getUserContactByUserId(Integer userId);
上面示例中,通过 @Result 注解的 many 属性配合 @Many 注解实现一对多映射。其中,@Many 注解通过 select 属性指定映射方法 getUserContactByUserId。注意:getUserContactByUserId 映射方法再本 Mapper 中进行了定义。
(5)使用 @Insert 注解实现 insert 语句,插入数据。如下:
a、通过传递普通参数插入数据
@Insert("INSERT INTO book(book_name, price, content) VALUE(" + "#{bookName}, #{price}, #{content})") void insertBook(@Param("bookName") String bookName, @Param("price") Float price, @Param("content") String content);
b、通过传递 JavaBean 插入数据
@Insert("INSERT INTO book(book_name, price, content) VALUE(" + "#{bookName}, #{price}, #{content})") void insertBook(BookBean book);
c、通过 @SelectKey 注解获取刚刚插入数据的 ID
@Insert("INSERT INTO book(book_name, price, content) VALUES(" + "#{book.bookName}, #{book.price}, #{book.content})") @SelectKey(statement="SELECT last_insert_id()", keyProperty="book.bookId", resultType=Integer.class, before=false) int insertBook(@Param("book") BookBean book);
(6)使用 @Update 注解实现 update 语句,修改数据。如下:
@Update("UPDATE book SET book_name=#{bookName}, price=#{price}, content=#{content} " + " WHERE book_id=#{bookId}") void updateBook(@Param("bookId") Integer bookId, @Param("bookName") String bookName, @Param("price") Float price, @Param("content") String content);
(7)使用 @Delete 注解实现 delete 语句,删除数据。如下:
@Delete("DELETE FROM book WHERE book_id=#{bookId}") void deleteBook(@Param("bookId") Integer bookId);