【Spring Boot】使用MyBatis注解实现数据库操作

简介: MyBatis还提供了注解的方式,相比XML的方式,注解的方式更加简单方便,无须创建XML配置文件。接下来好好研究注解的使用方式。

使用MyBatis注解实现数据库操作

MyBatis还提供了注解的方式,相比XML的方式,注解的方式更加简单方便,无须创建XML配置文件。接下来好好研究注解的使用方式。

1.XML和注解的异同

1)注解模式使用简单,开发效率高,但是维护麻烦,修改SQL需要重新编译打包。

2)XML模式便于维护,SQL和代码分开,代码清晰易懂,而使用注解模式需要在方法前加各种注解和SQL语句,使得代码的可读性不强。

3)XML模式虽然提供了完善的标签来实现复杂的SQL语句,但是没有在Java代码中直接判断拼接那样简单方便。

4)XML模式因为SQL是配置在XML文件中的,某些特殊字符需要转义,所以使用起来比较麻烦,容易出错。

2.使用MyBatis注解实现数据查询

MyBatis注解模式的最大特点是取消了Mapper的XML配置,通过@Insert、、@Update、@Select、@Delete等注解将SQL语句定义在Mapper接口方法中或SQLProvider的方法中,从而省去了XML配置文件。这些注解和参数的使用与mapper.xml配置文件基本一致。下面就来演示使用MyBatis注解实现数据查询。

2.1 修改配置文件

首先创建Spring Boot项目,集成MyBatis的过程与XML配置方式一样。

使用注解方式只需要在application.properties中指明实体类的包路径,其他保持不变,配置示例如下:

#mapper.xml mapper接口的包路径
MyBatis.type-aliases-package=com.example.ysxq

#数据库连接
spring.datasource.url=jdbc:mysql://Localhost:3306/ceshi?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

在上面的示例中,配置了mapper接口的包路径和数据源,无须配置mapper.xml文件的路径。

2.2 添加mapper接口

使用MyBatis提供的SQL语句注解无须再创建mapper.xml映射文件,创建mapper接口类,然后添加相关的方法即可:

public interface StudentMapper {
   
   
    @Select("select * from student")
    List<Student> selectAll();
}

在上面的示例中,使用@Select注解定义SQL查询语句即可实现查询所有学生列表的功能,无须再定义mapper.xml映射文件。

2.3 验证测试

增加单元测试方法,验证是否生效。示例代码如下:

@Test
    public void testSelectAll() {
   
   
        // 查询
        List<Student> students = studentMapper.selectAll();
        for (Student stu : students) {
   
   
            System.out.println("name:"+stu.getName()+", age:"+stu.getAge());
        }
    }

单击Run Test或在方法上右击,选择Run 'testSelectAll',查看单元测试结果,运行结果如图所示。

image.png

结果表明单元测试方法testSelectAll运行成功,并输出了相应的查询结果。这说明使用注解成功实现了查询全部学生信息的功能。

3.参数传递

相信很多人会有疑问:MyBatis是如何将参数传递到SQL中的,有哪几种传参方式?下面就来一一介绍MyBatis注解的传参方式。

3.1 直接传参

对于简单的参数,可以直接使用#{id}的方式接收同名的变量参数。示例代码如下:

@Select("SELECT * FROM student where id=#{id,jdbcType=VARCHAR}")
Student selectOne(Long id);

在上面的示例中,使用#{id}传入变量参数,支持传入多个参数。只是需要注意,使用#{}方式定义的参数名必须和方法中的参数名保持一致。

3.2 使用@Param注解

@Param注解的作用是给参数命名,参数命名后就能根据名字匹配到参数值,正确地将参数传入SQL语句中。比如,注解是@Param("person"),那么参数就会被命名为#{person}。示例代码如下:

@Select("select * from student where name=#{name} and sex=#{sex}")
Student selectByNameAndSex(@Param("name") String name, @Param("sex") Integer sex);

如果方法有多个参数,也可以不自定义param,MyBatis在方法的参数上就能为它们取自定义的名字,参数先以"param"作为前缀,再加上它们的参数位置作为参数别名,比如#{param1}、#{param2}。

// 默认使用param +参数序号或者0、1,值就是参数的值
@Select("select * from student where name=#{param1} and sex=#{param2}")
Student selectByNameAndSex(String name, Integer sex);

