首页 > 其他分享 >Mybatis-使用注解开发

Mybatis-使用注解开发

时间:2022-12-31 17:45:25浏览次数:60  
标签:session mapper name 开发 user Mybatis 注解 id

目录
在JSP中使用servlet的时候需要先在web.xml中配置相关的servlet类才能正常使用,然后还有一种快捷的方式就是使用@WebServlet的快速开发。在之前的MyBatis中也都是使用的xml文件的配置,然后这个是说说用注解的方式使用Mybatis。

利用注解开发

  • sql 类型主要分成 :

    • @select ()
    • @update ()
    • @Insert ()
    • @delete ()

使用了注解开发后就不再需要mapper.xml的配置文件了。

注解开发步骤

  1. 在我们的接口中添加注解
    /**
     * 查询全部用户
     * @return
     */
    @Select("select * from user")
    public List<User> getAllUser();
  1. 在mybatis的核心配置文件中注入
<!--使用class绑定接口-->
<mappers>
   <mapper class="com.kailong.mapper.UserMapper"></mapper>
</mappers>
  1. 测试
    @Test
    public void testGetAllUser(){
        SqlSession sqlSession = MybatisUtils.getSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.getAllUser();
        for (User user:users){
            System.out.println(user);
        }
        sqlSession.close();
    }
  1. 测试结果

image

  1. 利用Debug查看本质

image

  1. 本质上利用了jvm的动态代理机制

image

  1. Mybatis详细的执行流程

image

注解增删改

改造MybatisUtils工具类的getSession( ) 方法,重载实现。

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

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

查询

  1. 编写接口方法注解
    /**
     * 根据Id查询用户
     * @param id
     * @return
     */
    @Select(" select * from user where id = #{id}")
    User selectUserById(@Param("id")int id);
  1. 测试
@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. 测试结果

image

新增

  1. 编写接口方法注解
/**
 * 添加用户
 * @param user
 * @return
 */
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);
  1. 测试
@Test
public void testAddUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = new User(5,"愚生浅末","123456");
    int i = mapper.addUser(user);
    System.out.println(i);
    session.commit(); //提交事务,重点!不写的话不会提交到数据库
    session.close();
}
  1. 测试结果

image

image

修改

  1. 编写接口方法注解
/**
 * 根据ID修改用户的信息
 * @param user
 * @return
 */
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);
  1. 测试
@Test
public void testUpdateUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);

    User user = new User(5, "愷龍test", "kailong");
    mapper.updateUser(user);

    session.close();
}
  1. 测试结果

image

image

删除

  1. 编写接口方法注解
/**
 * 根据Id删除用户
 * @param id
 * @return
 */
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id")int id);
  1. 测试
@Test
public void testDeleteUser() {
    SqlSession session = MybatisUtils.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    mapper.deleteUser(5);
    session.close();
}
  1. 测试结果

image

image

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

关于@Param

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

  • 在方法只接受一个参数的情况下,可以不使用@Param。
  • 在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
  • 如果参数是 JavaBean , 则不能使用@Param。
  • 不使用@Param注解时,参数只能有一个,并且是Javabean。

#与$的区别

  • #{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】

    INSERT INTO user (name) VALUES (#{name});
    INSERT INTO user (name) VALUES (?);
    
  • ${} 的作用是直接进行字符串替换

    INSERT INTO user (name) VALUES ('${name}');
    INSERT INTO user (name) VALUES ('kailong');
    

使用注解和配置文件协同开发,才是MyBatis的最佳实践!

公众号本文地址:https://mp.weixin.qq.com/s/YsZgx7VtB18PsJkUgn7Ntg
欢迎关注公众号:愚生浅末。

标签:session,mapper,name,开发,user,Mybatis,注解,id
From: https://www.cnblogs.com/kohler21/p/17016992.html

相关文章

  • Rust中的生命周期注解 - 学习笔记
    Rust生命周期注解是为了保证【依赖有效】简单地说:假设变量a依赖于b,那么b的生命周期应该大于a,否则不安全。 Rust中生命周期注解的用法示例1//通过'a标注相同的生命......
  • java开发社区活动预约系统
    简介本系统主要是社区活动预约系统网站,社区管理员可以发布活动,社区居民和游客均可进行活动预约,管理员后台审核预约是否通过,居民可以填写活动感受,管理员查看感受后可以进行......
  • java开发机动车考试驾照考试-科一科四考试在线题库系统
    简介本系统主要是进行科一科四考试和练习的网上考试系统,分为A1B1、A2B2、C1C2的科一科四考试系统,当学员点击开始考试,系统将自动生成随机题目100道(选择题80道,判断题20道)的......
  • java开发的医院体检预约系统
    简介体检项目预约网站,普通用户注册登录可以网上预约体检项目,经过后台人员审核后可以去体检。用户还可以记录自己的身体指标下载体检报个,查看医嘱等。医院后台可以进行权限......
  • java开发的美妆化妆品电商商城系统
    简介Java基于ssm(可以转springboot项目哦)开发的美妆商城系统,主要是卖化妆品的系统,用户可以浏览商品,加入购物车,下单,在个人中心管理自己的订单。管理员可以管理自己的商品,......
  • mybatisPlus逻辑删除
    1.在逻辑删除字段上添加@TableLogic注解@ApiModelProperty(value="状态:0未删除,1已删除")@TableLogic(value="0",delval="1")privateIntegerisDeleted;......
  • 自定义注解
    记录一点关于自定义注解的小事儿记录一些遇到过的问题“Cannotfindmethod'value'”定义了一个自定义注解,@Target({ElementType.FIELD})@Retention(RetentionPolicy......
  • 云开发一键搬家插件
    运行截图优势1、官方的web控制台需要一个一个表导出导入,操作繁琐。而++一键搬家++不需要。2、直接用官方的web控制台导出的json文件导入腾讯云,会出现24位id和外键......
  • 快速体验React开发基础入门指南
    前言大家好,我是CoderBin,本次整理了我学习react过程中的各部分的知识点,看完文本你将会学到jsx的基本使用使用脚手架创建项目如何在React当中定义组件React当中的事件绑......
  • 越来越难的“跨平台”开发,又到了一个岔路口
    以前跨平台-设备技术的差异跨越不同点相同点标准/规范操作系统底层实现,UI交互访问协议telnet、ftp、http、虚拟机(JVM)、解释器浏览器高级特性支持基本特......