本文为 SSM 框架系列之 MyBatis 第七部分:使用注解开发
其它内容的链接如下:
【1】MyBatis01:初识 MyBatis 与 第一个 MyBaits 程序
【2】MyBatis02:CRUD 操作
【3】MyBatis03:配置解析
【4】MyBatis04:作用域和生命周期
【5】MyBatis05:分页
【6】MyBatis06:日志
【7】MyBatis07:使用注解开发
【8】MyBatis08:ResultMap 的结果集映射
【9】MyBatis09:动态 SQL 与缓存

传送门:

  • 8 使用注解开发
    • 8.1 为什么使用注解开发
    • 8.2 使用注解进行 CRUD 操作
      • 8.2.1 操作步骤
      • 8.2.2 查(Retrieve)
        • (1) 查询对应表中的所有用户
        • (2) 分页查询表中的对象
        • (3) 根据指定 id 号查询对象
      • 8.2.3 增(Create)
      • 8.2.4 改(Update)
      • 8.2.5 删(Delete)
    • 8.3 总结

8 使用注解开发

8.1 为什么使用注解开发

使用注解来映射简单语句会使代码显得更加简洁。除了 MyBatis 使用 XML 配置文件外,其它第三方框架一般都是使用注解来进行开发的。

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

选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。

8.2 使用注解进行 CRUD 操作

8.2.1 操作步骤

  1. 在 MyBatis 配置文件中配置映射器(mappers);
  2. 先在 Mapper 接口中写入约束的方法名;
  3. 再在约束的方法上写入对应的注解;
  4. 写一个测试类进行测试。

8.2.2 查(Retrieve)

(1) 查询对应表中的所有用户

1)在 MyBatis 配置文件中配置映射器(mappers);

<!--主程序中每一个 Mapper.xml 都必须写一个标签,否则会报错。因为使用注解
开发是没有 Mapper.xml 的,所以这里需要使用映射器接口实现类的完全限定类名的形式-->
<mappers><mapper class="sharm.dao.UserMapper"/>
</mappers>

2)先在 Mapper 接口中写入约束的方法名,并在约束的方法上写入对应的注解;

/**
* 查询对应表中的所有对象
* @return 所有对象
*/
@Select("select * from mybatis.user")
List<User> selectUser();

3)写一个测试类进行测试。

@Test
public void testSelectUser(){SqlSession session = MyBatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);List<User> users = mapper.selectUser();for (User user: users){System.out.println(user);}session.close();
}

(2) 分页查询表中的对象

1)在 MyBatis 配置文件中配置映射器(mappers);

<!--主程序中每一个 Mapper.xml 都必须写一个标签,否则会报错。因为使用注解
开发是没有 Mapper.xml 的,所以这里需要使用映射器接口实现类的完全限定类名的形式-->
<mappers><mapper class="sharm.dao.UserMapper"/>
</mappers>

2)先在 Mapper 接口中写入约束的方法名,并在约束的方法上写入对应的注解;

/*** 分页查询表中的对象* 其中#{startIndex},#{pageSize} 中的参数名一定要和导入进去的 Map 的键相同* 引用类型不需要写 @Param* @return 所有对象*/
@Select("select * from mybatis.user limit #{startIndex},#{pageSize}")
List<User> selectUserByPage(Map<String,Integer> map);

3)写一个测试类进行测试。

@Test
public void testSelectUserByPage(){SqlSession session = MyBatisUtils.getSession();UserMapper mapper = session.getMapper(UserMapper.class);HashMap<String, Integer> hashMap = new HashMap<>();hashMap.put("startIndex",0);hashMap.put("pageSize",1);List<User> users = mapper.selectUserByPage(hashMap);for (User user: users){System.out.println(user);}session.close();
}

(3) 根据指定 id 号查询对象

1)在 MyBatis 配置文件中配置映射器(mappers);

