MyBatis 3 – Spring集成教程

作为本教程的第一步(带有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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux入门笔记——cat、sort、uniq、wc、head、tail、tee

cat &#xff0d; 连接文件 cat 命令读取一个或多个文件&#xff0c;然后复制它们到标准输出。你可以使用 cat 来显示 文件而没有分页cat 经常被用来显示简短的文本文件。案例 意义 cat ls-output.txt 读取文件标准输出 cat movie.mpeg.0* > movie.mpeg 连接文件&#x…

fir.im Log Guru 正式开源,快速找到 iOS 应用无法安装的原因

很开心的宣布 Log Guru 正式开源&#xff01; Log Guru&#xff0c;是 fir.im 开发团队创造的小轮子&#xff0c;用在 Mac 电脑上的日志获取&#xff0c;Github 地址&#xff1a;FIRHQ/LogGuru. Log Guru 使用方法 当有测试者反馈应用装不上的时候&#xff0c;将其测试设备连接…

python求解三元一次方程_北师大版八上数学5.2 求解二元一次方程组 知识点微课精讲...

知识点总结代入消元法代入消元法的实质是将二元一次方程组中的某一个方程进行未知数的分离&#xff0c;即将该方程进行变换&#xff0c;完整分离出一个独立的未知数&#xff0c;而这个未知数将用含有另一个未知数的式子来表示。设某二元一次方程组为&#xff1a;将第(1)式进行变…

Java 7:完整的invokedynamic示例

我当前的Java 7系列中的另一个博客条目。 这次&#xff0c;它处理的是invokedynamic&#xff0c;这是JVM上用于方法调用的新字节码指令。 invokedynamic指令允许在呼叫站点和呼叫接收者之间进行动态链接。 这意味着您可以将正在执行方法调用的类链接到在运行时正在接收调用的类…

VC6兼容性及打开文件崩溃问题解决

VC6虽然老&#xff0c;但是一些工程还非得用它打开&#xff0c;没办法…… 今天偶然用到&#xff0c;因为新装了系统&#xff0c;之前的问题又要重新解决一遍 在这记录下解决过程&#xff0c;方便以后查阅&#xff1a; 一.兼容问题&#xff1a; XP以上windows系统打开VC6时可能…

Linux入门笔记——echo

echo Display a line of text(显示一行文本)这个命令的作用相当简单明了。传递到 echo 命令的任一个参数都会在&#xff08;屏幕上&#xff09;显示出来。 小插曲&#xff1a; 每当你输入一个命令&#xff0c;然后按下 enter 键后&#xff0c;bash 会在执行你的命令之前对输入 …

10.25模拟 三角形

1. 三角形(trokuti.cpp/c/pas)? 【 问题描述 】? 平面上有N条直线&#xff0c;用方程A i x B i y C i0表示。这些直线没有三线共点的。现在要你计算出用这些直线可以构造出多少三角形&#xff1f;【 输入格式 】? 第1行&#xff1a;一个整数N(1 ≤ N≤ 300000)。? 下面N行…

dataframe 空值替换为0_Python数据分析:Pandas之DataFrame

内容目录 DataFrame简介DataFrame创建方式DataFrame索引和切片DataFrame属性DataFrame级联与合并DataFrame基本操作DataFrame分组聚合操作DataFrame数据透视与交叉表1 DataFrame简介 我们在上次课中讲到了Pandas的Series结构,还没看的点这里 ailsa:python数据分析:Pandas之S…

具有NetBeans,WebLogic 12c,JPA和MySQL数据源的Arquillian

您可能已经关注了我的文章&#xff0c;其中涉及使用嵌入式GlassFish测试更复杂的场景&#xff08; 第I部分/第II部分 &#xff09;。 我要做的下一步是使此设置与最新的WebLogic 12c一起使用。 入门 按照我的前两个帖子的入门部分中的步骤进行操作。 要使此工作正常&#xff…

SQL中 char varchar和nvarchar的区别

转至&#xff1a;http://www.cnblogs.com/carekee/articles/2094676.html char char是定长的&#xff0c;也就是当你输入的字符小于你指定的数目时&#xff0c;char(8)&#xff0c;你输入的字符小于8时&#xff0c;它会再后面补空值。当你输入的字符大于指定的数时&#xff…

Linux入门笔记——less

less命令是一个用来浏览文本文件的程序,是早期 Unix 程序 more 的改进版,属于”页面调度器”程序类&#xff0c;该程序通过页方式在一页中轻松地文本文档。然而 more 程序只能向前分页浏览&#xff0c;而 less 程序允许前后分页浏览&#xff0c;它还有很多其它的特性。 less 命…

lfu算法实现c语言_哈希查找算法(C语言实现)

上一节介绍了有关哈希表及其构造过程的相关知识&#xff0c;本节将介绍如何利用哈希表实现查找操作。在哈希表中进行查找的操作同哈希表的构建过程类似&#xff0c;其具体实现思路为&#xff1a;对于给定的关键字 K&#xff0c;将其带入哈希函数中&#xff0c;求得与该关键字对…

现代化Java代码的七个NetBeans提示

在“ 七个不可或缺的NetBeans Java提示”一文中 &#xff0c;我谈到了一般使用NetBeans提示的问题&#xff0c;然后重点介绍了七个提示。 接下来列出了该帖子中强调的七个提示&#xff1a; 可疑方法调用 使用或&#xff01; AND字符串构造函数比较字符串 构造函数中的可重写方…

AngularJS $http service

原文链接&#xff1a;http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/angularjs-http-service/ 1.通常用法&#xff1a; $http服务是一个只有一个参数-配置对象的函数&#xff0c;用于产生一个http请求并返回一个promise对象。 $http({ method: GET, url: /someUr…

Erwin 生成 mysql 带注释(comment )的脚本

Erwin设计数据库非常方便&#xff0c;有逻辑视图和物理视图&#xff0c;可以很方便的生成数据库文档和SQL 脚本。在使用过程中唯一不爽的地方是脚本不能生成comment。在百度无数次无法解决下&#xff0c;又翻墙谷歌&#xff0c;在一个日本网站找到了解决办法&#xff0c;不敢独…

YY语音01

1、YYSetup-8.2.0.1-zh-CN.exe (http://waiwai.duowan.com/)(http://www.yy.com/download) C:\Program Files (x86)\duowan\yy 1.1、YY游戏大厅&#xff0c;指向的安目录&#xff1a;“C:\Users\33\AppData\Roaming\duowan\yygame\ver\0\1.3.1.13\” 2、 3、 4、 5、转载于:htt…

手机屏幕宽高像素计算_2020年的智能手机拍照新设计,就全看下半年了

此前我们三易生活在总结2019年智能手机影像设计的变化时曾经提到&#xff0c;智能手机上的大底与大像素设计几乎是花了一整年的时间&#xff0c;把自己从单纯的噱头&#xff0c;逐步改进成了能够确实提高拍照画质的业界主流技术。站在现在的视角来看&#xff0c;2019年这阵“高…

带有Jersey和Spring的RESTful Web应用程序

几个月前&#xff0c;我们的任务是创建一个API&#xff0c;以向第三方开发人员公开我们系统中的某些功能。 我们选择将这些功能公开为一系列REST Web服务。 我开始使用Jersey &#xff0c;它是JSR 311 &#xff08;用于Restful Services的Java API&#xff09;的参考实现&#…

关于更新pip的心得

如果pip install --upgrade pip 删除了自己&#xff0c;但是无法安装新的自己。 那么下载最新的pip,解压 1、在命令窗口输入 python(前提条件已经在系统路径) setup.py(pip 包里的脚本) install 即可 2、注销一下&#xff0c;让pip在系统路径生效 3、打开cmd&#xff0c;输…

Linux/Unix/Mac 系统GIT密码存储

新建一个 ~/.netrc 文件&#xff0c; 将 git 服务器&#xff0c; 用户名以及密码记录在这个文件&#xff0c; 如下所示&#xff1a; machine your-git-server login your-username password your-password普通用户的 git-server 填 github.com 就可以了. 如果有多个 server 就…