Mybatis 初学

Mybatis

在Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持。因此Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求。

下面将分别介绍Mybatis不整合与整合Spring的具体区别,首先介绍不整合Spring的情形下,如何配置和使用Mybatis。每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,SqlSessionFactory实例通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder从一个xml配置文件或者一个预定义的配置类的实例获得配置信息。以下一个mybatis-config.xml的配置文件,在这个文件中内容会在Spring使用过程中被划分成几个部分。其中settings部分对应configLocation属性,environments部分对应dataSource属性,mappers部分对应mapperLocations属性。

<?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">  
 <!--  XML 配置文件1.包含对Mybatis系统的核心设置,2.包含获取数据库连接实例的数据源和 决定事务范围和控制的事务管理器. -->  
<configuration>  
<settings>  
     <setting name="cacheEnabled" value="true"/>  
     <setting name="lazyLoadingEnabled" value="true"/>  
</settings>  
<!-- 配置JDBC连接参数 -->  
<environments default="development">  
    <environment id="development">  
        <transactionManager type="JDBC"/>  
        <dataSource type="POOLED">  
            <property name="driver" value="com.mysql.jdbc.Driver"/>  
              <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>  
              <property name="username" value="root"/>  
              <property name="password" value="root"/>  
        </dataSource>  
    </environment>  
</environments>  
<!-- 指明每个关系表的配置文件 -->  
<mappers>  
    <mapper resource="org/phf/mapping/UserMapper.xml"/>  
    <mapper resource="org/phf/mapping/ClazzMapper.xml"/>  
    <mapper resource="org/phf/mapping/StudentMapper.xml"/>  
</mappers>  
</configuration> 

其中一个UserMapper.xml文件如下:

<?xml version="1.0" encoding="gbk"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
 "mybatis-3-mapper.dtd">  
<!-- Mybatis的构建就是聚焦于SQL的,使其远离于普通的方式。Mybatis封装处理了连接和查询结果获取 -->  
<mapper namespace="org.phf.mapping.UserMapper">  
     <!--开启缓存-->  
     <cache />    
     <!-- select 查询语句是使用 MyBatis 时最常用的元素之一。id(方法)是 get, parameterType(参数类型)是Integer, resultType(返回类型)是 User对象,其属性就是列名,值是列对应的值。-->  
     <select id=“find” parameterType=“Integer” resultType=“User”>  
      SELECT * FROM TB_USER WHERE ID = #{id}  
     </select>       
</mapper>

通过namespace关联一个接口,其中id为接口中的具体方法,下面是该UserMapper接口

//UserMapper.java  
package org.phf.mapping;  
import org.phf.pojo.User;  
/** 
 * 只要定义接口方法,所需sql语句在相应UserMapper.xml中映射 
 **/  
public interface UserMapper {  

//一条数据可以返回表对象,属性对应列名  
    User find(Integer id);   
}

下面是程序中解析配置文件,注意SqlSessionFactoryBuilder,sqlSessionFactory,SqlSession这3个主意类。在Spring中将直接由Spring容器进行管理,只需要在配置文件中建立关联。

package org.phf.factory;  

import java.io.InputStream;  
import org.apache.ibatis.io.Resources;  
import org.apache.ibatis.session.SqlSession;  
import org.apache.ibatis.session.SqlSessionFactory;  
import org.apache.ibatis.session.SqlSessionFactoryBuilder;  

