简单学会MyBatis原生API&注解

简介: 简单学会MyBatis原生API&注解

原生的API&注解的方式


MyBatis-原生的API 调用


应用实例


需求


感兴趣的可以看一下博主前面的项目----自己实现MyBatis 底层机制–抽丝剥茧(上).

在前面项目的基础上,将增删改查,使用MyBatis 原生的API 完成,就是直接通过SqlSession 接口的方法来完成。

1.增加 2. 删除

3.修改 4. 查询

image.png


代码实现


  1. 创建src\test\java\com\nlc\mapper\MyBatisNativeTest.java, 完成添加数据
public class MyBatisNativeTest {
    //这个是Sql 会话,通过它可以发出sql 语句
    private SqlSession sqlSession;
    private MonsterMapper monsterMapper;
    @Before
    public void init() throws Exception {
        //通过SqlSessionFactory 对象获取一个SqlSession 会话
        sqlSession = MyBatisUtils.getSqlSession();
        //获取MonsterMapper 接口对象, 该对象实现了MonsterMapper
        monsterMapper = sqlSession.getMapper(MonsterMapper.class);
        System.out.println(monsterMapper.getClass());
    }
    //使用sqlSession 原生的API 调用我们编写的方法
    @Test
    public void myBatisNativeCrud() {
        //=============add start==================
        Monster monster = new Monster();
        monster.setAge(200);
        monster.setBirthday(new Date());
        monster.setEmail("nlc100@sohu.com");
        monster.setGender(2);
        monster.setName("白骨精");
        monster.setSalary(9234.89);
        sqlSession.insert("com.nlc.mapper.MonsterMapper.addMonster", monster);
        //=============add end===================
        if (sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("操作成功!");
    }
}


  1. 修改src\test\java\com\nlc\mapper\MyBatisNativeTest.java, 完成删除/修改/查询数据.
//使用sqlSession 原生的API 调用我们编写的方法
@Test
public void myBatisNativeCrud() {
    //===========删除start======================
    sqlSession.delete("com.nlc.mapper.MonsterMapper.delMonster", 3);
    //===========删除end======================
    //===========update start======================
    Monster monster = new Monster();
    monster.setAge(300);
    monster.setBirthday(new Date());
    monster.setEmail("tn100@sohu.com");
    monster.setGender(2);
    monster.setName("狮驼国妖精");
    monster.setSalary(9234.89);
    monster.setId(7);
    sqlSession.update("com.nlc.mapper.MonsterMapper.updateMonster",
    monster);
    //===========update end======================
    //=========select start=================
    List<Monster> monsterList =  sqlSession.selectList ("com.nlc.mapper.MonsterMapper.findAllMonster");
    for (Monster monster : monsterList) {
      System.out.println(monster);
    }
    //=========select end=================
    if (sqlSession != null) {
        sqlSession.commit();
        sqlSession.close();
    }
    System.out.println("操作成功!");
}


  1. 完成测试

MyBatis-注解的方式操作


需求


在前面项目的基础上,将增删改查,使用MyBatis 的注解的方式完成

1.增加 2.删除

3.修改 4.查询


代码实现


  1. 创建src\main\java\com\nlc\mapper\MonsterAnnotation.java
public interface MonsterAnnotation {
    //添加方法,将我们的sql 语句直接写在@Insert 注解即可
    @Insert("INSERT INTO monster (age,birthday,email,gender,name,salary) "
    + "VALUES(#{age},#{birthday},#{email},#{gender},#{name},#{salary})")
    public void addMonster(Monster monster);
    //根据id 删除一个Monster
    @Delete("DELETE FROM monster "
    + "WHERE id=#{id}")
    public void delMonster(Integer id);
    //修改Monster
    @Update("UPDATE monster SET age=#{age}, birthday=#{birthday}, "
    + "email = #{email},gender= #{gender}, "
    + "name=#{name}, salary=#{salary} "
    + "WHERE id=#{id}")
    public void updateMonster(Monster monster);
    //查询-根据id
    @Select("SELECT * FROM monster WHERE "
    + "id = #{id}")
    public Monster getMonsterById(Integer id);
    //查询所有的Monster
    @Select("SELECT * FROM monster ")
    public List<Monster> findAllMonster();
}


