这里我只想记录我项目中使用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实例。
分享到:
相关推荐
7. **实体类** - 用于表示数据库中的表记录。 8. **MD5工具类** - 实现MD5加密的Java代码。 通过这个项目,初学者可以学习到Spring Boot的快速开发能力,MyBatis的使用方式,以及如何在实际应用中保护敏感信息如...
本篇资源摘要信息主要介绍了如何搭建Spring 3.0.6 + MyBatis 3.0.6环境。该环境搭建主要分为两个部分:准备工作和搭建环境。 准备工作 在搭建环境之前,需要准备好所需的文件和工具。这些文件和工具包括: * ...
包含课设要求所有资源 基于Spring + Spring MVC + MyBatis的图书馆管理系统,使用Maven进行包管理。主要功能包括:图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。
- **创建数据库**:设计数据库表结构,例如“papers”表,包含论文ID、标题、作者、摘要等字段。 - **配置MyBatis**:编写MyBatis的配置文件,定义数据源、事务管理器,以及Mapper接口和XML映射文件。 - **定义...
本项目是一个基于微信小程序的实习记录与论文管理系统,采用SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在提供一个便捷、高效的实习经历记录与论文撰写平台。项目功能丰富,支持二次开发定制,可满足不同...
Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在"基于SSM框架的旅游从业人员管理系统"中,这三个框架协同工作,为系统...
1有效),备注,注册时间题目表题目id,题目标题,简介,具体要求,发布人id(指导老师),发布时间,选题记录表标题id,用户id,一些时间型摘要基础框架Spring boot 2.2.2.RELEASE持久层框架Mybatis.plus 3.1.1安全...
通过XML或注解配置,Mybatis可以将Java对象映射到数据库中的记录,实现了ORM(Object-Relational Mapping)功能。 "自动摘要"是指从大量文本中自动生成文章的简短概述,通常用于新闻聚合、搜索引擎优化和智能推荐...
系统采用【MYSQL】作为后台数据库,以存储和管理大量用户信息、家教需求和交易记录。这种数据库管理系统以其高效、稳定和开源的特性,成为许多Web应用的首选。 关键词:信息管理系统;Spring MVC;MYSQL;Mybatis;...
创建新记录(Create)、读取数据(Read)、更新记录(Update)和删除记录(Delete)是数据库操作的核心。这些操作通常通过MyBatis的Mapper接口和XML配置文件实现,与业务逻辑层交互,最终由Spring MVC进行调度和处理...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。在这个项目中,MyBatis将被用来处理与MySQL数据库之间的交互,包括用户的...
通过XML或注解方式配置,Mybatis能将Java对象与数据库表记录进行映射,实现数据的CRUD操作。这在登录注册功能中,可以用于处理用户的账户信息存储和查询。 其次,前端的AJAX技术,即Asynchronous JavaScript and ...
在"papersystem"项目中,Mybatis可能会被用来执行CRUD操作,比如添加新的论文记录、删除特定的论文、更新论文信息以及查询论文列表。 MySql是广泛使用的开源关系型数据库管理系统,它支持ACID(原子性、一致性、...
标题:基于SSM的理发店管理系统——高效管理与优化服务体验摘要:本资源介绍了一个基于SSM(Spring、Spring MVC、MyBatis)框架的理发店管理系统。该系统旨在帮助理发店实现高效管理,提高服务质量,提升客户满意度。...
用户表存储用户基本信息,论文信息表记录论文的标题、摘要、作者等,论文状态表追踪论文的完成情况,评审表则保存评审意见和评分。 8. **源码解读** 分析源码可以深入理解系统架构和编程技巧。Spring Boot的配置...
摘要:本系统前端采用Vue技术进行开发,后端使用Nodejs搭建系统框架,以Element-admin快速构建页面,前后端分离的思想对该系统进行了规划,数据库访问层采用MyBatis框架实现系统业务模块和数据库的交互。通过RBAC的权限...
5. 成果展示:以列表或网格形式展示成果,支持详情查看,可能包含摘要、全文链接、引用次数等信息。 6. 权限控制:根据角色权限设定,限制不同用户对成果的访问和操作权限。 系统开发过程中,可能会涉及Maven或...
2. **投稿模块**:作者可以上传稿件,填写相关信息,如标题、摘要、关键词等,并能查看投稿状态。 3. **审稿模块**:编辑可以查看待审稿件,进行审阅,给出反馈,包括接受、拒绝或要求修改。 4. **消息通知**:系统...
1功能摘要 使用MarkDawn语法撰写博客文章。 动态改变前端信息 按标签,个人类别,档案,标题或内容检索博客文章 博客页面。 -React灵敏,与手机完全兼容 2技术说明 Spring Boot + MyBatis + Beetl + jQuery +引导...
Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 通过这些技术的结合,秋成果蔬销售网站实现了用户友好、功能完善的果蔬...