1. 环境

mybatis-3.2版本,jdk1.6版本,Oracle数据库,spring3.2版本

2. 功能

同MyBatis3入门三(增加、删除、修改、查询,自增长,允许空值,封装Mapper),目标是把上一篇实现的功能,结合spring实现。

3. spring环境准备

1). 首先需要下载mybatis-spring-1.1.1.jar

2). Spring的XML配置文件中加入:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:config/mybatis-module.xml" /></bean>

3). 假设已经有一个写好的数据映射器类(ProductMapper.java及ProductMapper.xml)

4). Spring的XML配置文件中加入:

    <bean id="productMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.clzhang.sample.struts2.mapper.ProductMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>

5). 配置好后,在业务类中只需要:

    public class FooServiceImpl implements FooService {private ProductMapper productMapper;public void setProductMapper(ProductMapper productMapper) {this.productMapper = productMapper;}public void doBusinessStuff(int prodId) {ProductBean entity = productMapper.getProduct(prodId);......}}

4. 环境准备

4.1 下载mybatis-3.2,需要引用其中的若干包;下载mybatis-spring-1.1.1.jar,略。

参考:MyBatis3入门级示范一(查询,插入)

4.2 项目的结构

4.3 假定数据库已经创建,表结构也已经创建,并且有测试数据

参考:MyBatis3入门三(增加、删除、修改、查询,自增长,允许空值,封装Mapper)

5. 具体步骤

5.1 创建entity类