public class MybatisFactory {  
/** 
 * SqlSessionFactory对象可以看成DataSource(数据库连接池) 
 * 在应用执行期间,应该只创建一次,建议使用单例模式 
 * 通过SqlSessionFactoryBuilder来获得数据库配置参数并创建  
 */  
private static SqlSessionFactory sqlSessionFactory;  

/** 
 * SqlSession对象可以理解成对Connection的封装,即一个数据连接会话 
 * 它同时也封装了连接和断开过程,提供sql语句的映射 
 * SqlSession实例不能被共享,它不是线程安全的。 
 * 所以应该一次性用完后要确保使用finally块来关闭它,关闭时会被收回SqlSessionFactory所管理的连接池中 
 */  
//private static SqlSession session;  
static  
{  
    try {  
        String resource = "mybatis-config.xml";  
        InputStream is = Resources.getResourceAsStream(resource);  
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);  
        System.out.println(sqlSessionFactory);  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
}  
//  
public static SqlSession getSqlSession()  
{  
    return sqlSessionFactory.openSession();  
}  
//  
public static void close(SqlSession session)  
{  
    if(session != null)  
        session.close();  
}  
}

最后通过

        session = MybatisFactory.getSqlSession();  
        //获取业务接口,通过接口类型获取由Mybatis生成的匿名实例  
        UserMapper userMapper = session.getMapper(UserMapper.class);  
        //调用接口方法,执行操作且获得数据   
        System.out.println("<---------find by id----------->");  
        User user = userMapper.find(1); 

经过上面的介绍,对Mybatis的基本用法已经有了一些了解,下面介绍结合Spring情况下使用Mybatis的使用方式。

Mybatis的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。在使用Mybatis-Spring的时候,同样也需要SqlSession,而且这个SqlSession是内嵌在程序中的,一般不需要直接访问。

因此Mybatis-Spring封装了一个SqlSessionFactoryBean,在SqlSessionFactoryBean里面是通过SqlSessionFactoryBuilder来生成相应的SqlSessionFactory,再由SqlSessionFactory生成相应的SqlSession。所以需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean,此外可以通过对SqlSessionFactoryBean指定一些属性来提供关于Mybatis的一些配置信息:

   <bean id=“sqlSessionFactory” class=“org.mybatis.spring.SqlSessionFactoryBean”>
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/mybatis.xml" />
        <property name="mapperLocations" value="classpath:mapper/**/*.xml" />
   </bean>

dataSource属性是必须指定的,它表示用于连接数据库的数据源,其中dataSource,使用c3p0建立数据库连接池: 

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass">
        <value>${jdbc.driverClassName}</value>
    </property>
    <property name="jdbcUrl">
        <value>${jdbc.url}</value>
    </property>
    <property name="user">
        <value>${jdbc.username}</value>
    </property>
    <property name="password">
        <value>${jdbc.password}</value>
    </property>

    <!--连接池中保留的最小连接数。 -->
    <property name="minPoolSize" value="10" />
    <!--连接池中保留的最大连接数。Default: 15 -->
    <property name="maxPoolSize" value="100" />
    <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
    <property name="maxIdleTime" value="0" />
    <property name="maxConnectionAge" value="1200" />
    <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
    <property name="acquireIncrement" value="3" />
    <property name="maxStatements" value="1000" />
    <property name="initialPoolSize" value="3" />
    <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
    <property name="idleConnectionTestPeriod" value="0" />
    <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
    <property name="acquireRetryAttempts" value="1" />
    <property name="breakAfterAcquireFailure" value="false" />
    <property name="testConnectionOnCheckout" value="false" />
    <property name="testConnectionOnCheckin" value="false" />
    <property name="acquireRetryDelay" value="100" />
    <property name="autoCommitOnClose" value="false" />
</bean>

其中mybatis.xml文件如下:

<?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"/>
    </settings>
    <typeAliases></typeAliases>
</configuration>

另外包括:

  1. mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。
  2. configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。
  3. typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。
  4. typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。
  5. plugins:数组类型,用来指定Mybatis的Interceptor。
  6. typeHandlersPackage:用来指定TypeHandler所在的包,如果指定了该属性,SqlSessionFactoryBean会自动把该包下面的类注册为对应的TypeHandler。多个package之间可以用逗号或者分号等来进行分隔。
  7. typeHandlers:数组类型,表示TypeHandler。

