`
frank-liu
  • 浏览: 1682115 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mybatis学习总结:annotation示例改进

 
阅读更多

简介

  在前一篇文章里我们已经讨论了一个简单的基于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的复用上显得表达力有点不足。这两种方式各有自己的优缺点,可以针对各自的情况来选择。

 

参考材料

java persistence with mybatis 3

分享到:
评论

相关推荐

    mybatis学习总结:annotation与xml结合示例

    本篇文章将聚焦于MyBatis中的注解(Annotation)与XML配置的结合使用,旨在帮助开发者更深入地理解这一关键特性。 首先,MyBatis允许我们使用注解来简化Mapper接口的定义,无需编写XML映射文件。例如,我们可以在...

    MyBatis-CRUD-Annotation.zip

    在"MyBatis-CRUD-Annotation.zip"这个压缩包中,很显然,它包含了一个关于如何使用MyBatis的注解进行CRUD(创建、读取、更新、删除)操作的示例或教程。以下是对MyBatis中注解使用及相关知识点的详细解释: 1. **...

    Spring MVC整合Mybatis

    **Spring MVC 整合 Mybatis 知识点详解** 在现代Java Web开发中,Spring MVC 和 Mybatis 是两个非常流行的框架。Spring MVC 提供了强大的MVC架构支持,而Mybatis则是一个轻量级的持久层框架,专注于SQL映射。将两者...

    SpringBoot整合Mybatis示例源码

    SpringBoot和Mybatis是两个非常流行的Java开发框架,SpringBoot简化了Spring的配置,而Mybatis则是一个轻量级的持久层框架,专注于SQL映射和接口操作。本示例源码将展示如何将这两个框架整合在一起,创建一个高效、...

    Spring boot 示例 官方 Demo

    spring-boot-mybatis-annotation-mulidatasource:springboot+mybatis(注解版)多数据源最简解决方案 spring-boot-thymeleaf:simple spring boot thymeleaf demo spring-boot-jpa-thymeleaf-curd:spring boot + ...

    springboot+mybatis-plus集成

    # application.properties 示例 mybatis-plus.mapper-locations=classpath:mapper/*.xml mybatis-plus.global-config.db-config.id-type=auto ``` 3. **创建实体类**:为数据库表创建对应的Java实体类,这些类通常...

    springBoot中mybatis Plus示例

    在本文中,我们将深入探讨如何在SpringBoot应用中集成并使用MyBatis Plus。MyBatis Plus(简称MP)...通过阅读和理解这个示例,你可以更好地掌握SpringBoot与MyBatis Plus的集成方法,以及如何在项目中有效地使用它们。

    spring+mybatis配置

    在提供的"day03_ms"压缩包文件中,可能包含的是关于Spring和MyBatis配置的具体示例代码,如XML配置文件、Mapper接口、映射文件等。通过分析这些文件,可以加深对Spring和MyBatis集成的理解,以及学习如何在实际项目...

    [课堂课件讲解]Java微服务实践-Spring Boot MyBatis.pptx

    Java微服务实践-Spring Boot ...MyBatis 实例讲解提供了 MyBatis 的实践示例,帮助开发者更好地理解和使用 MyBatis。 MyBatis 问答互动 MyBatis 问答互动提供了 MyBatis 相关的问题和答案,帮助开发者快速解决问题。

    springmvc mybatis集成配置示例

    以下是一个基本的配置示例: ```xml &lt;!-- 数据源配置 --&gt; &lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt; &lt;property name="configLocation" value="classpath:...

    fluent-mybatis, mybatis语法增强框架

    在 `fluent-mybatis-master` 压缩包中,包含了项目的源码、示例、文档以及构建脚本等资源,开发者可以通过研究这些内容,深入了解如何在实际项目中应用 `fluent-mybatis`,以提升 MyBatis 框架的使用体验。...

    Mybatis Plus环境搭建项目代码

    总结来说,Mybatis Plus的环境搭建主要包括引入依赖、配置数据源和Mybatis Plus参数,以及编写测试类验证其功能。理解并熟练运用Mybatis Plus,可以显著提升你在Java Web开发中的数据库操作效率。

    mybatis-generator-core-chinese-annotation-1.3.5-master.zip

    在描述中提到的"mybatis-generator-core-chinese-annotation-1.3.5-master.zip"是一个包含MBG中文注解版1.3.5版本的压缩包,旨在帮助开发者更方便地理解和使用这个工具。 MBG的核心功能在于根据数据库表自动生成...

    SpringMVC-MyBatis教程

    本教程的压缩包文件包含了详细的步骤和示例代码,帮助你从头开始搭建一个SpringMVC+MyBatis的Web应用。你可以按照以下步骤实践: 1. 解压文件,查看项目结构。 2. 根据提供的配置文件模板,填充自己的数据库连接...

    Spring Boot Examples

    spring-boot-mybatis-annotation-mulidatasource:springboot+mybatis(注解版)多数据源最简解决方案 spring-boot-thymeleaf:simple spring boot thymeleaf demo spring-boot-jpa-thymeleaf-curd:spring boot +...

    Spring-Mybatis整合

    Spring 和 Mybatis 是两个在Java开发中非常流行的开源框架,Spring 作为一个全面的轻量级应用框架,提供了依赖注入、AOP(面向切面编程)等功能,而Mybatis则是一个优秀的持久层框架,专注于SQL映射和数据库操作。...

    springboot mybatis

    SpringBoot和MyBatis是两个在Java开发中广泛使用的开源框架。SpringBoot简化了Spring应用的初始搭建以及开发过程,而MyBatis...通过查看和学习这些代码,你可以更深入地理解如何在SpringBoot项目中整合和使用MyBatis。

    SpringBoot集成MyBatis-Plus

    以下是一些基本示例: 1. **查询**: ```java User user = userMapper.selectById(1L); List&lt;User&gt; users = userMapper.selectList(null); ``` 2. **插入**: ```java User user = new User(); // 设置属性... int ...

    SpringBoot使用MyBatis Plus + 自动更新数据表

    通过`mybatisPlusDemo`项目中的示例代码,开发者可以更深入地了解这一过程。 总之,Spring Boot结合MyBatis Plus不仅简化了数据库操作,还提供了自动更新数据表的能力,极大地提高了开发效率。通过正确配置和使用...

Global site tag (gtag.js) - Google Analytics