package com.clzhang.sample.struts2.mapper.entity;import java.sql.Timestamp;/*** 数据库实体类,可以借助工具自动生成此类;* 也可以自己写一个程序从数据库读取数据,然后生成此类。* @author acer**/
public class ProductBean {private int prodId;private String prodSerial;private String prodName;private String categoryname;private String prodSpec;private double prodPrice;private String prodDesc;private String prodImage;private int isNew;private int isRecommend;private int isShow;private String username;private Timestamp handletime;private String prodThumbnail;public int getProdId() {return prodId;}public void setProdId(int prodId) {this.prodId = prodId;}public String getProdSerial() {return prodSerial;}public void setProdSerial(String prodSerial) {this.prodSerial = prodSerial;}public String getProdName() {return prodName;}public void setProdName(String prodName) {this.prodName = prodName;}public String getCategoryname() {return categoryname;}public void setCategoryname(String categoryname) {this.categoryname = categoryname;}public String getProdSpec() {return prodSpec;}public void setProdSpec(String prodSpec) {this.prodSpec = prodSpec;}public double getProdPrice() {return prodPrice;}public void setProdPrice(double prodPrice) {this.prodPrice = prodPrice;}public String getProdDesc() {return prodDesc;}public void setProdDesc(String prodDesc) {this.prodDesc = prodDesc;}public String getProdImage() {return prodImage;}public void setProdImage(String prodImage) {this.prodImage = prodImage;}public int getIsNew() {return isNew;}public void setIsNew(int isNew) {this.isNew = isNew;}public int getIsRecommend() {return isRecommend;}public void setIsRecommend(int isRecommend) {this.isRecommend = isRecommend;}public int getIsShow() {return isShow;}public void setIsShow(int isShow) {this.isShow = isShow;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Timestamp getHandletime() {return handletime;}public void setHandletime(Timestamp handletime) {this.handletime = handletime;}public String getProdThumbnail() {return prodThumbnail;}public void setProdThumbnail(String prodThumbnail) {this.prodThumbnail = prodThumbnail;}}

5.2 创建mapper接口类

package com.clzhang.sample.struts2.mapper;import java.util.*;import com.clzhang.sample.struts2.mapper.entity.ProductBean;/*** 一个简单的CRUD操作示范类,接口* @author Administrator**/
public interface ProductMapper {public void insertProduct(ProductBean product);    public void updateProduct(ProductBean product);    public void deleteProduct(int prodId); public ProductBean getProduct(int prodId); public List<ProductBean> getProdByCategory(String categoryName);
}

5.3 创建jdbc.properties文件,位置于resources/config目录

#main database settings
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.username=mytest
jdbc.password=test001

5.4 创建mybatis-module.xml配置文件,位置于resources/config目录

<?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><!--这些是极其重要的调整, 它们会修改 MyBatis 在运行时的行为方式。--><setting name="cacheEnabled" value="false"/><setting name="useGeneratedKeys" value="false"/><setting name="defaultExecutorType" value="SIMPLE"/><setting name="jdbcTypeForNull" value="OTHER"/></settings><typeAliases> <!--类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关, 只用来减少类完全限定名的多余部分。You can also specify a package where MyBatis will search for beans. For example<typeAliases><package name="domain.blog"/></typeAliases>......--><typeAlias alias="Product" type="com.clzhang.sample.struts2.mapper.entity.ProductBean"/> </typeAliases> <mappers> <mapper resource="com/clzhang/sample/struts2/mapper/ProductMapper.xml" /><!--其它装载方式<mapper url="file:///var/mappers/AuthorMapper.xml"/><mapper class="org.mybatis.builder.BlogMapper"/>--></mappers>
</configuration>

5.5 创建ProductMapper.xml配置文件,位置于:resources\com\clzhang\sample\struts2\mapper\

<?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"><!--
1.namespace的值可以设置得非常短比如:ProductMapper,如果项目不大的情况下,可以考虑这样使用。
好处是在Java代码如下调用即可:session.insert("ProductMapper.insertProduct", product);
2.如果项目非常大的话(或者是与Spring整合),那么还是建议使用长文件名做标识。
-->
<mapper namespace="com.clzhang.sample.struts2.mapper.ProductMapper"><!--默认情况下是没有开启缓存的,下条代码是开启二级缓存的,作用如下:1.•映射语句文件中的所有 select 语句将会被缓存。2.•映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。3.•缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。......--><cache /><!-- 用来定义可重用的SQL代码段 --><sql id="selectProdSQL">PRODID,PRODSERIAL,PRODNAME,CATEGORYNAME,PRODSPEC,PRODPRICE,PRODDESC,PRODIMAGE,ISNEW,ISRECOMMEND,ISSHOW,USERNAME,HANDLETIME,PRODTHUMBNAIL</sql><!--以单个对象方式返回--><select id="getProduct" resultType="Product" parameterType="int">select <include refid="selectProdSQL"/>FROM PRODUCTWHERE PRODID = #{prodId}</select><resultMap type="Product" id="prodByCategoryMap">  <id property="prodId" column="prodId"/>  <!--有需要做数据库到实体类名称转换的,可以写在这里--><!--<result property="objname" column="dbname"/>--></resultMap>  <!--以List方式返回多个结果--><select id="getProdByCategory" resultMap="prodByCategoryMap" parameterType="string">select <include refid="selectProdSQL"/>FROM PRODUCTWHERE CATEGORYNAME = #{categoryName}</select><!--Oracle的实现自增长主键的方式--><!--对于数据库中允许为空的字段,需要在这里指定字段类型,因为MyBatis不知道你传入的 null 参数对应的 jdbc 类型是什么;如何没有指定,则需要在插入数据时全部字段都要设置值,哪怕是空值!--><insert id="insertProduct" parameterType="Product"><selectKey keyProperty="prodId" resultType="int" order="BEFORE">select SEQ_PRODUCT.nextval from DUAL</selectKey>INSERT INTO PRODUCT (PRODID,PRODSERIAL,PRODNAME,CATEGORYNAME,PRODSPEC,PRODPRICE,PRODDESC,PRODIMAGE,ISNEW,ISRECOMMEND,ISSHOW,USERNAME,HANDLETIME,PRODTHUMBNAIL)VALUES(#{prodId}, #{prodSerial,jdbcType=VARCHAR}, #{prodName}, #{categoryname,jdbcType=VARCHAR}, #{prodSpec,jdbcType=VARCHAR}, #{prodPrice,jdbcType=DOUBLE}, #{prodDesc,jdbcType=VARCHAR}, #{prodImage,jdbcType=VARCHAR}, #{isNew}, #{isRecommend}, #{isShow}, #{username}, #{handletime,jdbcType=DATE}, #{prodThumbnail,jdbcType=VARCHAR})</insert><update id="updateProduct" parameterType="Product">update PRODUCT setPRODSERIAL = #{prodSerial,jdbcType=VARCHAR},PRODNAME = #{prodName},CATEGORYNAME = #{categoryname,jdbcType=VARCHAR},PRODSPEC = #{prodSpec,jdbcType=VARCHAR},PRODPRICE = #{prodPrice,jdbcType=DOUBLE},PRODDESC = #{prodDesc,jdbcType=VARCHAR},PRODIMAGE = #{prodImage,jdbcType=VARCHAR},ISNEW = #{isNew},ISRECOMMEND = #{isRecommend},ISSHOW = #{isShow},USERNAME = #{username},HANDLETIME = #{handletime,jdbcType=DATE},PRODTHUMBNAIL = #{prodThumbnail,jdbcType=VARCHAR}where PRODID = #{prodId}</update><delete id="deleteProduct" parameterType="int">delete from PRODUCT where PRODID = #{prodId}</delete>
</mapper>

5.6 创建applicationContext-common.xml配置文件,位置于resources/config目录

<?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:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"default-autowire="byName" default-lazy-init="true"><!-- 属性文件读入 --><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:config/jdbc.properties</value></list></property></bean><!-- 配置数据源 --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><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" /><property name="configLocation" value="classpath:config/mybatis-module.xml" /></bean><!-- 配置sqlSession,待用;注:SqlSessionTemplate实现了SqlSession,且是线程安全的。第二个参数含义是允许你做批量。 --><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory" /><!--<constructor-arg index="1" value="BATCH" />--></bean><!-- 开启Spring事务管理的标准配置 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 基于注解的事务,待用 --><tx:annotation-driven transaction-manager="txManager" /></beans>

5.7 创建applicationContext-service.xml配置文件,位置于resources/config目录

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><bean id="productMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.clzhang.sample.struts2.mapper.ProductMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean></beans>

5.8 创建测试类到了这里,代码就变得非常简单了

package com.clzhang.sample.struts2.test;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.junit.Test;
import org.junit.runner.RunWith;import com.clzhang.sample.struts2.mapper.entity.ProductBean;
import com.clzhang.sample.struts2.mapper.ProductMapper;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:config/applicationContext-*.xml")
public class MyBatisTest3 {@Autowiredprivate ProductMapper productMapper;@Testpublic void testInsert() {ProductBean entity = new ProductBean();// 注意:因数的ProductMapper.xml中已经设置了字段空值时如果处理,所以此处不一定要设置实体的所有属性。entity.setProdName("相册");entity.setIsNew(0);entity.setIsRecommend(0);entity.setIsShow(0);entity.setUsername("admin");productMapper.insertProduct(entity);System.out.println("新加的实体主键:" + entity.getProdId());}@Testpublic void testUpdate() {int prodId = 63;ProductBean entity = productMapper.getProduct(prodId);entity.setProdName("新产品");productMapper.updateProduct(entity);}@Testpublic void testDelete() {int prodId = 64;productMapper.deleteProduct(prodId);}@Testpublic void getProduct() {int prodId = 65;ProductBean entity = productMapper.getProduct(prodId);if(entity != null){System.out.println(entity.getProdName());}else{System.out.println("prodId不存在!" + prodId);}System.out.println("-------------------------------");}@Testpublic void getProdByCategoryName() {List<ProductBean> list = productMapper.getProdByCategory("套件");for(ProductBean entity: list) {System.out.println(entity.getProdName());}System.out.println("-------------------------------");}
}

输出结果:

新加的实体主键:68
相册
-------------------------------
图门
美好心情
123
大雅风尚
-------------------------------

转载于:https://www.cnblogs.com/nayitian/archive/2013/03/13/2958348.html

MyBatis3与Spring3的整合配置(初级篇)相关推荐