<!--主程序中每一个 Mapper.xml 都必须写一个标签,否则会报错。因为使用注解
开发是没有 Mapper.xml 的,所以这里需要使用映射器接口实现类的完全限定类名的形式-->
<mappers><mapper class="sharm.dao.UserMapper"/>
</mappers>

2)先在 Mapper 接口中写入约束的方法名,并在约束的方法上写入对应的注解;

/***  根据指定 id 号查询对象*/
@Select("select * from mybatis.user where id = #{id}")
User selectUserById(@Param("id") int id);

3)写一个测试类进行测试。

@Test
public void testSelectUserById (){// 这里测试的方法的步骤也是死的// 1 首先得到利用工具类得到 session 对象SqlSession session = MyBatisUtils.getSession();// 2 然后利用该方法得到对应的 mapper 对象UserMapper mapper = session.getMapper(UserMapper.class);// 3 直接利用 mapper 的方法User user = mapper.selectUserById(1);System.out.println(user);session.close();
}

8.2.3 增(Create)

1)在 MyBatis 配置文件中配置映射器(mappers),同时设置事务自动提交;

<mappers><mapper class="sharm.dao.UserMapper"/>
</mappers>
//2 获取SqlSession连接
public static SqlSession getSession(){return sqlSessionFactory.openSession(true);
}

2)先在 Mapper 接口中写入约束的方法名,并在约束的方法上写入对应的注解;

/***  在表中插入一个数据*/
@Insert("insert into mybatis.user(id, name, password) values(#{id}, #{name}, #{password})")
void addUser(User user);

3)写一个测试类进行测试。

@Test
public void testAddUser(){SqlSession session = MyBatisUtils.getSession();UserMapper sessionMapper = session.getMapper(UserMapper.class);User jack = new User(4, "jack", "123456");sessionMapper.addUser(jack);session.close();
}

8.2.4 改(Update)

1)在 MyBatis 配置文件中配置映射器(mappers),同时设置事务自动提交;

<mappers><mapper class="sharm.dao.UserMapper"/>
</mappers>
//2 获取SqlSession连接
public static SqlSession getSession(){return sqlSessionFactory.openSession(true);
}

2)先在 Mapper 接口中写入约束的方法名,并在约束的方法上写入对应的注解;

/*** 更新表中的某一个对象*/
@Update("update mybatis.user set name = #{name}, password = #{password} where id = #{id}")
void updateUser(User user);

3)写一个测试类进行测试。

@Test
public void testUpdateUser(){SqlSession session = MyBatisUtils.getSession();UserMapper sessionMapper = session.getMapper(UserMapper.class);User jula = new User(4, "luma", "123456");sessionMapper.updateUser(jula);session.close();
}

8.2.5 删(Delete)

1)在 MyBatis 配置文件中配置映射器(mappers),同时设置事务自动提交;

<mappers><mapper class="sharm.dao.UserMapper"/>
</mappers>
 //2 获取SqlSession连接public static SqlSession getSession(){return sqlSessionFactory.openSession(true);}

2)先在 Mapper 接口中写入约束的方法名,并在约束的方法上写入对应的注解;

 /*** 删除表中的某一个用户*/@Delete("delete from mybatis.user where id = #{id}")void deleteUser(int id);

3)写一个测试类进行测试。

@Test
public void testDeleteUser(){SqlSession session = MyBatisUtils.getSession();UserMapper sessionMapper = session.getMapper(UserMapper.class);sessionMapper.deleteUser(2);session.close();
}

8.3 总结

  1. 当在方法只接受一个参数的情况下,可以不使用@Param;当在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名;
  2. 如果参数是 JavaBean 或者包装类 , 则不能使用@Param;

