作为本教程的第一步(带有MyBatis 3的Spring MVC 3 CRUD示例),我们将定义一个MyBatis服务,该服务将帮助我们在数据库上执行CRUD操作。

我们有一个用于User的域类和一个用于将User信息存储在数据库中的数据库表。 在示例中,我们将使用xml配置模型来定义将执行CRUD操作的SQL命令。

我们的领域类

package com.raistudies.domain;import java.io.Serializable;public class User implements Serializable{private static final long serialVersionUID = 3647233284813657927L;private String id;private String name = null;private String standard = null;private String age;private String sex = null;//setter and getter have been omitted to make the code short@Overridepublic String toString() {return "User [name=" + name + ", standard=" + standard + ", age=" + age+ ", sex=" + sex + "]";}
}

我们的域类中有五个属性,它们称为User,它们必须为其提供数据库服务。

我们的数据库表

以下是我们的数据库表:

CREATE TABLE `user` (`id` varchar(36) NOT NULL,`name` varchar(45) DEFAULT NULL,`standard` varchar(45) DEFAULT NULL,`age` varchar(45) DEFAULT NULL,`sex` varchar(45) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

创建CRUD操作的界面

为了使用MyBatis 3定义CRUD数据库操作,我们必须指定将用于执行CRUD操作的方法。 以下是我们示例的界面:

package com.raistudies.persistence;import java.util.List;import com.raistudies.domain.User;public interface UserService {public void saveUser(User user);public void updateUser(User user);public void deleteUser(String id);public List<User> getAllUser();
}

我们这里有四种方法来执行创建,更新,删除和从数据库获取操作。

UserService接口的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.raistudies.persistence.UserService"><resultMap id="result" type="user"><result property="id" column="id"/><result property="name" column="name"/><result property="standard" column="standard"/><result property="age" column="age"/><result property="sex" column="sex"/></resultMap><select id="getAllUser" parameterType="int" resultMap="result">SELECT id,name,standard,age,sexFROM user;</select><insert id="saveUser" parameterType="user">INSERT INTO user (id,name,standard,age,sex)VALUE (#{id},#{name},#{standard},#{age},#{sex})</insert><update id="updateUser" parameterType="user">UPDATE userSETname = #{name},standard = #{standard},age = #{age},sex = #{sex}where id = #{id}</update><delete id="deleteUser" parameterType="int">DELETE FROM userWHERE id = #{id}</delete>
</mapper>

您会在这里看到很多新东西:

映射文件将包含元素<mapper />来定义服务的SQL语句。 在这里,属性“ 名称空间 ”定义了已为其定义此映射文件的接口。

<insert />标记定义该操作为插入类型。 “ id ”属性的值指定为其定义了SQL语句的函数名称。 这里是“ saveUser ”。 属性“ parameterType ”定义方法的参数是哪种类型。 我们在这里为User类使用了别名。 稍后将在MyBatis配置文件中配置别名。 然后,我们必须定义SQL语句。 #{id}定义将类User的属性“ id ”作为参数传递给SQL查询。

<resultMap />标记用于指定User类和用户表之间的映射。 <resultMap />的id是映射定义的唯一名称。 在此标签下,我们定义了不同的属性以及将哪个列绑定到哪个属性。

<select />标记用于指定选择SQL语句。 “ id ”属性的值指定为其定义了SQL语句的函数名称。

属性resultMap用于将SQL语句的返回类型定义为一个集合。

MyBatis 3配置文件

以下是我们的MyBatis配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><settings><!-- changes from the defaults --><setting name="lazyLoadingEnabled" value="false" /></settings><typeAliases><typeAlias type="com.raistudies.domain.User" alias="user"/></typeAliases>
</configuration>

您可以看到,我们尚未在此处定义一些非常重要的属性:

  1. 数据库连接属性。
  2. 与交易相关的属性。
  3. 并且也没有定义映射器配置。

MyBatis 3是一个非常强大的SQL映射框架,它使用用户定义的服务的代理实现自动生成数据库访问类。 如果您将MyBatis 3与Spring框架集成并使用这些代理实现,我们就会意识到这是真正的力量。 这将使我们的数据库工作减少80%。 在下面,我们将看到如何将MyBatis 3与Spring 3框架集成在一起。 以前,我们使用MyBatis 3为User类创建了CRUD数据库服务。现在,我们将使用MyBatis与Spring框架集成的数据服务进行集成。

使用的工具:

  • c3p0-0.9.1.2.jar –用于提供池化数据库连接。
  • mybatis-spring-1.0.0.jar –用于将MyBatis与Spring集成(由MyBatis团队提供)
  • Spring JDBC和Core库

要集成这两个框架,我们必须遵循以下步骤:

步骤1:将数据源定义为Spring bean
由于我们将使用c3po数据源提供程序,因此我们必须在Spring中定义数据源bean。 以下是配置代码段:

<!-- Declare a datasource that has pooling capabilities -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" p:driverClass="${app.jdbc.driverClassName}"
p:jdbcUrl="${app.jdbc.url}" p:user="${app.jdbc.username}" p:password="${app.jdbc.password}"
p:acquireIncrement="10" p:idleConnectionTestPeriod="60" p:maxPoolSize="100"
p:maxStatements="50" p:minPoolSize="10" />

在这里,我们创建了一个带有com.mchange.v2.c3p0.ComboPooledDataSource类的id dataSource的spring bean,它由c3p0库提供用于合并数据源。

我们在bean中设置了一些属性。 以下是在bean中定义的属性的描述:

  • driverClass :将用于连接数据库的驱动程序类。
  • jdbcUrl :jdbc定义数据库连接字符串的URL。
  • user :数据库用户的用户名。
  • password :数据库用户的密码。
  • acquisitionIncrement :在连接短缺的情况下,一次将创建多少个连接。
  • idleConnectionTestPeriod :连接断开多长时间后,如果不再使用它,它将被关闭。
  • maxPoolSize :可以创建的最大连接数。
  • maxStatements :连接上要执行的最大SQL语句数。
  • minPoolSize :要创建的最小连接数。

我们已经使用Spring EL定义了许多属性值,这些属性值将从属性文件中获取。

在Spring定义交易管理器

我们将使用Spring JDBC框架提供的用户事务管理器,为了定义事务级别,我们将使用注释。 以下是事务管理器的配置:

<!-- Declare a transaction manager -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" /><!-- Enable annotation style of managing transactions -->
<tx:annotation-driven transaction-manager="transactionManager" />

定义MyBatis SqlSessionFactory和MapperScanner

<!-- define the SqlSessionFactory, notice that configLocation is not needed when you use MapperFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="WEB-INF/mybatis/sqlmap-config.xml" />
</bean><!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="${MapperInterfacePackage}" />
</bean>

SqlSessionFactory bean将提供MyBatis的SessionFactory实例。 要配置SqlSessionFactory,我们需要定义两个属性。 首先,MyBatis将使用其创建连接数据库的数据源和MyBatis配置文件名来配置MyBatis的环境。

MapperScannerConfigurer用于发布定义为MyBatis的数据服务接口,以配置为Spring Bean。 我们只需要提供定义接口及其映射XML文件的程序包即可。 我们可以使用通用分隔符或分号指定多个软件包。 之后,我们将能够使用@Autowired批注获取UserService的实例。 我们不必实现该接口,因为MyBatis将为此提供代理实现。

Spring配置文件一起
这是我们的jdbc-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:property-placeholder location="/WEB-INF/jdbc.properties,/WEB-INF/mybatis/mybatis.properties" /><!-- Enable annotation style of managing transactions --><tx:annotation-driven transaction-manager="transactionManager" /><!-- Declare a datasource that has pooling capabilities --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close" p:driverClass="${app.jdbc.driverClassName}"p:jdbcUrl="${app.jdbc.url}" p:user="${app.jdbc.username}" p:password="${app.jdbc.password}"p:acquireIncrement="10" p:idleConnectionTestPeriod="60" p:maxPoolSize="100"p:maxStatements="50" p:minPoolSize="10" /><!-- Declare a transaction manager --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource" /><!-- define the SqlSessionFactory, notice that configLocation is not needed when you use MapperFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="WEB-INF/mybatis/sqlmap-config.xml" /></bean><!-- scan for mappers and let them be autowired --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="${MapperInterfacePackage}" /></bean></beans>

jdbc.properties文件

# database properties
app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc:mysql://localhost/mybatis-example
app.jdbc.username=root
app.jdbc.password=password

mybatis.properties文件

MapperInterfacePackage=com.raistudies.persistence

参考: 使用我们的JCG合作伙伴 使用MyBatis 3映射框架创建CRUD服务-第1部分和集成MyBatis 3和Spring框架-第2部分   Rai Studies博客上的Rahul Mondal。

翻译自: https://www.javacodegeeks.com/2012/02/mybatis-3-spring-integration-tutorial.html

MyBatis 3 – Spring集成教程相关推荐

  1. Mybatis与Spring集成(易百教程)

    整个Mybatis与Spring集成示例要完成的步骤如下: 1.示例功能描述 2.创建工程 3.数据库表结构及数据记录 4.实例对象 5.配置文件 6.测试执行,输出结果 1.示例功能描述 在本示例中 ...

  2. Mybatis和Spring集成 sessionFactory.openSession() 事务不生效问题

    问题描述 Mybatis和Spring集成,查阅官方文档,得知Spring总会为你处理事务. 官方文档连接:http://mybatis.org/spring/zh/transactions.html ...

  3. MongoDB与Spring集成教程

    MongoDB与Spring集成教程 依赖POM 这里我们用到的是spring-data中一个集成mongodb的项目,首先在maven中添加对它的依赖,这里我用的是1.0.0.M5版本 <!- ...

  4. Mybatis的Spring集成、Aop整合

    Mybatis的Spring集成.Aop整合pagehelper插件 Mybatis的Spring集成 导入pom依赖 <?xml version="1.0" encodin ...

  5. 深入浅出MyBatis:MyBatis与Spring集成及实用场景

    为什么80%的码农都做不了架构师?>>>    本系列是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记. 本篇是「深入浅出MyBatis」系列的最后一篇,主要介绍与Spri ...

  6. eai app_EAI的Spring集成教程

    eai app 课程大纲 Spring Integration是用于企业应用程序集成的开源框架. 这是一个轻量级的框架,建立在核心Spring框架之上. 它旨在支持开发事件驱动的体系结构和以消息为中心 ...

  7. EAI的Spring集成教程

    课程大纲 Spring Integration是用于企业应用程序集成的开源框架. 这是一个轻量级的框架,建立在核心Spring框架之上. 它旨在支持开发事件驱动的体系结构和以消息为中心的体系结构典型的 ...

  8. Mybatis与Spring集成原理

    原生的Mybatis是怎么使用的? 只列举关键代码 public static void main(String[] args) throws Exception {Reader reader=Res ...

  9. Spring集成MyBatis

    将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSe ...

最新文章

  1. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的连接恢复和命令拦截...
  2. J .U.C 简介-Lock
  3. SQL 查询总是先执行SELECT语句吗?
  4. Mysql数据库开发的36条原则
  5. 东南大学计算机学院张敏灵,东南大学张敏灵教授来我校作学术报告
  6. 干货 | 数据分析的 7 个关键步骤是什么?
  7. 记录kylin成功启动,访问页面404问题
  8. Atitit.兼具兼容性和扩展性的配置方案attilax总结
  9. 【NOIP2002】【codevs1010】过河卒
  10. hdu 4301 Divide Chocolate 动态规划 递推 多校联合赛第二题
  11. 使用bootbox.js(二级务必提交书面和数字到数字中国)
  12. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ
  13. ps 学习总结-卸载不了
  14. 信号添加百分比噪声的原理和方法
  15. Apple 开发者账户类型
  16. ios苹果手机 uniapp长按识别二维码图片白色背景问题
  17. RESTful设计风格
  18. 查看电脑重启日志_win10中查看开关机时间及查看admin的RID的方法
  19. 原型工具——墨刀以及Axure的比较
  20. 使用自己的ISO文件制作PE

热门文章

  1. 文本替换sed+字段处理cut,join+awk重新编排字段
  2. 光流法测试代码_高效的企业测试-工作流和代码质量(4/6)
  3. 捡对象引流脚本 内容_对象和索引流
  4. JAR文件句柄:烦恼后清理!
  5. java陷阱常见面试题_Java常见陷阱
  6. Optional.isEmpty()在JDK 11 EA构建中可用
  7. weblogic jmx_在WebLogic Server上驯服JMX
  8. jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分
  9. gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索
  10. camel eip_Apache Camel教程– EIP,路由,组件,测试和其他概念的简介