  1. Spring+Shiro+CAS整合配置笔记

    一.前言 Apache Shiro与Spring Security一样是Java的一个安全框架.那为什么与Spring整合却用Shiro?不要问为什么,任性!开个玩笑:D 其实我个人是认为Spring ...

  2. mybatis3.2.3+spring整合

    mybatis3.2.3+spring整合(附带源码) mybatis3.2.3整合spring其实就那么几步,网上很多文章大篇幅地将原理,很多时候把人给弄糊涂了,我的建议是"先学会怎么用, ...

  3. eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

    Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...

  4. ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL

    ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流 ...

  5. Redis从入门到精通:初级篇(转)

    原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...

  6. cytoscape.js初级篇

    cytoscape.js初级篇 系列文章 前言 cytoscape依赖引用 cytoscape扩展依赖引用 创建Cytoscape组件 创建Cytoscape模板容器 创建Cytoscape实例对象 ...

  7. apache tomcat php mysql 配置_Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结...

    Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结 1.作者:moonsbird 题目:Windows下Apache+Tomcat+MySQL+jsp+ph ...

  8. 视频教程-微信小程序开发【初级篇 / 附案例】-微信开发

    微信小程序开发[初级篇 / 附案例] 北风网讲师!瓢城Web俱乐部创始人,教学总监! 李炎恢 ¥129.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程, ...

