MyBatis:使用注解开发

时间:2020-02-28 01:02:44   收藏:0   阅读:81

面向接口编程

关于接口的理解

三个面向区别

利用注解开发

【注意】利用注解开发就不需要mapper.xml映射文件了 .

  1. 我们在我们的接口中添加注解

    //查询全部用户
    @Select("select id,name,pwd password from user")
    public List<User> getAllUser();
  2. 在mybatis的核心配置文件中注入

    <!--使用class绑定接口-->
    <mappers>
        <mapper class="com.kuang.mapper.UserMapper"/>
    </mappers>
  3. 我们去进行测试

    @Test
    public void testGetAllUser() {
        SqlSession session = MybatisUtils.getSession();
        //本质上利用了jvm的动态代理机制
        UserMapper mapper = session.getMapper(UserMapper.class);
    
       List<User> users = mapper.getAllUser();
        for (User user : users){
            System.out.println(user);
        }
    
        session.close();
    }
  4. 利用Debug查看本质
    技术分享图片
  5. 本质上利用了jvm的动态代理机制
    技术分享图片
  6. Mybatis详细的执行流程
    技术分享图片

注解增删改

改造MybatisUtils工具类的getSession( ) 方法,重载实现。【鸡汤:多看源码实现】

//获取SqlSession连接
public static SqlSession getSession(){
    return getSession(true); //事务自动提交
}

public static SqlSession getSession(boolean flag){
    return sqlSessionFactory.openSession(flag);
}

【注意】确保实体类和数据库字段对应

查询:

  1. 编写接口方法注解

    //根据id查询用户
    @Select("select * from user where id = #{id}")
    User selectUserById(@Param("id") int id);
  2. 测试

    @Test
    public void testSelectUserById() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
    
        User user = mapper.selectUserById(1);
        System.out.println(user);
    
        session.close();
    }

新增:

  1. 编写接口方法注解

    //添加一个用户
    @Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})")
    int addUser(User user);
  2. 测试

    @Test
    public void testAddUser() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
    
        User user = new User(6, "秦疆", "123456");
        mapper.addUser(user);
    
        session.close();
    }

修改:

  1. 编写接口方法注解

    //修改一个用户
    @Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
    int updateUser(User user);
  2. 测试

    @Test
    public void testUpdateUser() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
    
        User user = new User(6, "秦疆", "zxcvbn");
        mapper.updateUser(user);
    
        session.close();
    }

删除:

  1. 编写接口方法注解

    //根据id删除用
    @Delete("delete from user where id = #{id}")
    int deleteUser(@Param("id")int id);
  2. 测试

    @Test
    public void testDeleteUser() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
    
        mapper.deleteUser(6);
        
        session.close();
    }

【注意点:增删改一定记得对事务的处理】

关于@Param

@Param注解用于给方法参数起一个名字。以下是总结的使用原则:

#$的区别

原文:https://www.cnblogs.com/wpy188/p/12375444.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!