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的架构解析,可以参阅这篇文章。
- Java Server 理解与实践 —— 集成Mybatis到Spring项目
- Java Server理解与实践 —— 集成Spring Web Security
- 深入理解MyBatis(八)—Spring和MyBatis集成
- Java Server 理解与实践 —— 从Servlet开始
- MyBatis与Spring集成
- MyBatis与Spring集成
- MyBatis与Spring集成
- Mybatis与Spring集成
- Mybatis-与Spring集成
- Spring与Mybatis集成
- spring集成Mybatis3【由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”】
- MyBatis-Spring集成的理解
- Spring+MyBatis实践——登录与权限控制
- Java Server 理解与实践 —— Servlet Context,Filter以及Listener
- 用spring 集成mybatis的最佳实践
- Spring Boot实践-2(集成Mybatis)
- 介绍MyBatis与Spring集成
- 深入浅出Mybatis-与Spring集成
- 什么是面向对象?
- BZOJ1816: [Cqoi2010]扑克牌
- 1044. 火星数字(20) PAT
- 输入输出重定向
- 1
- Java Server 理解与实践 —— 集成Mybatis到Spring项目
- 从jQuery、Bootstrap到React、Semantic的体验
- leetcode-82. Remove Duplicates from Sorted List II(删除有序列表中所有重复元素一个不留)
- NETCTOSS项目(二)
- Windows学习(006)--对话框交互
- (部分原创)unity项目开发中VR工程的优化(下)
- idea 自定义方法注释模板(百分百管用)
- Mybatis动态拼接sql
- vue路由+子路由+具名路由demo实例(结合animate.css动画)