原生的API&注解方式

1.MyBatis原生的API调用

1.1原生API快速入门

需求:在前面的项目基础上,使用MyBatis原生的API完成,即直接通过SqlSession接口的方法来完成操作

1.2代码实现

MyBatisNativeTest.java,演示原生的API操作

其实底层还是使用的映射的xml文件的sql语句

  1. package com.li.mapper;
  2. import com.li.entity.Monster;
  3. import com.li.util.MybatisUtils;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import java.util.Date;
  8. import java.util.List;
  9. /**
  10. * @author 李
  11. * @version 1.0
  12. * 演示使用 Mybatis原生API操作
  13. */
  14. public class MyBatisNativeTest {
  15. private SqlSession sqlSession;
  16. //初始化方法
  17. @Before
  18. public void init() {
  19. sqlSession = MybatisUtils.getSqlSession();
  20. //sqlSession的运行类型是DefaultSqlSession
  21. System.out.println("sqlSession运行类型--" + sqlSession.getClass());
  22. }
  23. //使用sqlSession原生的API调用编写的方法
  24. //其实还是去找映射的Mapper.xml文件的sql语句
  25. @Test
  26. public void myBatisNativeCrud() {
  27. //添加
  28. /*
  29. * @Override
  30. * public int insert(String statement, Object parameter) {
  31. * return update(statement, parameter);
  32. * }
  33. * statement-接口方法的完整路径
  34. * parameter-接口方法的入参
  35. */
  36. Monster monster = new Monster();
  37. monster.setAge(100);
  38. monster.setBirthday(new Date());
  39. monster.setEmail("kate2@qq.com");
  40. monster.setGender(0);
  41. monster.setName("猫精-999");
  42. monster.setSalary(1000);
  43. int insert =
  44. sqlSession.insert("com.li.mapper.MonsterMapper.addMonster", monster);
  45. System.out.println("insert--" + insert);
  46. //删除
  47. int delete =
  48. sqlSession.delete("com.li.mapper.MonsterMapper.delMonster", 6);
  49. System.out.println("delete--" + delete);
  50. //修改
  51. Monster monster2 = new Monster();
  52. monster2.setAge(22);
  53. monster2.setBirthday(new Date());
  54. monster2.setEmail("king789@qq.com");
  55. monster2.setGender(0);
  56. monster2.setName("牛魔王");
  57. monster2.setSalary(8888);
  58. monster2.setId(3);//要带上id,如果没有就不知道修改哪个对象了
  59. int update =
  60. sqlSession.update("com.li.mapper.MonsterMapper.updateMonster", monster2);
  61. System.out.println("update--" + update);
  62. //查询--除了查询,其他的都要使用事务提交
  63. List<Monster> monsters =
  64. sqlSession.selectList("com.li.mapper.MonsterMapper.findAllMonster");
  65. for (Monster monster3 : monsters) {
  66. System.out.println("monster--" + monster3);
  67. }
  68. if (sqlSession != null) {
  69. sqlSession.commit();
  70. sqlSession.close();
  71. }
  72. System.out.println("操作成功!");
  73. }
  74. }

2.MyBatis注解方式操作

2.1注解方式快速入门

之前我们是使用xml文件的方式来实现接口声明的方法,现在使用注解方式来完成增删改查