接下来就是在Spring的applicationContext文件中定义Mapper对象相关的MapperFactoryBean。通过MapperFactoryBean可以获取到我们想要的Mapper对象。MapperFactoryBean实现了Spring的FactoryBean接口,所以MapperFactoryBean是通过FactoryBean接口中定义的getObject方法来获取对应的Mapper对象的。在定义一个MapperFactoryBean的时候有两个属性需要注入,一个是Mybatis-Spring用来生成SqlSessionTemplate(实现了SqlSession接口)对象的sqlSessionFactory;另一个就是已经定义的Mapper接口。

定义好相应Mapper接口对应的MapperFactoryBean之后,就可以把对应的Mapper接口注入到由Spring管理的bean对象中了,比如Service bean对象。这样当需要使用到相应的Mapper接口时,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的。这样就通过把SqlSessionFactory和相应的Mapper接口交给Spring管理实现了Mybatis跟Spring的整合。

<bean id="blogMapper"       class="org.mybatis.spring.mapper.MapperFactoryBean">
   <property name="mapperInterface"
       value="org.phf.mapping.UserMapper" />
   <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

利用上面的方法进行整合的时候,有一个Mapper就需要定义一个对应的MapperFactoryBean,每个bean通过第一个属性与一个接口进行绑定(类似于不结合Spring方式中传递的User.class实现)。当Mapper比较少的时候,这样做也还可以,但是当Mapper相当多时再这样定义一个个Mapper对应的MapperFactoryBean就显得速度比较慢了。为此Mybatis-Spring提供了一个叫做MapperScannerConfigurer的类,通过这个类Mybatis-Spring会自动注册Mapper对应的MapperFactoryBean对象。对于MapperScannerConfigurer而言有一个属性必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
   <property name="basePackage" value="com.tiantian.mybatis.mapper" />
