Java Server 理解与实践 —— 集成Mybatis到Spring项目

来源:互联网 发布:用友nc mac客户端下载 编辑:程序博客网 时间:2024/06/05 04:29

  • 引言
  • Maven配置
  • Bean配置
  • 类使用
  • 小结

引言

既然是Java Server,当然离不开与数据库交互。而Java与数据库交互,又永远绕不开一个话题—— ORM。

对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换

简单点来说,就是我们要将数据库里面的一个个字段,转化成为Java里面的对象的一个个属性,当然我们可以通过jdbc直接,然后通过读取结果集,调用对象的setter方法来完成这个过程。但是,框架的存在,就是为了减少这些繁杂而重复的工作。Mybatis正是这样一个ORM框架。

在介绍Mybatis框架之前,再简单说一下为什么我会选择这个框架。

  • 简单,Mybatis框架的代码库大小只有1.5M,对比于JPA动辄7-8M的代码库,要轻巧很多,轻巧意味着简单,意味着能更迅速更深刻地了解这个开源框架。

  • 直接,直接通过配置sql的方式设定CURD语句,可以最充分地利用数据库的索引,提升查询性能。JPA虽然省去了手写SQL,但是却难以生成最佳索引的查询语句。

  • 可扩展。支持编写插件。

那么,接下来就开始Mybatis的介绍吧。这系列的文章将会分成几部分,首先,我们从如何使用开始。我们将会基于之前文章中的Java Server项目继续。该项目也已经上传到github上。

关于Mybatis的使用例子,我们可以从官方文档中迅速地学习,上手,因此关于mapper等mybatis基础概念,在这里就不做过多的阐述了。下面主要是如何将Mybatis集成到Spring项目中。

Maven配置

要将Mybatis集成到Spring项目中,我们需要增加以下这几个依赖。

        <!--spring jdbc 用于管理Spring的事务-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>4.2.4.RELEASE</version>        </dependency>        <!-- mybatis 这里采用3.4.1的版本 -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.4.1</version>        </dependency>        <!-- mysql connector 与数据库建立连接 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.6</version>        </dependency>        <!-- dbcp2 数据库连接池管理 -->        <dependency>            <groupId>org.apache.commons</groupId>            <artifactId>commons-dbcp2</artifactId>            <version>2.1.1</version>        </dependency>        <!-- mybatis 与Spring的集成工具 必须采用1.3.1的版本 -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>1.3.1</version>        </dependency>

上面的配置都是一些基本配置,包括连接数据库,连接池管理等等。但必须注意但是,mybatis-spring的版本与mybatis的版本必须使用笔者的版本或者更高,否则会因为两者之间版本不匹配而引发一些问题。

Bean配置

在依赖添加完成之后,我们就可以开始增加我们的Bean配置了。

    <!--将配置文件写在配置文件中,读取配置文件 -->    <bean id="propertyConfigurer"          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="locations">            <list>                <value>classpath:/META-INF/jdbc.properties</value>            </list>        </property>    </bean>    <!--配置dataSource -->    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"          destroy-method="close">        <property name="driverClassName" value="${jdbc.driverClassName}" />        <property name="url" value="${jdbc.url}" />        <property name="username" value="${jdbc.username}" />        <property name="password" value="${jdbc.password}" />    </bean>    <!-- 配置sqlSessionFactory -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" />    </bean>    <!-- 启用mybatis的扫描功能 -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="mapper" />        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />    </bean>

在这里,因为我们暂时不使用spring的事务管理,因此将事务管理交给mybatis-spring中默认的SpringManagedTransaction去管理。

启用扫描功能是为了尽量简化项目的配置,配置了MapperScannerConfigurer之后,我们就可以直接通过注解来定义Mybatis的mapper而不需要再写额外的xml文件了。

类使用

首先是Mapper类。

public interface UserMapper {    @Select("Select account from user where id = #{id}")    String selectAccountById(@Param("id") int id);}

这里面有两个需要注意的地方。

  • 使用#{param}使用参数传入的形式。
  • 使用@Param声明方法参数与sql变量中的绑定关系。

这里的sql是简单的select单个变量并且直接返回,我们也可以返回一个对象,只要在对象中有相应的属性就可以了。另外mybatis也支持在select语句中使用script,比如判断,比如循环。

然后是Service类。

@Servicepublic class UserService {    private UserMapper userMapper;    @Autowired    public UserService(UserMapper userMapper) {        this.userMapper = userMapper;    }    public String getUserAccountById(Integer id) {        return userMapper.selectAccountById(id);    }}

启用了MapperScan之后,mapper会初始化成为bean,因此可以直接使用autowired进行组装。

最后,在Controller中进行调用成为api暴露出去就可以通过postMan等工具调用了。

@RestController@RequestMapping(value="/noAuth")public class NoAuthController {    private UserService userSrv;    @Autowired    public NoAuthController(UserService userSrv) {        this.userSrv = userSrv;    }    @RequestMapping(value="/test/{id}")    public @ResponseBody String test(@PathVariable("id") Integer id) {        return userSrv.getUserAccountById(id);    }}

以上,就是一个最简单的Mybatis与集成的最简单例子。

小结

Mybatis是一个简单的ORM框架,使用者自己定义sql,定义返回的Java对象,然后它进行数据库查询,将查询结果映射到Java对象中。它最大的特色就是简洁,简单的事物管理,简单的缓存管理,简单的对象映射以及语句解析。

这篇文章主要讲述了如何将Mybatis集成到Spring项目中,关于Mybatis的深入介绍,会在接下来的文章中完成。

关于Mybatis的架构解析,可以参阅这篇文章。

原创粉丝点击