目录
使用注解实现CRUD操作
这种方式本质上由反射机制支持,底层实现了动态代理
简单来说,只需两步。第一步在Dao接口中添加CRUD注解及SQL;第二步将接口注册绑定到核心配置文件中
public interface UserMapper {
@Select("select * from user")
List<User> getUsers();
// 方法存在多个参数,所有的参数前面必须加上 @Param("id")注解
@Select("select * from user where id = #{id}")
User getUserByID(@Param("id") int id);
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})")
int addUser(User user);
@Update("update user set name=#{name},pwd=#{password} where id = #{id}")
int updateUser(User user);
@Delete("delete from user where id = #{uid}")
int deleteUser(@Param("uid") int id);
}
<mappers>
<mapper class="com.lt.dao.UserDao"/>
</mappers>
调用时,正常写调用方法就可以,最主要的作用就是省略了mapper.xml文件
@Test
public void test(){
//获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
logger.info("查询成功啦~");
//关闭SqlSession
sqlSession.close();
}
@Param() 注解
@Param()注解用来映射实体属性和表中的字段,使用时有以下注意事项
-
基本类型的参数或者String类型,需要加上
-
其他引用类型不需要加
-
如果只有一个基本类型的话,可以忽略,但是建议大家都加上!
-
我们在SQL中引用的就是我们这里的 @Param() 中设定的属性名!
使用注解写CRUD操作的弊端
简单的SQL语句使用注解进行CRUD会使代码显得更简洁,项目结构更清晰。但对于复杂的SQL语句,使用注解会显得很混乱。
比较#{} ${} 区别
#{}可以防止SQL注入,但 ${}无法防止