简介
在前一篇文章里我们已经讨论了一个简单的基于xml配置文件运行mybatis的示例。实际上,要完成上述的功能,mybatis里还提供了一种基于annotation的实现方式。对于有些不喜欢繁琐的xml配置文件的人来说,这种方式因为是添加标注到代码里,并不会带来实现上的侵入。总的来说,这种方式会显得稍微简洁一点。
项目修改
结合前面那个项目来看,我们通过xml配置的重点在两个地方,一个是mapper-config.xml文件这里。它主要是配置访问数据库的不同环境和对应的数据源。基本上整个项目就一个这样的文件。还有一个就是针对不同mapper接口对应的mapper xml文件。在实际项目里,我们可能需要根据需要定义若干个接口,而每个接口都需要有一个对应的xml文件。实际上,如果我们能够在定义mapper接口的地方就能把这个映射关系给定义好的话,这样实现就显得更紧凑,而不用在接口代码和配置中来回比较。
现在,我们就看看对原来的工程该怎么修改吧。在原来的工程中,mapper-config.xml里有这么一部分配置,是用来指定mapper文件的:
<mappers> <mapper resource="com/yunzero/mybatisSample/mappers/UserMapper.xml"/> </mappers>
采用这种方式指定的是具体的某个xml文件,当有多个xml映射文件的话,这种方式就显得比较繁琐了。尤其是在有多个mapper接口定义好的情况下。这样,我们可以将上面这部分修改成如下:
<mappers> <package name="com.yunzero.mybatisSample.mappers"/> </mappers>
这种配置方式显得很java:)。之所以这么说是因为这种指定package配置项的方式有点像spring里的componentscan。这里有点类似的意思,就是让mybatis在给定的mappers java包里头找所有的mapper接口。这在有多个映射接口的情况下确实简洁了不少。剩下的部分就是将原来xml里的配置信息用annotation的方式给描述出来。
select
关于select的实现,在这里有专门的Select annotation,在它的参数里可以提供对应的sql操作语句。像本示例中有getUserById和getAllUsers两个方法。它们的详细实现如下:
@Select("SELECT user_id as userId, email_id as emailId, password, first_name as firstName, last_name as lastName FROM user WHERE USER_ID = #{userId}") public User getUserById(Integer userId); @Select("select * from user") @Results({ @Result(id=true, column="user_id", property="userId"), @Result(column="email_id", property="emailId"), @Result(column="password", property="password"), @Result(column="first_name", property="firstName"), @Result(column="last_name", property="lastName") }) public List<User> getAllUsers();
这部分的实现比较有意思。除了在原来定义的annotation里设置sql代码,在某些情况下因为我们还需要有对象关系的映射。在xml文件里是有一个resultMap项,在这里则有@Results, @Result的标记项。其中@Results作用于某个方法的时候,就表示它就是该方法所映射的resultMap。很显然,@Result则是里面每个具体元素的映射项。
这里还有一个值得注意的地方,在前面xml配置的工程里,一旦定义好了一个resultMap的映射之后,它在多个查询的方法里是可以复用的,但是在基于annotation的方式里则不行。比如说上述的代码里,如果我们希望将getUserById的方法该成也使用resultMap的方式的话,有两种方式,一种就是把getAllUsers方法里的配置在前面再重复一遍。还有一种就是把resultMap的定义放到原来的mapper xml文件中,而其他的部分还是留在代码里。这种方法的修改如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yunzero.mybatisSample.mappers.UserMapper"> <resultMap type="User" id="UserResult"> <id property="userId" column="user_id"/> <result property="emailId" column="email_id"/> <result property="password" column="password"/> <result property="firstName" column="first_name"/> <result property="lastName" column="last_name"/> </resultMap> </mapper>
原来的xml文件只剩下resultMap这部分。然后对应的mapper接口如下:
@Select("select * from user") @ResultMap("com.yunzero.mybatisSample.mappers.UserMapper.UserResult") public List<User> getAllUsers();
insert
insert的过程也比较简单,和前面xml配置的方式类似,它的详细实现如下:
@Insert("INSERT INTO user(email_id, password, first_name, last_name) VALUES(#{emailId}, #{password}, #{firstName}, #{lastName})") @Options(useGeneratedKeys=true, keyProperty="userId") public void insertUser(User user);
在这个示例里,尤其是针对需要数据库自动生成id的,我们用对应的Options标记来设置这两个属性。剩下的就完全一样了。
update, delete
关于update和delete的过程,可以说基本上就是照搬原来的过程了,它的详细实现如下:
@Update("UPDATE user SET PASSWORD= #{password}, FIRST_NAME = #{firstName},LAST_NAME = #{lastName} WHERE USER_ID = #{userId}") public void updateUser(User user); @Delete("DELETE FROM user WHERE USER_ID = #{userId}") public void deleteUser(Integer userId);
这里的一个基本的规律就是xml里的select, insert, update, delete项,这里就有对应的annotation项。
这样,整个项目的修改就完成了。详细的实现可以参照附件里的代码。
总结
基于annotation的配置方式和基于xml的方式比起来显得更加紧凑一些,但是它在对resultMap的复用上显得表达力有点不足。这两种方式各有自己的优缺点,可以针对各自的情况来选择。
相关推荐
本篇文章将聚焦于MyBatis中的注解(Annotation)与XML配置的结合使用,旨在帮助开发者更深入地理解这一关键特性。 首先,MyBatis允许我们使用注解来简化Mapper接口的定义,无需编写XML映射文件。例如,我们可以在...
在"MyBatis-CRUD-Annotation.zip"这个压缩包中,很显然,它包含了一个关于如何使用MyBatis的注解进行CRUD(创建、读取、更新、删除)操作的示例或教程。以下是对MyBatis中注解使用及相关知识点的详细解释: 1. **...
**Spring MVC 整合 Mybatis 知识点详解** 在现代Java Web开发中,Spring MVC 和 Mybatis 是两个非常流行的框架。Spring MVC 提供了强大的MVC架构支持,而Mybatis则是一个轻量级的持久层框架,专注于SQL映射。将两者...
SpringBoot和Mybatis是两个非常流行的Java开发框架,SpringBoot简化了Spring的配置,而Mybatis则是一个轻量级的持久层框架,专注于SQL映射和接口操作。本示例源码将展示如何将这两个框架整合在一起,创建一个高效、...
spring-boot-mybatis-annotation-mulidatasource:springboot+mybatis(注解版)多数据源最简解决方案 spring-boot-thymeleaf:simple spring boot thymeleaf demo spring-boot-jpa-thymeleaf-curd:spring boot + ...
# application.properties 示例 mybatis-plus.mapper-locations=classpath:mapper/*.xml mybatis-plus.global-config.db-config.id-type=auto ``` 3. **创建实体类**:为数据库表创建对应的Java实体类,这些类通常...
在本文中,我们将深入探讨如何在SpringBoot应用中集成并使用MyBatis Plus。MyBatis Plus(简称MP)...通过阅读和理解这个示例,你可以更好地掌握SpringBoot与MyBatis Plus的集成方法,以及如何在项目中有效地使用它们。
在提供的"day03_ms"压缩包文件中,可能包含的是关于Spring和MyBatis配置的具体示例代码,如XML配置文件、Mapper接口、映射文件等。通过分析这些文件,可以加深对Spring和MyBatis集成的理解,以及学习如何在实际项目...
Java微服务实践-Spring Boot ...MyBatis 实例讲解提供了 MyBatis 的实践示例,帮助开发者更好地理解和使用 MyBatis。 MyBatis 问答互动 MyBatis 问答互动提供了 MyBatis 相关的问题和答案,帮助开发者快速解决问题。
以下是一个基本的配置示例: ```xml <!-- 数据源配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:...
在 `fluent-mybatis-master` 压缩包中,包含了项目的源码、示例、文档以及构建脚本等资源,开发者可以通过研究这些内容,深入了解如何在实际项目中应用 `fluent-mybatis`,以提升 MyBatis 框架的使用体验。...
总结来说,Mybatis Plus的环境搭建主要包括引入依赖、配置数据源和Mybatis Plus参数,以及编写测试类验证其功能。理解并熟练运用Mybatis Plus,可以显著提升你在Java Web开发中的数据库操作效率。
在描述中提到的"mybatis-generator-core-chinese-annotation-1.3.5-master.zip"是一个包含MBG中文注解版1.3.5版本的压缩包,旨在帮助开发者更方便地理解和使用这个工具。 MBG的核心功能在于根据数据库表自动生成...
本教程的压缩包文件包含了详细的步骤和示例代码,帮助你从头开始搭建一个SpringMVC+MyBatis的Web应用。你可以按照以下步骤实践: 1. 解压文件,查看项目结构。 2. 根据提供的配置文件模板,填充自己的数据库连接...
spring-boot-mybatis-annotation-mulidatasource:springboot+mybatis(注解版)多数据源最简解决方案 spring-boot-thymeleaf:simple spring boot thymeleaf demo spring-boot-jpa-thymeleaf-curd:spring boot +...
Spring 和 Mybatis 是两个在Java开发中非常流行的开源框架,Spring 作为一个全面的轻量级应用框架,提供了依赖注入、AOP(面向切面编程)等功能,而Mybatis则是一个优秀的持久层框架,专注于SQL映射和数据库操作。...
SpringBoot和MyBatis是两个在Java开发中广泛使用的开源框架。SpringBoot简化了Spring应用的初始搭建以及开发过程,而MyBatis...通过查看和学习这些代码,你可以更深入地理解如何在SpringBoot项目中整合和使用MyBatis。
以下是一些基本示例: 1. **查询**: ```java User user = userMapper.selectById(1L); List<User> users = userMapper.selectList(null); ``` 2. **插入**: ```java User user = new User(); // 设置属性... int ...
通过`mybatisPlusDemo`项目中的示例代码,开发者可以更深入地了解这一过程。 总之,Spring Boot结合MyBatis Plus不仅简化了数据库操作,还提供了自动更新数据表的能力,极大地提高了开发效率。通过正确配置和使用...