  9. Java工程师学习指南(初级篇)

    Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  10. Nginx编译配置脚本篇(8)- 模块配置脚本auto/modules

    Nginx编译配置脚本篇(8)- 模块配置脚本auto/modules 1.相关文章 2.前言 3.auto/module脚本文件详解 3.1.设置ngx_var的值 3.2.当ngx_module_ ...

最新文章

  1. Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
  2. Linux IPC / 分类
  3. 创建Server 2012 VHDX虚拟磁盘模板
  4. LiveVideoStackCon深圳-服务端的任务越来越重
  5. distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse(‘setupto
  6. python点线图_Python | 点线图
  7. 小白都能看懂的干货!大数据这朵“后浪”,能卷起多大的风浪?
  8. Javascript第五章location对象第五课
  9. 基于C++的模板引擎
  10. Python 爬虫-requests 和 selenium 伪装 headers 和代理应对反爬机制
  11. 开通5G网络服务三个月,中国广电交出了什么样的答卷?
  12. 论文翻译:2021_语音增强模型压缩_Performance optimizations on deep noise suppression models...
  13. 电子凸轮追剪曲线生成算法
  14. Feign传输MultipartFile 报错 Error converting request body
  15. database-oracle
  16. android button的美化
  17. 关于Stream()和Collectors.joining()字符串连接器
  18. PyQt5-显示不同类型的消息对话框(提示对话框)
  19. 【报告分享】2022百度职业资格考试培训行业洞察-百度营销研究院(附下载)
  20. Python:pandas.DataFrame.describe(df.describe(include='all'))

热门文章

  1. 大型分布式Java项目--宜立方商城
  2. 在java中什么是所有类的父类_java中object是所有类的父类吗
  3. java中的堆和栈_实例理解Java中的堆和栈
  4. redhat最小化安装是多少包_Linux的最小化安装
  5. 25 亿条/秒消息处理!Flink 又双叒叕被 Apache 官方提名
  6. Android View框架总结(五)View布局流程之Layout
  7. 判断是否是ie浏览器 前端js_jquery判断是否为ie浏览器的方法
  8. php实现观看记录,PHP实现浏览历史记录
  9. java表格选中事件_表格中删除选中的操作
  10. mysql双节点部署_MariaDB GALERA 集群双节点部署