Mybatis使用注解开发(7)

我怕爱的太早我们不能终老 提交于 2020-08-19 00:33:25

注解开发

1、面向接口编程

选择面向接口编程的根本原因是为了解耦

关于接口的理解:

  • 定义与实现的分离
  • 接口可以反应设计人员对于系统的抽象理解

2、注解开发

2.1、注解在接口上实现

    @Select("select * from user")
    List<User> getUsers();

2.2、需要在配置文件中绑定接口

 <!--绑定接口-->
    <mappers>
        <mapper class="com.malajava.dao.UserMapper"/>
    </mappers>

2.3、测试

  @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //底层主要使用反射
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> userList = mapper.getUsers();

        for (User user:userList) {
            System.out.println(user);
        }

    }

本质:反射机制

底层:动态代理!

3、注解的CRUD

在工具类中可以设置为自动提交事务

public  static SqlSession getSqlSession(){
   SqlSession sqlSession = sqlSessionFactory.openSession(true);//设置为true表示自动提交事务
      return sqlSession;
  }
  • 编写接口
    @Select("select * from user")
    List<User> getUsers();

    @Select("select * from user where id = #{id}")
    //方法中存在多个参数的时候,必须加上@Param注解,对于引用对象不需要添加
    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);

  • 测试

public class UserMapperTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //底层主要使用反射
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUsers();

        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);
        User user = new User(9,"Lisa","121211");
        int i = mapper.addUser(user);
        if(i>0){
            System.out.println("插入成功!!");
        }else{
            System.out.println("插入失败    ");
        }
        sqlSession.close();
    }
    @Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser(new User(5,"peter","12121"));
        sqlSession.close();
    }

    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(8);
        sqlSession.close();
    }
}

注意

  • 一定不要忘了将接口绑定到核心配置文件中
   <!--绑定接口-->
    <mappers>
        <mapper class="com.malajava.dao.UserMapper"/>
    </mappers>
  • 关于@Param()注解
    • 基本类型的参数和String类型,都需要加上
    • 引用类型不需要加
    • 如果只有一个基本类型的话,可以忽略,但是建议大家加上
    • 在SQL中引用的就是我们这里的@Param("name")中的属性名
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!