MyBatis07:使用注解开发相关推荐

  1. mybatis使用注解开发

    mybatis使用注解开发 面向接口编程 在之前我们是通过面向对象编程,但是在真正开发的时候我们会选择面向接口编程. 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的 ...

  2. 使用注解开发SpringMVC详细配置教程

    目录 1.使用注解开发SpringMVC 1.新建一个普通的maven项目,添加web支持 2.在pom.xml中导入相关依赖 3.配置web.xml 4.编写SpringMVC配置文件 1. 自动扫 ...

  3. 【Spring Web MVC】Spring Web MVC 注解开发环境搭建

    为什么80%的码农都做不了架构师?>>>    1.创建maven项目 创建一个名为:springwebmvc-first的maven项目 2.添加依赖包 要使用springWebM ...

  4. AspectJ的注解开发AOP:异常抛出通知的学习

    AspectJ的注解开发AOP:异常抛出通知的学习 参考文章: (1)AspectJ的注解开发AOP:异常抛出通知的学习 (2)https://www.cnblogs.com/xiaolaha/p/1 ...

  5. 【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发

    Spring注解开发 Spring是轻代码重配置的框架,配置比较繁重,会影响开发效率.这个时候可以通过注解开发,注解代替xml配置文件可以简化配置,提高开发效率. Spring原始注解 注解分为原始注 ...

  6. 07-XML 文件注解开发

    目录 注解 一.@Configuration @Import 二.@ComponentScan 三.@bean 1.Config完整代码 2.测试类 不论是 xml 开发或者注解开发都有一个问题是,我 ...

  7. 011_AOP注解开发

    一. Spring的基于ApsectJ的注解的AOP开发 1. 编写目标类并配置 2. 编写切面类并配置 3. 在配置文件中打开注解的AOP开发 4. 在切面类上使用注解@Aspect 5. 前置通知 ...

  8. SpringMVC学习03之使用注解开发SpringMVC

    复习 Spring MVC的特点: 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼容性好,无缝结合 约定优于配置 功能强大:RESTful.数据验证.格式化.本地化.主题等 简 ...

  9. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

最新文章

  1. Pycharm中tensorflow框架下tqdm的安装
  2. 案例解读:小红书邂逅AWS,轻松玩转社区+电商
  3. python中定义的函数不掉用不会执行_如果出现异常/错误,如何不在python中停止执行其他函数...
  4. corosync + pacemaker + drbd 实现mysql存储的高可用(一)
  5. 2016年1月20日总结
  6. Xcode中AutoLayOut的简单使用
  7. ztree 后台异步加载_Ztree 分批异步加载
  8. 浅谈MES系统质量管理功能模块
  9. 金庸笔下人物名字的来历和意义
  10. 金格插件WebOffice2015使用体会
  11. 高级设计总监的设计方法论——5W1H需求分析法 KANO模型分析法
  12. 品《阿里巴巴大数据实践-大数据之路》一书(下)
  13. 面对陌生环境,机器人如何像人一样自由穿行?
  14. 如何创建微信公众号订阅号以及认证服务号
  15. 阿里云Linux下python3的安装及环境配置(详细教程)
  16. 你的声音价值百万,教你六个利用声音赚钱的方法
  17. id门禁卡复制到手机_门禁卡复制到手机苹果
  18. 我在用的翻译软件 - 微软翻译+网易有道词典+谷歌翻译
  19. MySQL数据库银行转账
  20. 《SAP后勤模块实施攻略—SAP在生产、采购、销售、物流中的应用》——2.3 按订单生产(MTO)...

热门文章

  1. java基础之super关键字_繁星漫天_新浪博客
  2. 1046 划拳 PTA
  3. C语言无符号双字节乘法,华为OJ机试标题:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...
  4. Web Of Science检索页面错误信息修改申请方法
  5. 盘点2010年娱乐圈十大重磅事件
  6. Java is Pass-by-Value, Dammit!
  7. 小红书血洗1w+大v,他们该何去何从?
  8. 传智播客成都java培训中心的发展
  9. mysql mysqldataadapter_MySql中MySqlDataAdapter类的用法
  10. 贝勒大学计算机专业,贝勒大学计算机科学.pdf