Mybatis学习笔记:使用注解开发(CRUD)

学习内容:使用注解开发(CRUD)

1. 怎么使用注解

1.1、注解在接口上实现
在这里插入图片描述
1.2、需要再核心配置文件中绑定接口
在这里插入图片描述
1.3、编写测试程序
在这里插入图片描述
我们使用注解就可以不用编写UserMapper.xml(可以理解成接口实现类)文件了。

Mybatis详细的执行流程:
在这里插入图片描述

本质:反射机制实现
底层:动态代理
在这里插入图片描述

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

2. 用注解实现CRUD(增删改查)

数据库中的数据:
在这里插入图片描述

2.1、我们可以在工具类创建的时候实现自动提交事务

public static SqlSession getSqlSession() {
   //这里设置了true之后,执行事务自动提交
   //就不用再手动写代码了(sqlSession.commit();)
   return sqlSessionFactory.openSession(true);
}

2.2、查询(根据id查询用户)

  • 编写接口,增加注解
方法存在多个参数的时候,所有的参数前面必须加上@Param("参数名")注解
只有基本数据类型要加@Param(),引用数据类型不用加
sql语句中的#{属性名}中的属性名必须和@Param("属性名")中的属性名一致,否则将找不到
//通过id查询用户
//方法存在多个参数的时候,所有的参数前面必须加上@Param("参数名")注解
//只有基本数据类型要加@Param(),引用数据类型不用加
//sql语句中的#{属性名}中的属性名必须和@Param("属性名")中的属性名一致,否则将找不到
@Select("select * from user where id=#{id}")
User getUserById(@Param("id") int id);
  • 编写测试程序
//根据id查询用户
@Test
public void getUserById(){
   SqlSession sqlSession = MybatisUtils.getSqlSession();
   UserMapper mapper = sqlSession.getMapper(UserMapper.class);
   User userById = mapper.getUserById(1);
   System.out.println(userById);
   sqlSession.close();
}

结果:
在这里插入图片描述
之前说过,这里之所以password找不到是因为数据库中的属性名是pwd,而实体类中的属性名是password,两者不一致,所以查找不到(详情请见)。

但是这里没有无法使用结果映射集,只能将sql语句改为select id,name,pwd as password from mybatis.user where id = #{id},但是如果当实体类中的属性较多的时候,会很麻烦,所以还是尽量保持数据库和实体类中的属性名一致。

修改之后的结果:
在这里插入图片描述
2.3、添加

  • 编写接口,增加注解
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})")
int addUser(User user);
  • 编写测试程序
@Test
public void addUser(){
  SqlSession sqlSession = MybatisUtils.getSqlSession();
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  int result = mapper.addUser(new User(4,"pc","123"));
  if (result>0){
       System.out.println("添加成功!");
   }
  sqlSession.close();
}

结果:在这里插入图片描述
在这里插入图片描述

2.4、修改

  • 编写接口,增加注解
@Update("update user set name=#{name},pwd=#{password} where id=#{id}")
int updateUser(User user);
  • 编写测试程序
@Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int result = mapper.updateUser(new User(4,"lb","123"));
        if (result>0){
            System.out.println("修改成功!");
        }
        sqlSession.close();
    }

结果:在这里插入图片描述
在这里插入图片描述
2.5、删除

  • 编写接口,增加注解
//删除
@Delete("delete from user where id=#{id}")
int deleteUser(@Param("id") int id);
  • 编写测试程序
@Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int result = mapper.deleteUser(4);
        if (result>0){
            System.out.println("删除成功!");
        }
        sqlSession.close();
    }

结果:在这里插入图片描述
在这里插入图片描述

3. 关于@Param() 注解

  • 基本类型的参数或者String类型,需要加上
  • 引用类型不需要加
  • 如果只有一个基本类型的话,可以忽略,但是建议大家都加上!
  • 我们在SQL中引用的就是我们这里的 @Param() 中设定的属性名!

4. #{}和${} 区别

延伸:

  • 用${传入数据直接显示在生成的sqI中,如上面的语句,用role. id = ${roleld,jdbcType=INT&ER},那么sq|在解析的时候值为role_ id= roleid,执行时会报错;

  • ${方式无法防止sq|注入;

  • $-般用入传入数据库对象,比如数据库表名;

  • 能用#}时尽量用#0};

注意:
Mybaties排序时使用order by动态参数时需要注意,使用${}而不用#{}。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值