mybatis-注解实现CRUD


注解可以代替 mapper.xml 映射文件 虽然十分方便,但不适合复杂的操作.

一.在 UserMapper 接口中的方法上添加注解

public interface UserMapper {
    @Select("select * from user")
    List getUser();

    //方法存在多个基本类型参数,所有的参数前面必须加上 @Param("xx")注解,并且参数名以注解指定的为准
    @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);

    //方法存在多个基本类型参数,所有的参数前面必须加上 @Param("xx")注解,并且参数名以注解指定的为准
    @Delete("delete from user where id = #{uid}")
    int deleteUser(@Param("uid")int id);
}

二.在核心配置文件 mybatis-config.xml 中绑定接口


    
        
    

三.测试

public class UserMapperTest {
    @Test
    public void getUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //底层主要应用了反射
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List userList = mapper.getUser();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    @Test
    public void getUserById(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);
        sqlSession.close();
    }
    @Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.addUser(new User(6,"admin6","123456"));
        sqlSession.close();
    }
    @Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser(new User(6,"cnm","696969"));
        sqlSession.close();
    }
    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(6);
        sqlSession.close();
    }
}

注1:增删改可以开启自动提交事务(不建议)

public static SqlSession  getSqlSession(){
    //参数true : 自动提交事务
    return sqlSessionFactory.openSession(true);
}

注2:关于@Param

  1. 方法的参数是基本数据类型或者 String 时 需要使用@Param注解
  2. 方法的参数有多个时必须在每个参数前都添加@Param注解,只有一个时可以省略
  3. 添加注解后,参数名以注解中指定的为准,@Param("xx") xx就是参数名

注3:#{} 和 ${} 的区别

  1. #{} 相当于是使用了预编译(PrepareStatement) 可以防止 SQL 注入,推荐使用
  2. ${} 不能防止SQL注入,不推荐使用

相关