项目管理与SSM框架 MyBatis(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 项目管理与SSM框架 MyBatis(三)

四、MyBatis配置文件

MyBatis配置文件结构:

-configuration

   -properties(属性)

       -property

   -settings(全局配置参数)

       -setting

   -plugins(插件)

       -plugin

   -typeAliases(别名)

       -typeAliase

       -package

   -environments(环境)

       -environment

           -transactionManager(事务管理)

           -dataSource(数据源)

   -mappers(映射器)

       -mapper

       -package

4.1

属性值定义。properties标签中可以定义属性值,也可以引入外部配置文件。无论是内部定义还是外部引入,都可以使用${name}获取值。

例如:我们可以将数据源配置写到外部的db.properties中,再使用properties标签引入外部配置文件,这样可以做到动态配置数据源。

1、编写db.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456

2、在配置文件中引入db.properties

<!--数据库文件-->
    <properties resource="db.properties"></properties>
    <!--配置数据源-->
    <environments default="mysql">
        <environment id="mysql">
            <!--事务类型-->
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

4.2

是配置MyBatis运行时的一些行为的,例如缓存、延迟加载、命名规则等一系列控制性参数。后期我们会使用该标签配置缓存和延迟加载等。

在配置文件中开启二级缓存:

<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>

开启N+1查询的延迟加载:

<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
</settings>

4.3


MyBatis对常用类有默认别名支持,比如java.lang.Stirng的别名为string。除此之外,我们也可以使用设置自定义别名。

为一个类配置别名

<typeAliases>
    <typeAlias type="全类名" alias="别名"></typeAlias>
</typeAliases>

1、配置文件

<!--配置别名-->
    <typeAliases>
        <typeAlias type="com.zj.pojo.User" alias="User"></typeAlias>
    </typeAliases>

2、映射文件

<!--查询全部-->
       <select id="selectAllUser" resultType="User">
            SELECT * FROM user;
       </select>

为一个所有包下的所有类配置别名

<typeAliases>
  <package name="包名"></package>
</typeAliases>

此时该包下的所有类都有了别名,别名省略包名,和类名相同。

1、配置文件

<!--配置别名-->
    <typeAliases>
        <package name="com.zj.pojo"/>
    </typeAliases>

2、映射文件

<!--分页查询2-->
    <select id="getUserByPage2" resultType="User" parameterType="PageQuery">
        SELECT * FROM user LIMIT #{startIndex},#{pageSize}
    </select>

4.4

是配置MyBatis插件的。插件可以增强MyBatis功能,比如进行sql增强,打印日志,异常处理等。使用该标签配置分页插件。

<plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 设置数据库类型-->
            <property name="helperDialect" value="mysql"/>
        </plugin>
    </plugins>

4.5

可以为MyBatis配置数据环境。

事务管理

<environments default="mysql">
  <environment id="mysql">
    <!-- JDBC:使用JDBC的提交和回滚 MANAGED:不做事务处理-->
    <transactionManager type="JDBC"></transactionManager>
  </environment>
</environments>

连接池

<environments default="mysql">
  <environment id="mysql">
    <transactionManager type="JDBC"></transactionManager>
    <!-- 连接池设置 -->
    <dataSource type="POOLED">
      <!-- 数据源设置... -->
    </dataSource>
  </environment>
</environments>

dataSource的type属性:

  • POOLED:使用连接池管理连接,使用MyBatis自带的连接池。
  • UNPOOLED:不使用连接池,直接由JDBC连接。
  • JNDI:由JAVAEE服务器管理连接,如果使用Tomcat作为服务器则使用Tomcat自带的连接池管理。

4.6

用于注册映射文件或持久层接口,只有注册的映射文件才能使用,共有四种方式都可以完成注册:

1、使用相对路径注册映射文件

<mappers>
        <mapper resource="com/zj/mapper/UserMapper.xml"/>
    </mappers>

2、使用绝对路径注册映射文件

<mappers>
      <mapper url="D:\Java\code\learnMyBatis\src\main\resources\com\zj\mapper\UserMapper.xml"></mapper>
    </mappers>

3、注册持久层接口(映射文件和持久层路径一样,文件名也一样)

<!--注册映射文件(项目加载的时候先加载的是核心配置文件)-->
    <mappers>
        <mapper class="com.zj.mapper.UserMapper"/>
    </mappers>

4、注册一个包下的所有持久层接口

<!--注册映射文件(项目加载的时候先加载的是核心配置文件)-->
    <mappers>
        <package name="com.zj.mapper"/>
    </mappers>

五、MyBatis映射文件


5.1

标签的作用的自定义映射关系。

MyBatis可以将数据库结果集封装到对象中,是因为结果集的列名和对象属性名相同,当POJO属性名和数据库列名不一致时,MyBatis无法自动完成映射关系。

此时有两种解决方案:

  1. Sql语句的查询字段起与POJO属性相同的别名。
<!--查询全部老师-->
    <select id="findAllTeachers" resultType="Teacher">
        SELECT tid,tname as teacherName FROM teacher;
    </select>

  2、自定义映射关系

  • 在映射文件中,使用自定义映射关系
  • 标签中,使用resultMap属性代替resultType属性,使用自定义映射关系。5.2 、用来定义可重用的Sql片段,通过引入该片段。如:Sql语句的查询字段起与POJO属性相同的别名,该Sql片段就可以重用。5.3 特殊字符处理在Mybatis映射文件中尽量不要使用一些特殊字符,如:<,>等。我们可以使用符号的实体来表示:六、MyBatis动态Sql6.1  一个查询的方法的Sql语句不一定是固定的。比如电商网站的查询商品,用户使用不同条件查询,Sql语句就会添加不同的查询条件。此时就需要在方法中使用动态Sql语句。标签内的Sql片段在满足条件后才会添加,用法为:。例如:根据不同条件查询用户:1、持久层接口添加方法2、映射文件3、测试if中的条件不能使用&&/||,而应该使用and/orif中的条件可以直接通过属性名获取参数POJO的属性值,并且该值可以调用方法。where后为什么要加1=1?任意条件都可能拼接到Sql中。如果有多个条件,从第二个条件开始前都需要加And关键字。加上1=1这个永久成立的条件,就不需要考虑后面的条件哪个是第一个条件,后面的条件前都加And关键字即可。 6.2 、可以代替sql中的where 1=1 和第一个and,更符合程序员的开发习惯,使用后的映射文件如下:标签用在update语句中。借助,可以只对有具体值的字段进行更新。会自动添加set关键字,并去掉最后一个if语句中多余的逗号。6.3 、、chose:父标签when:相当于if...else if,只要有一个条件成立,其它的都不判断了otherwise:相当于else,若所有条件都不成立,则执行otherwisewhen至少设置一个,otherwise最多设置一个1、持久层2、映射文件6.4 foreach遍历数组类似JAVA中的for循环,可以遍历集合或数组。有如下属性:collection:遍历的对象类型open:开始的sql语句close:结束的sql语句separator:遍历每项间的分隔符item:表示本次遍历获取的元素,遍历List、Set、数组时表示每项元素,遍历map时表示键值对的值。index:遍历List、数组时表示遍历的索引,遍历map时表示键值对的键。我们使用遍历数组进行批量删除。 1、持久层接口添加方法2、映射文件3、测试6.5 foreach遍历Collection遍历List和Set的方法是一样的,我们使用遍历List进行批量添加。1、持久层接口添加方法2、映射文件3、测试 6.6 foreach遍历Map我们使用遍历Map进行多条件查询。1、持久层接口添加方法2、映射文件3、测试
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的政府项目管理平台附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的政府项目管理平台附带文章和源代码设计说明文档ppt
8 2
|
3天前
|
JavaScript Java 测试技术
基于ssm+vue.js的框架失物招领信息交互平台附带文章和源代码设计说明文档ppt
基于ssm+vue.js的框架失物招领信息交互平台附带文章和源代码设计说明文档ppt
10 1
|
5天前
|
JavaScript Java 测试技术
基于SSM框架的童装购买平台微信小程序+vue.js附带文章和源代码设计说明文档ppt
基于SSM框架的童装购买平台微信小程序+vue.js附带文章和源代码设计说明文档ppt
11 1
|
5天前
|
XML Java 数据库连接
利用MyBatis框架操作数据库2
利用MyBatis框架操作数据库
15 2
|
5天前
|
Java 数据库连接 测试技术
利用MyBatis框架操作数据库1
利用MyBatis框架操作数据库
16 1
|
10天前
|
Java 关系型数据库 MySQL
SpringBoot整合JUnit、MyBatis、SSM
SpringBoot整合JUnit、MyBatis、SSM
20 4
|
19天前
|
SQL 缓存 Java
【框架】MyBatis 框架重点解析
【框架】MyBatis 框架重点解析
19 0
|
19天前
|
SQL Java 数据库连接
【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL(下)
【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态
14 0
|
19天前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
143 1
|
17天前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档