(1)创建接口 MonsterAnnotation.java,添加注解

  1. package com.li.mapper;
  2. import com.li.entity.Monster;
  3. import org.apache.ibatis.annotations.Delete;
  4. import org.apache.ibatis.annotations.Insert;
  5. import org.apache.ibatis.annotations.Select;
  6. import org.apache.ibatis.annotations.Update;
  7. import java.util.List;
  8. /**
  9. * @author 李
  10. * @version 1.0
  11. * MonsterAnnotation:使用注解的方式来配置我们的接口方法
  12. */
  13. public interface MonsterAnnotation {
  14. //添加 monster
  15. /**
  16. * xml文件的配置方式:
  17. * <insert id="addMonster" parameterType="Monster"
  18. * useGeneratedKeys="true" keyProperty="id">
  19. * INSERT INTO `monster`
  20. * (`age`,`birthday`,`email`,`gender`,`name`,`salary`)
  21. * VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})
  22. * </insert>
  23. */
  24. @Insert(value = "INSERT INTO `monster` " +
  25. "(`age`,`birthday`,`email`,`gender`,`name`,`salary`) " +
  26. "VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})")
  27. public void addMonster(Monster monster);
  28. //根据id删除一个Monster
  29. @Delete(value = "DELETE FROM `monster` WHERE `id`=#{id}")
  30. public void delMonster(Integer id);
  31. //修改Monster
  32. //注解配置时value可以省略
  33. @Update("UPDATE `monster` " +
  34. "SET `age`=#{age},`birthday`=#{birthday},`email`=#{email}," +
  35. "gender`=#{gender},`name`=#{name},`salary`=#{salary} " +
  36. "WHERE `id`=#{id};")
  37. public void updateMonster(Monster monster);
  38. //查询-根据id
  39. @Select("SELECT * FROM `monster` WHERE id=#{id}")
  40. public Monster getMonsterById(Integer id);
  41. //查询所有的Monster
  42. @Select("SELECT * FROM `monster`")
  43. public List<Monster> findAllMonster();
  44. }

(2)修改mybatis-config.xml,对MonsterAnnotation 进行注册

  1. <mappers>
  2. <!--<mapper resource="com/li/mapper/MonsterMapper.xml"/>-->
  3. <!--如果是通过注解的方式,可不再使用MonsterMapper.xml
  4. 但是需要在mybatis-config.xml中注册/引入含注解的类-->
  5. <mapper class="com.li.mapper.MonsterAnnotation"/>
  6. </mappers>

(3)测试

  1. package com.li.mapper;
  2. import com.li.entity.Monster;
  3. import com.li.util.MybatisUtils;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import java.util.Date;
  8. import java.util.List;
  9. /**
  10. * @author 李
  11. * @version 1.0
  12. */
  13. public class MonsterAnnotationTest {
  14. private SqlSession sqlSession;
  15. private MonsterAnnotation monsterAnnotation;
  16. @Before
  17. public void init() {
  18. sqlSession = MybatisUtils.getSqlSession();
  19. monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);
  20. //class com.sun.proxy.$Proxy11
  21. System.out.println("monsterAnnotation的运行类型=" + monsterAnnotation.getClass());
  22. }
  23. @Test
  24. public void addMonster() {
  25. Monster monster = new Monster();
  26. monster.setAge(99);
  27. monster.setBirthday(new Date());
  28. monster.setEmail("queen@qq.com");
  29. monster.setGender(0);
  30. monster.setName("狐狸精");
  31. monster.setSalary(3000);
  32. //使用在接口方法配置注解的方式完成对DB的操作
  33. monsterAnnotation.addMonster(monster);
  34. //如果是增删改,需要提交事务
  35. if (sqlSession != null) {
  36. sqlSession.commit();
  37. sqlSession.close();
  38. }
  39. }
  40. @Test
  41. public void findAllMonster() {
  42. //使用接口方法配置注解的方式完成操作
  43. List<Monster> allMonster = monsterAnnotation.findAllMonster();
  44. for (Monster monster : allMonster) {
  45. System.out.println("monster=" + monster);
  46. }
  47. if (sqlSession != null) {
  48. sqlSession.close();
  49. }
  50. }
  51. }

2.2注意事项和使用细节

  1. 如果是通过注解的方式,就不再使用MonsterMapper.xml文件,但是需要在mybatis的配置文件中引入含注解的类/接口

  2. 添加时,如果要返回自增长的id值,可以使用@Option注解,组合使用

    1. /**
    2. * 1.useGeneratedKeys = true 返回自增的值
    3. * 2.keyProperty = "id" 自增对应的对象属性
    4. * 3.keyColumn = "id" 自增的表字段
    5. * 4.如果 keyProperty 和 keyColumn 的值相同,可以省略 keyColumn
    6. */
    7. @Insert(value = "INSERT INTO `monster` " +
    8. "(`age`,`birthday`,`email`,`gender`,`name`,`salary`) " +
    9. "VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})")
    10. @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
    11. public void addMonster(Monster monster);