  1. 修改mybatis-config.xml , 对MonsterAnnotaion 进行注册
<!-- 这里会引入(注册)我们的Mapper.xml 文件-->
<mapper resource="com/nlc/mapper/MonsterMapper.xml"/>
<!--
    1. 如果是通过注解的方式,可不再使用MonsterMapper.xml
    2. 但是需要在mybatis-config.xml 注册含注解的类
-->
<mapper class="com.nlc.mapper.MonsterAnnotation"/>


  1. 创建com\nlc\mapper\MonsterAnnotationTest.java , 完成测试
public class MonsterAnnotationTest {
    //这个是Sql 会话,通过它可以发出sql 语句
    private SqlSession sqlSession;
    @Before
    public void init() throws Exception {
        //通过SqlSessionFactory 对象获取一个SqlSession 会话
        sqlSession = MyBatisUtils.getSqlSession();
    }
    //测试通过注解的方式来完成接口中方法的实现
    //其它的删除,修改,查询是一样一样,自己测试即可
    @Test
    public void addMonster() {
        Monster monster = new Monster();
        monster.setAge(500);
        monster.setBirthday(new Date());
        monster.setEmail("nlc@sohu.com");
        monster.setGender(2);
        monster.setName("白虎精");
        monster.setSalary(9234.89);
        MonsterAnnotation monsterAnnotation =
        sqlSession.getMapper(MonsterAnnotation.class);
        monsterAnnotation.addMonster(monster);
        //增删改,需要提交事务
        if (sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }
        System.out.println("操作成功");
    }
}


注意事项和说明


  1. 如果是通过注解的方式, 就不再使用MonsterMapper.xml 文件, 但是需要在mybatis-config.xml 文件中注册含注解的类/接口。
  1. 使用注解方式,添加时, 如果要返回自增长id 值, 可以使用@Option 注解, 组合使用
@Insert(value = "INSERT INTO `monster` (`age`, `birthday`, `email`, `gender`, `name`,`salary`) " +
"VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
public void addMonster(Monster monster);


  1. 在Junit 进行添加/查询测试即可。


😄总结


  1. 原生API的使用方法有很多,我们在使用时要弄清楚自己需要使用的是哪一个。
  2. 不清楚用哪一个的时候可以尝试去猜一下,猜它的参数、猜它的类型,看看哪个符合条件。
  3. 使用注解时需要在mybatis-config.xml 注册含注解的类,否则无法使用。
  4. SQL语句最好先在Navicat上测试一下,否则SQL语句不正确。


文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁

希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻

如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章
|
11月前
|
SQL XML Java
Mybatis基础使用知识(注解)
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。 最后 mybatis 框架执行sql 并将结果映射为java对象并返回。采用ORM(对象关系映射)思想解决了实体和数据库映射问题,对jdbc进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
640 0
|
SQL XML Java
MyBatis注解的运用于条件搜索实践
通过上述的实践,我们可以看出MyBatis注解不仅能够实现条件搜索的需求,还能够提供灵活而强大的SQL构造能力,极大地简化了代码的复杂度,提高了开发效率。在实际的项目开发中,结合实际的业务需求合理选择MyBatis的配置方式(注解或XML),能够让数据持久层代码变得更加清晰和易维护。
264 11
|
存储 Java 数据库连接
Mybatisplus中的主要使用注解
3.有些注解需要配合其他配置使用。例如,@Version需要配合乐观锁插件使用,@EnumValue需要配合对应的TypeHandler使用。
664 11
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
SQL XML Java
MyBatis——选择混合模式还是全注解模式?
在MyBatis开发中,Mapper接口的实现方式有两种:全注解模式和混合模式。全注解模式直接将SQL嵌入代码,适合小规模、简单逻辑项目,优点是直观简洁,但复杂查询时代码臃肿、扩展性差。混合模式采用接口+XML配置分离的方式,适合大规模、复杂查询场景,具备更高灵活性与可维护性,但学习成本较高且调试不便。根据项目需求与团队协作情况选择合适模式至关重要。
386 4
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
2796 6
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
1229 0
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
922 5