`
awdxzc
  • 浏览: 335687 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mybatis记录摘要

 
阅读更多
这里我只想记录我项目中使用Mybatis3.0的时候注解方式调用的配置以及一些碰到的问题。应付一般简单的操作是可以的。复杂的具体问题具体分析。

首先是spring配置Mybatis:
<bean id="dataSource" class="org.apache.commons.dbcp.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}"/>
		<property name="maxActive" value="20"/>
		<property name="maxWait" value="100"/>
		<property name="poolPreparedStatements" value="true"/>
		<property name="defaultAutoCommit" value="false"/>
	</bean>
	
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" autowire="byName" />
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" /> 
	</bean>
	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.**" /> 
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

从配置中可以看出我使用了mapper映射接口。

再看看mapper接口里面怎么调用一个查询的存储过程:
public interface UserMapper {
	
	@Select("{CALL usp_GetUser(#{account,mode=IN,jdbcType=VARCHAR})}")
	@Options(statementType = StatementType.CALLABLE)
	@Results(value = {
		@Result(property="id", column="UserID"),
		@Result(property="account", column="Account"),
		@Result(property="username", column="UserName")		
	})
	public User findByAccount(String account);
}

是不是很酷? 就这样的一个接口方法,配置一些注解,一个调用usp_GetUser的存储过程的功能就完成了。这里需要提几个点:

1:Mybatis在这样的方式传递参数的时候不允许多参数传递,如果需要有多参数传递的话,需要将参数封装成Map对象,在注解里面调用存储过程的时候或者写SQL的时候,传递的就是Map里面对应的KEY值。
2:注解里面有个@Results标签,用来封装数据到对象,这里就是匹配列与字段,根据你方法的返回值进行匹配字段的封装成一个对象,如果查询出来的是一个结果集,比如上例中的User对象查出来是一组User的结果集的话,什么都不用修改,只需要修改方法的返回类型为List<User>就OK了。是不是很方便?给组代码做例子:
@Select("{CALL usp_GetDocumentByIDList(#{documentIds,mode=IN,jdbcType=VARCHAR})}")
	@Options(statementType = StatementType.CALLABLE)
	@Result(javaType = Document.class)
	@Results(value = {
		@Result(property="documentID", column="DocID"),
		@Result(property="region", column="RegionID"),
		@Result(property="template", column="TemplateID"),
		@Result(property="isIngested", column="IsIngested"),
		@Result(property="extID", column="ExtID"),
		@Result(property="title", column="DocTitle"),
		@Result(property="content", column="DocXML"),
		@Result(property="modifiedDate", column="ModifiedDate"),
		@Result(property="user", column="UserID"),
		@Result(property="regionName", column="RegionName"),
		@Result(property="productName", column="ProductName"),
		@Result(property="contentTypeName", column="ContentTypeName"),
		@Result(property="templateName", column="TemplateName")
	})
	public List<Document> getDocumentsByIDs(String documentIds);

这样的代码是否让你看着很舒服?而且一眼就能知道它的目的是什么,想干嘛?
我在这里不想争论关于注解和配置文件孰优孰劣,老掉牙的问题。不同的方式用在不同的需求中才是真理。这样的代码不会给我的维护带来什么问题,而且不存在配置文件安全问题,而且可读性高。我选择它。

最后付几个关于Update和insert的调用方式的代码:
@Update("{CALL usp_UpdDocument(#{region,mode=IN,jdbcType=VARCHAR}," +
			"#{product,mode=IN,jdbcType=INTEGER}," +
			"#{contentType,mode=IN,jdbcType=INTEGER}," +
			"#{template,mode=IN,jdbcType=INTEGER}," +
			"#{title,mode=IN,jdbcType=VARCHAR}," +
			"#{content,mode=IN,jdbcType=VARCHAR}," +
			"#{user,mode=IN,jdbcType=INTEGER}," +
			"#{createDate,mode=IN,jdbcType=DATE}," +
			"#{stampedDate,mode=IN,jdbcType=DATE}," +
			"#{modifiedDate,mode=IN,jdbcType=DATE}," +
			"#{expireDate,mode=IN,jdbcType=DATE}," +
			"#{publishDate,mode=IN,jdbcType=DATE}," +
			"#{documentID,mode=IN,jdbcType=INTEGER})}" )
	@Options(statementType = StatementType.CALLABLE)
	public void update(Document document);



@Insert("{CALL usp_AddDocument(#{region,mode=IN,jdbcType=VARCHAR}," +
			"#{product,mode=IN,jdbcType=INTEGER}," +
			"#{contentType,mode=IN,jdbcType=INTEGER}," +
			"#{template,mode=IN,jdbcType=INTEGER}," +
			"#{isIngested,mode=IN,jdbcType=BIT}," +
			"#{extID,mode=IN,jdbcType=INTEGER}," +
			"#{title,mode=IN,jdbcType=VARCHAR}," +
			"#{createDate,mode=IN,jdbcType=DATE}," +
			"#{stampedDate,mode=IN,jdbcType=DATE}," +
			"#{modifiedDate,mode=IN,jdbcType=DATE}," +
			"#{expireDate,mode=IN,jdbcType=DATE}," +
			"#{publishDate,mode=IN,jdbcType=DATE}," +
			"#{documentID,mode=OUT,jdbcType=INTEGER})}" )
	@Options(statementType = StatementType.CALLABLE)
	public void create(Document document);



这里说明下关于mapper只需要在spring service层对其进行注入就OK了,spring会给Mapper注入一个动态代理的Mapper实例。








分享到:
评论
1 楼 ddnzero 2013-09-10  
楼主,你这个存储过程能贴出来么 ?? 有out参数没?? usp_GetUser


我现在有个过程需要返回1个结果集和2个参数,
TYPE ref_data IS REF CURSOR;

PROCEDURE p_order_info2 (
            i_orderId VARCHAR2,
            out_data OUT NOCOPY ref_data,
            out_code OUT NUMBER,
            out_msg  OUT VARCHAR2  
);

想看看你这个存储过程里面是什么啊?

相关推荐

    Sptring Boot整合mybatis(连接数据库测试及md5加密)

    7. **实体类** - 用于表示数据库中的表记录。 8. **MD5工具类** - 实现MD5加密的Java代码。 通过这个项目,初学者可以学习到Spring Boot的快速开发能力,MyBatis的使用方式,以及如何在实际应用中保护敏感信息如...

    Spring+mybatis环境搭建

    本篇资源摘要信息主要介绍了如何搭建Spring 3.0.6 + MyBatis 3.0.6环境。该环境搭建主要分为两个部分:准备工作和搭建环境。 准备工作 在搭建环境之前,需要准备好所需的文件和工具。这些文件和工具包括: * ...

    基于Spring+Spring MVC+MyBatis的图书馆管理系统(带完整文档报告,E-R图)课设

    包含课设要求所有资源 基于Spring + Spring MVC + MyBatis的图书馆管理系统,使用Maven进行包管理。主要功能包括:图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。

    spring+springMVC+mybatis整合(以一个论文查询管理网站为例).zip

    - **创建数据库**:设计数据库表结构,例如“papers”表,包含论文ID、标题、作者、摘要等字段。 - **配置MyBatis**:编写MyBatis的配置文件,定义数据源、事务管理器,以及Mapper接口和XML映射文件。 - **定义...

    微信小程序项目源码-实习记录小程序+ssm框架+论文.rar

    本项目是一个基于微信小程序的实习记录与论文管理系统,采用SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在提供一个便捷、高效的实习经历记录与论文撰写平台。项目功能丰富,支持二次开发定制,可满足不同...

    基于SSM框架的旅游从业人员管理系统

    Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在"基于SSM框架的旅游从业人员管理系统"中,这三个框架协同工作,为系统...

    毕业设计选题管理系统.zip

    1有效),备注,注册时间题目表题目id,题目标题,简介,具体要求,发布人id(指导老师),发布时间,选题记录表标题id,用户id,一些时间型摘要基础框架Spring boot 2.2.2.RELEASE持久层框架Mybatis.plus 3.1.1安全...

    springMVC+ansj中文分词

    通过XML或注解配置,Mybatis可以将Java对象映射到数据库中的记录,实现了ORM(Object-Relational Mapping)功能。 "自动摘要"是指从大量文本中自动生成文章的简短概述,通常用于新闻聚合、搜索引擎优化和智能推荐...

    毕业论文-摘要1

    系统采用【MYSQL】作为后台数据库,以存储和管理大量用户信息、家教需求和交易记录。这种数据库管理系统以其高效、稳定和开源的特性,成为许多Web应用的首选。 关键词:信息管理系统;Spring MVC;MYSQL;Mybatis;...

    manageSystem.zip

    创建新记录(Create)、读取数据(Read)、更新记录(Update)和删除记录(Delete)是数据库操作的核心。这些操作通常通过MyBatis的Mapper接口和XML配置文件实现,与业务逻辑层交互,最终由Spring MVC进行调度和处理...

    用户注册+登录 JavaWeb项目压缩包

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。在这个项目中,MyBatis将被用来处理与MySQL数据库之间的交互,包括用户的...

    Mybatics,前端AJAX技术,SpringBoot、mysql、md5加密算法实现登录注册

    通过XML或注解方式配置,Mybatis能将Java对象与数据库表记录进行映射,实现数据的CRUD操作。这在登录注册功能中,可以用于处理用户的账户信息存储和查询。 其次,前端的AJAX技术,即Asynchronous JavaScript and ...

    papersystem.zip-ssm简单项目

    在"papersystem"项目中,Mybatis可能会被用来执行CRUD操作,比如添加新的论文记录、删除特定的论文、更新论文信息以及查询论文列表。 MySql是广泛使用的开源关系型数据库管理系统,它支持ACID(原子性、一致性、...

    基于SSM的理发店管理系统.zip

    标题:基于SSM的理发店管理系统——高效管理与优化服务体验摘要:本资源介绍了一个基于SSM(Spring、Spring MVC、MyBatis)框架的理发店管理系统。该系统旨在帮助理发店实现高效管理,提高服务质量,提升客户满意度。...

    基于springboot+vue的毕业论文管理系统源码数据库.zip

    用户表存储用户基本信息,论文信息表记录论文的标题、摘要、作者等,论文状态表追踪论文的完成情况,评审表则保存评审意见和评分。 8. **源码解读** 分析源码可以深入理解系统架构和编程技巧。Spring Boot的配置...

    基于vue的人力资源管理系统的设计与实现.rar

    摘要:本系统前端采用Vue技术进行开发,后端使用Nodejs搭建系统框架,以Element-admin快速构建页面,前后端分离的思想对该系统进行了规划,数据库访问层采用MyBatis框架实现系统业务模块和数据库的交互。通过RBAC的权限...

    基于SSM学术成果管理系统源码.zip

    5. 成果展示:以列表或网格形式展示成果,支持详情查看,可能包含摘要、全文链接、引用次数等信息。 6. 权限控制:根据角色权限设定,限制不同用户对成果的访问和操作权限。 系统开发过程中,可能会涉及Maven或...

    基于SSM+vue的杂志在线投稿审稿系统源码.zip

    2. **投稿模块**:作者可以上传稿件,填写相关信息,如标题、摘要、关键词等,并能查看投稿状态。 3. **审稿模块**:编辑可以查看待审稿件,进行审阅,给出反馈,包括接受、拒绝或要求修改。 4. **消息通知**:系统...

    博客:zhaoxuyang.net

    1功能摘要 使用MarkDawn语法撰写博客文章。 动态改变前端信息 按标签,个人类别,档案,标题或内容检索博客文章 博客页面。 -React灵敏,与手机完全兼容 2技术说明 Spring Boot + MyBatis + Beetl + jQuery +引导...

    基于java秋成果蔬销售网站的设计与实现论文.doc

    Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 通过这些技术的结合,秋成果蔬销售网站实现了用户友好、功能完善的果蔬...

Global site tag (gtag.js) - Google Analytics