day04-原生的API&注解方式的更多相关文章

  1. springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany

    springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...

  2. Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式

     本节主要内容:    1. 给MessageBean注入参数值    2. 测试Spring自动组件扫描方式    3. 如何控制ExampleBean实例化方式    4. 使用注解方式重构Jdb ...

  3. SpringMVC的controller方法中注解方式传List参数使用@RequestBody

    在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...

  4. 注解方式传LIST@RequestBody

    在SpringMVC中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解 //创建文件夹 @RequestMapping(value=" ...

  5. mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类

    相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...

  6. spring 纯注解方式 与AOP

    spring注解方式 以前我也使用过纯注解方式.现在在这里做个记录 我们先认识几个我们都耳熟能详的注解 @configuration :从spring3.0这个注解就可以用于定义配置类,可以替换xml ...

  7. SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  8. spring jwt springboot RESTful API认证方式

    RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authentication)和授权(Authorization)过程,保证API的安全性. Authenticatio ...

  9. Hibernate 注解方式配置

    在Hibernate3之后就可以使用注解的方式去配置.而且在工作中我们使用的更多的也是注解方式去配置项目,所以还有一部分使用配置文件去配置的一些关系就不在此去一一举例,需要了解的朋友可以去查看Hibe ...

  10. Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理

        注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 手工装配依赖对象  手工装配依赖对象,在这种方式中又有两种编 ...

随机推荐

  1. Windows 10 配置Java 环境变量

    下载 JDK 下载地址:https://www.oracle.com/java/technologies/downloads/ 点击下载按钮: 开始安装JDK: 可以设置为你想安装的路径. 环境变量配 ...

  2. Linux--top命令解释

    top命令解释 1.1 系统运行时间和平均负载: top命令的顶部显示与uptime命令相似的输出 这些字段显示: 当前时间 系统已运行的时间 当前登录用户的数量 相应最近5.10和15分钟内的平均负 ...

  3. 通过解析库探究函数式抽象代价 ( ini 解析示例补充)

    上一篇 用 HexColor 作为示例,可能过于简单 这里再补充一个 ini 解析的示例 由于实在写不动用其他库解析 ini 了, 春节都要过完了,累了,写不动了, 所以随意找了一份解析ini的库, ...

  4. SP9494 ZSUM - Just Add It 题解

    题目传送门 前置知识 快速幂 解法 推式子: \(\begin{aligned} Z_n+Z_{n-1}-2Z_{n-2}&=(Z_n-Z_{n-2})+(Z_{n-1}-Z_{n-2}) \ ...

  5. PCIE详解

    老男孩读PCIe之一:从PCIe速度说起 从今天开始,老男孩要开始讲PCIe了.对我来说,这是个很大的挑战:首先,我自己本身,对PCIe并没有做到胸有成竹,我的PCIe知识也只是停留在理论阶段,我并没 ...

  6. 【Unity3D】相机

    1 简介 ​ 相机用于渲染游戏对象,每个场景中可以有多个相机,每个相机独立成像,每个成像都是一个图层,最后渲染的图层在最前面显示. ​ 相机的属性面板如下: Clear Flags:设置清屏颜色,Sk ...

  7. layui切换select选项事件

    说明 我们经常遇到表单上面选择不同的下拉选项需要触发函数去完成一些业务逻辑,比如我这个地方根据所选商品查询它底下明细的数量,并展示. 效果演示 代码 <!--选择商品--> <div ...

  8. Jsp+Servlet实现文件上传下载(二)--文件列表展示

    接着上一篇讲: Jsp+Servlet实现文件上传下载(一)--文件上传 点击打开链接 本章来实现一下上传文件列表展示,同时优化了一下第一章中的代码. 废话少说,上代码 --------------- ...

  9. 【Android 逆向】VM Kali 中 charles 抓android https 协议

    1. 虚拟机调成桥接模式(不用选择 复制物理网络链接状态) 2. 虚拟机中 打开 Charles 4. 选择 Proxy ->SSL Proxying Settings 1. 选择SSL Pro ...

  10. maven引入本地jar不能打入部署包的问题解决

    引入的三方依赖 jar 包, scope 为 system 的包 maven 默认是不打包进去的,需要加这个配置 在pom.xml文件中找到spring-boot-maven-plugin插件,添加如 ...