如果不想给每个参数命名,可以使用param参数,默认格式为param+参数序号或者0、1,值就是参数的值。

3.3 映射传值

需要传送多个参数时,也可以考虑使用映射(Map)的形式。

@Select("select * from student where name=#{name} and sex=#{sex}")
Student selectByNameAndSex(Map<String, Object> map);

在上面的示例中,将SQL语句需要的参数通过map类型传入,key为参数名,value为参数值。MyBatis会自动匹配对应的映射中的参数值。

调用时将参数依次加入映射中即可:

@Map param= new HashMap();
param.put("name", "ysxq");
param.put("sex", 1);
Student student = studentMapper.selectByNameAndSex(param);

3.4 使用pojo对象

使用pojo对象传参是比较常用的传参方式,像前面介绍的insert、update等方法,都是直接传入user对象。

@Update({
   
   
     "update student",
     "set name = #{name,jdbcType=VARCHAR},",
     "age = #{age,jdbcType=INTEGER},",
     "sex = #{sex,jdbcType=INTEGER}",
     "where id =#{id,jdbcType=VARCHAR}"
})
void update(Student record);

对于insert、update等参数较多的方法,可以使用pojo对象传参。需要注意的是,参数的名字和类型必须和pojo对象的属性保持一致。

上面讲述了MyBatis传参的4种方式,使用时根据方法的参数来选择合适的传值方式即可。

4.结果映射

MyBatis会自动将查询结果集转换为需要返回的数据类型,但是有些特殊的场景需要处理,比如查询的返回结果与期望的数据格式不一致时,应该怎么处理呢?

这就需要使用@Results和@Result注解。这两个注解可以将数据库中查询到的数值转化为具体的属性或类型,修饰返回的结果集,比如查询的对象返回值属性名和字段名不一致,或者对象的属性中使用了枚举等。

    @Select({
   
   
            "select",
            "id, name as student_name,age, sex as student_sex",
            "from student",
            "where id = #{id,jdbcType=VARCHAR}"
    })
    @Results({
   
   
            @Result(column="id",property="id",jdbcType= JdbcType.VARCHAR,id=true),
            @Result(column="student_name",property="name",jdbcType=JdbcType.VARCHAR),
            @Result(column="student_sex",property="sex",jdbcType=JdbcType.TIMESTAMP)
    })
    Student selectById(Long id);

在上面的例子中,查询结果集的student_name字段和实体类Student定义的name属性的名称不一致,所以需要Result进行转换;而age名称是一致的,所以不需要Result进行转换。

相关文章
|
9月前
|
SQL XML Java
Mybatis基础使用知识(注解)
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。 最后 mybatis 框架执行sql 并将结果映射为java对象并返回。采用ORM(对象关系映射)思想解决了实体和数据库映射问题,对jdbc进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
578 0
|
10月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1756 5
|
12月前
|
SQL XML Java
MyBatis注解的运用于条件搜索实践
通过上述的实践,我们可以看出MyBatis注解不仅能够实现条件搜索的需求,还能够提供灵活而强大的SQL构造能力,极大地简化了代码的复杂度,提高了开发效率。在实际的项目开发中,结合实际的业务需求合理选择MyBatis的配置方式(注解或XML),能够让数据持久层代码变得更加清晰和易维护。
210 11
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1680 1
Spring boot 使用mybatis generator 自动生成代码插件
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
502 1
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
788 1
|
12月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
357 0
|
存储 Java 数据库连接
Mybatisplus中的主要使用注解
3.有些注解需要配合其他配置使用。例如,@Version需要配合乐观锁插件使用,@EnumValue需要配合对应的TypeHandler使用。
575 11
|
SQL XML Java
MyBatis——选择混合模式还是全注解模式?
在MyBatis开发中,Mapper接口的实现方式有两种:全注解模式和混合模式。全注解模式直接将SQL嵌入代码,适合小规模、简单逻辑项目,优点是直观简洁,但复杂查询时代码臃肿、扩展性差。混合模式采用接口+XML配置分离的方式,适合大规模、复杂查询场景,具备更高灵活性与可维护性,但学习成本较高且调试不便。根据项目需求与团队协作情况选择合适模式至关重要。
319 4
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
1175 0