</bean>
【基于QT的调色板】是一个使用Qt框架开发的色彩选择工具,类似于Windows操作系统中常见的颜色选取器。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备,支持C++和QML语言。这个调色板功能提供了横竖两种渐变模式,用户可以方便地选取所需的颜色值。 在Qt中,调色板(QPalette)是一个关键的类,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过自定义QPalette,开发者可以创建具有独特视觉风格的应用程序。 该调色板功能可能使用了QColorDialog,这是一个标准的Qt对话框,允许用户选择颜色。QColorDialog提供了一种简单的方式来获取用户的颜色选择,通常包括一个调色板界面,用户可以通过滑动或点击来选择RGB、HSV或其他色彩模型中的颜色。 横渐变取色可能通过QGradient实现,QGradient允许开发者创建线性或径向的色彩渐变。线性渐变(QLinearGradient)沿直线从一个点到另一个点过渡颜色,而径向渐变(QRadialGradient)则以圆心为中心向外扩散颜色。在调色板中,用户可能可以通过滑动条或鼠标拖动来改变渐变的位置,从而选取不同位置的颜色。 竖渐变取色则可能是通过调整QGradient的方向来实现的,将原本水平的渐变方向改为垂直。这种设计可以提供另一种方式来探索颜色空间,使得选取颜色更为直观和便捷。 在【colorpanelhsb】这个文件名中,我们可以推测这是与HSB(色相、饱和度、亮度)色彩模型相关的代码或资源。HSB模型是另一种常见且直观的颜色表示方式,与RGB或CMYK模型不同,它以人的感知为基础,更容易理解。在这个调色板中,用户可能可以通过调整H、S、B三个参数来选取所需的颜色。 基于QT的调色板是一个利用Qt框架和其提供的色彩管理工具,如QPalette、QColorDialog、QGradient等,构建的交互式颜色选择组件。它不仅提供了横竖渐变的色彩选取方式,还可能支持HSB色彩模型,使得用户在开发图形用户界面时能更加灵活和精准地控制色彩。
标题基于Spring Boot的二手物品交易网站系统研究AI更换标题第1章引言阐述基于Spring Boot开发二手物品交易网站的研究背景、意义、现状及本文方法与创新点。1.1研究背景与意义介绍二手物品交易的市场需求和Spring Boot技术的适用性。1.2国内外研究现状概述当前二手物品交易网站的发展现状和趋势。1.3论文方法与创新点说明本文采用的研究方法和在系统设计中的创新之处。第2章相关理论与技术介绍开发二手物品交易网站所涉及的相关理论和关键技术。2.1Spring Boot框架解释Spring Boot的核心概念和主要特性。2.2数据库技术讨论适用的数据库技术及其在系统中的角色。2.3前端技术阐述与后端配合的前端技术及其在系统中的应用。第3章系统需求分析详细分析二手物品交易网站系统的功能需求和性能需求。3.1功能需求列举系统应实现的主要功能模块。3.2性能需求明确系统应满足的性能指标和安全性要求。第4章系统设计与实现具体描述基于Spring Boot的二手物品交易网站系统的设计和实现过程。4.1系统架构设计给出系统的整体架构设计和各模块间的交互方式。4.2数据库设计详细阐述数据库的结构设计和数据操作流程。4.3界面设计与实现介绍系统的界面设计和用户交互的实现细节。第5章系统测试与优化说明对系统进行测试的方法和性能优化的措施。5.1测试方法与步骤测试环境的搭建、测试数据的准备及测试流程。5.2测试结果分析对测试结果进行详细分析,验证系统是否满足需求。5.3性能优化措施提出针对系统性能瓶颈的优化建议和实施方案。第6章结论与展望总结研究成果,并展望未来可能的研究方向和改进空间。6.1研究结论概括本文基于Spring Boot开发二手物品交易网站的主要发现和成果。6.2展望与改进讨论未来可能的系统改进方向和新的功能拓展。
1. 用户与权限管理模块 角色管理: 学生:查看个人住宿信息、提交报修申请、查看卫生检查结果、请假外出登记 宿管人员:分配宿舍床位、处理报修申请、记录卫生检查结果、登记晚归情况 管理员:维护楼栋与房间信息、管理用户账号、统计住宿数据、发布宿舍通知 用户操作: 登录认证:对接学校统一身份认证(模拟实现,用学号 / 工号作为账号),支持密码重置 信息管理:学生完善个人信息(院系、专业、联系电话),管理员维护所有用户信息 权限控制:不同角色仅可见对应功能(如学生无法修改床位分配信息) 2. 宿舍信息管理模块 楼栋与房间管理: 楼栋信息:名称(如 "1 号宿舍楼")、层数、性别限制(男 / 女 / 混合)、管理员(宿管) 房间信息:房间号(如 "101")、户型(4 人间 / 6 人间)、床位数量、已住人数、可用状态 设施信息:记录房间内设施(如空调、热水器、桌椅)的配置与完好状态 床位管理: 床位编号:为每个床位设置唯一编号(如 "101-1" 表示 101 房间 1 号床) 状态标记:标记床位为 "空闲 / 已分配 / 维修中",支持批量查询空闲床位 历史记录:保存床位的分配变更记录(如从学生 A 调换到学生 B 的时间与原因) 3. 住宿分配与调整模块 住宿分配: 新生分配:管理员导入新生名单后,宿管可按专业集中、性别匹配等规则批量分配床位 手动分配:针对转专业、复学学生,宿管手动指定空闲床位并记录分配时间 分配结果公示:学生登录后可查看自己的宿舍信息(楼栋、房间号、床位号、室友列表) 调整管理: 调宿申请:学生提交调宿原因(如室友矛盾、身体原因),选择意向宿舍(需有空位) 审批流程:宿管审核申请,通过后执行床位调换,更新双方住宿信息 换宿记录:保存调宿历史(申请人、原床位、新床位、审批人、时间) 4. 报修与安全管理模块 报修管理: 报修提交:学生选择宿舍、设施类型(如 "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值