Dao层
持久层/数据库访问层,在Mybatis中称作Mapper,用于持久化数据,就是所谓的数据存储。
我们在持久层使用Mybatis框架开发,开发有两种方式:
- Mybatis XML方式
- Mybatis 注解方式
注解方式
注解方式直接在Dao层方法上添加注解即可。
public interface UserDao {
@Select("select * from user")
public List<User> findAll();
@Insert("insert into user (username,email) values (#{userName},#{email})")
public void save(User user);
@Select("select * from user where id = #{id}")
public User findUserById(Integer id);
}
使用注解来映射简单语句会使代码显得更加简洁,然而对于稍微复杂一点的语句,Java 注解就力不从心了,并且会显得更加混乱。 因此,如果你需要完成很复杂的事情,那么最好使用 XML 来映射语句。
@Param
@Param用于给参数命名。
不加的话基本类型默认为入参变量名,复杂类型默认为成员名。
@Update("update user set username=#{u.userName}, email = #{u.email} where id = #{u.id}")
void updateUserById(@Param("u")User user);
@Select("select * from user where id = #{uid}")
User findUserById(@Param("uid")Integer id);
@Insert
表明该方法为新增SQL。
@Insert("insert into user (username,email) values (#{userName},#{email})")
public void saveUser(User user);
@Select
表明该方法为查询SQL。
@Select("select * from user where id = #{id}")
public User findUserById(Integer id);
@Update
表明该方法为更新SQL。
@Update("update user set username=#{userName}, email = #{email} where id = #{id}")
public void updateUserById(User user);
@Delete
表明该方法为删除SQL。
@Delete("delete from user where id=#{id}")
public void deleteUserById(Integer id);
@Results|@Result
@Results代表一个结果集的映射关系
@Result代表一个字段的映射关系
@Results(id = "userMap", value = {
@Result(id=true, column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "passwd", property = "passwd"),
@Result(column = "birth_day", property = "birthDay")
})
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdResultMap(Long id);
@ResultMap
@ResultMap代表引用已有的结果集
@ResultMap("userMap")
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdResultMapReference(Long id);