Mybatis学习笔记(一)
——Spring集成Mybatis
环境和组件
- eclipse-jee-indigo-SR2-win32-x86_64
- Spring 3.12
- mybatis-3.2.2
- mybatis-spring-1.2.0
- mysql-connector-java-5.1.23
- log4j-1.2.17
- cglib-nodep-2.2.3
- 操作系统win7 64bit
- java version "1.6.0_29"
- MySQL 5.6
- web项目构建
- 应用上下文配置文件在web.xml中配置
<!-- spring框架 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 上下文配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml, /WEB-INF/config/**/*.xml </param-value> </context-param>
- 数据源配置
<!-- 属性文件 --> <context:property-placeholder location="/WEB-INF/properties/**/*.properties" /> <!-- 数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" scope="singleton"> <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>
- Mybatis会话工厂bean(SqlSessionFactoryBean)在applicationContext.xml中的配置
<!-- mybatis会话工厂 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据源 --> <property name="dataSource" ref="dataSource" /> <!-- 配置文件 --> <property name="configLocation" value="/WEB-INF/mybatis-config.xml" /> </bean> <!-- mybatis数据映射配置文件扫描器配置 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.lxl" /> <!-- 只有声明了com.lxl.core.SqlMapper注解的接口才可以被扫描 --> <property name="annotationClass" value="com.lxl.core.SqlMapper"/> </bean>
- @SqlMapper是为了让Mybatis扫描识别的一个简单注解
/** * mybatis sql映射注解,用于mybatis自动扫描,只有此声明此注解的Mapper才会识别 * * @author LXL * */ @Target({ TYPE }) @Retention(RUNTIME) public @interface SqlMapper { }
(我尝试过使用MapperScannerConfigurer的指定包路径basePackage来扫描SqlMapper的方式,不过,我喜欢web应用分层调用时,使用Spring的@Service、@Resource注解自动装配,在使用包路径配置Mybatis对SqlMapper的扫描时,@Service、@Resource注解不能按照类型自动装配了,必须对@Service指定id,使用@Resource是声明name,例如:@Service(value = "UserDomain")和 @Resource(name = "UserDomain"),增加了代码量,大家可以尝试一下,是否遇到和我一样的问题)
- 对dao层接口增加@SqlMapper注解声明
/** * 用户持久层接口 * * @author LXL * */ @SqlMapper public interface IUserDao { /** * 新增 * * @param data * @return */ public User insert(User data); /** * 删除 * * @param pks */ public void delete(String[] pks); /** * 更新 * * @param data * @return */ public void update(User data); /** * 详单 * * @param data * @return */ public User detail(User data); /** * 查询 * * @param filter * @return */ public List<User> query(UserQueryFilter filter); }
- 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"> <mapper namespace="com.lxl.authority.user.dao.IUserDao"> <sql id="TABLE"> pub_user </sql> <sql id="COLUMNS"> user_id, user_code, user_name, password, group_id, is_use </sql> <sql id="ORDER"> <if test="order != null"> order by #{order} </if> <if test="!isAsc"> desc </if> </sql> <resultMap id="DATA" type="com.lxl.authority.user.model.User"> <result property="isUse" column="is_use" /> </resultMap> <insert id="insert" parameterType="com.lxl.authority.user.model.User"> insert into <include refid="TABLE" /> ( <include refid="COLUMNS" /> ) values (#{userId}, #{userCode},#{userName}, #{password}, #{groupId}, #{isUse}) </insert> <delete id="delete" parameterType="java.lang.String"> delete from <include refid="TABLE" /> where 1=1 and id in <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> </delete> <update id="update" parameterType="com.lxl.authority.user.model.User"> update <include refid="TABLE" /> set user_code = #{userCode}, user_name = #{userName}, password = #{password}, group_id = #{groupId}, where user_id = #{userId} </update> <select id="detail" parameterType="com.lxl.authority.user.model.User" resultMap="DATA"> select * from <include refid="TABLE" /> where user_id = #{user_id} </select> <select id="query" parameterType="com.lxl.authority.user.controller.UserQueryFilter" resultMap="DATA"> select * from <include refid="TABLE" /> where 1=1 <if test="userId != null"> and id in <foreach item="item" index="index" collection="id" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="userCode != null"> and code in <foreach item="item" index="index" collection="code" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="userName != null"> and alias in <foreach item="item" index="index" collection="alias" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="isUse != null"> and is_use = #{isUse} </if> <!-- 排序 --> <include refid="ORDER" /> </select> </mapper>
经过以上步骤,spring已经完成mybatis的集成,可以尝试使用mybatis了
为了增加mybaits的配置,我们在applicationContext.xml中已经配置了mybatis的配置文件/WEB-INF/mybatis-config.xml
- 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> <!-- 全局映射器启用缓存 --> <setting name="cacheEnabled" value="false" /> <!-- 查询时,关闭关联对象即时加载以提高性能 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 --> <setting name="aggressiveLazyLoading" value="false" /> <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true" /> <!-- 允许使用列标签代替列名 --> <setting name="useColumnLabel" value="true" /> <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --> <setting name="useGeneratedKeys" value="true" /> <!-- 给予被嵌套的resultMap以字段-属性的映射支持 --> <setting name="autoMappingBehavior" value="FULL" /> <!-- 对于批量更新操作缓存SQL以提高性能 --> <setting name="defaultExecutorType" value="BATCH" /> <!-- 数据库超过25000秒仍未响应则超时 --> <setting name="defaultStatementTimeout" value="25000" /> </settings> <!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 --> <typeAliases> <!-- 别名声明写这里 --> </typeAliases> <!-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含@resultMap注解,则mapper必须配置,给resultMap注解使用 --> <mappers> <!-- 显式指定mapper配置文件写这里 采用与SqlMapper同名,并且放在同一个包下,可以自动配置,所以这里不写了 --> </mappers> </configuration>
以上是我在spring中集成mybaits的基本过程,如有不对地方,请多指教
注:本博客文章均已注明原创和转载,如转载本博客文章,请注明原文出处或征求原作者同意。
相关推荐
【标题】"MyBatis学习笔记1" 涉及的知识点主要集中在MyBatis这一流行的持久层框架上。MyBatis是一个优秀的Java ORM(对象关系映射)框架,它允许开发者将SQL查询与Java代码分离,使得数据库操作更加灵活且易于维护。...
这篇“mybatis 学习笔记”将带你深入理解 MyBatis 的核心概念和主要功能。 1. **MyBatis 概述**: MyBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它的核心是 SQL 映射文件和 SqlSessionFactory。ORM 技术...
在"MyBatis学习笔记.zip"这个压缩包中,包含了四天的学习内容,分别以"MyBatis_day1"、"MyBatis_day2"、"MyBatis_day3"和"MyBatis_day4"命名,这些笔记可能详细阐述了MyBatis的核心概念和使用方法。让我们逐一解析...
MyBatis-Plus 学习笔记 MyBatis-Plus 是一个基于 MyBatis 的增强工具,旨在简化开发、提高效率。它提供了许多实用的特性和功能,例如无侵入、损耗小、强大的 CRUD 操作、支持 Lambda 形式调用、支持多种数据库、...
本学习笔记是作者在大学期间深入学习Mybatis后的整理,旨在帮助初学者快速入门并掌握其核心概念与功能。 笔记共分为11个章节,涵盖Mybatis的基础到高级应用,以下是主要知识点的详细讲解: 1. **Mybatis简介**:...
在本学习资源中,你将找到一份详尽的Mybatis学习笔记和源码,这将极大地助力你的学习过程,尤其是对自学者而言。这份笔记被认为是非常有价值且深入的,作者在其中倾注了大量的精力,确保了内容的全面性和实用性。 ...
### MyBatis学习笔记 #### 一、MyBatis简介及环境搭建 **MyBatis** 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis...
【SpringMVC+Mybatis学习笔记】 SpringMVC和Mybatis是Java开发中常见的两个框架,它们分别负责Web层和持久层的管理。SpringMVC是Spring框架的一部分,提供了强大的模型-视图-控制器(MVC)架构模式,用于构建高性能...
马士兵老师的MyBatis学习笔记主要涵盖了以下几个核心知识点: 1. **MyBatis安装与环境搭建**:首先,你需要配置Java开发环境,并了解Maven或Gradle构建工具,因为MyBatis通常与这些工具结合使用来管理依赖。然后,...
本总结笔记是Spring、Mybatis、SpringMVC的综合学习资源,涵盖了这些框架的基本概念、配置方式、优点与适用场景,以及它们各自组件和功能点的详细解释。适用于初学者入门学习,同时也可以作为面试时的参考资料,帮助...
《Spring3.1 和 MyBatis 整合笔记》是一本深入探讨如何将Spring框架与MyBatis数据持久层框架整合...《Spring3.1 和 MyBatis 整合笔记》的源代码提供了一个很好的学习和参考样本,可以帮助开发者快速掌握这一整合技术。
总的来说,这是一份详尽的MyBatis学习资料,适合初学者和有经验的开发者参考。通过学习,你将能够熟练地运用MyBatis进行数据库操作,提升你的JavaWeb开发技能。同时,了解MyBatis的最佳实践也有助于优化项目结构,...
spring、springmvc、mybatis学习笔记及完整源代码分享给需要的同学
【标题】"MyBatis学习笔记2"涵盖了MyBatis框架的深入理解和实践应用,是进一步提升对这个流行持久层框架理解的关键。MyBatis是一个优秀的、轻量级的Java ORM(对象关系映射)框架,它使得数据库操作与业务逻辑更加...