Mybatis-03 配置解析

Mybatis-03 配置解析

Mybatis系列文章已经完成上传:
一、什么是Mybatis
二、CRUD
三、配置解析
四、日志、分页
五、注解开发
六、动态Sql

配置解析

1、核心配置文件

mybatis-config.xml

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

2、环境配置

MyBatis 可以配置成适应多种环境

不过要记住:

尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。学会使用配置多套运行环境!

MyBatis默认的事务管理器就是JDBC,连接池:POOLED

3、属性

我们可以通过properties属性来实现引用配置文件

这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。

3.1 编写一个配置文件

创建一个db.properties文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root           #数据库账号
jdbc.password=root           #数据库密码

3.2 在配置文件引入

  <properties resource="db.properties">
    </properties>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理,事务控制由mybatis -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池,由mybatis管理 -->
            <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>

可以直接引入外部文件 ,可以在其中增加一些属性配置

如果两个文件有同一字段,优先使用外部配置文件的!

类型别名

类型别名是为 Java 类型设置一个短的名字。 存在的意义仅在于用来减少类完全限定名的冗余

1.类别名

当通过设置MyBatis配置文件 中的 typeAliases 属性后,就可以为 sql 映射文件中的输入 / 输出参数设置类型别名,然后在sql 映射配置文件中使用该别名。

配置文件:

<typeAliases>
     <typeAlias type="pojo.user" alias="user"/>
</typeAliases>

sql 映射配置文件,示例代码如下:

<select id="getUserList" resultType="user" >
      select * from mybatis.user
</select>

2.别名拓展

创建的包里可能也会存在其他多个 JavaBean对象类,这时候一个一个配置别名很麻烦,就需要批量定义别名,批量指定很简单,只要指定包名即可,其定义别名的规范就是对应包的类名首字母变为小写

配置文件:

<typeAliases>
    <package name="pojo"/>   
</typeAliases>

这时设置的包下的类就都有了别名,别名就是类名(首字母小写)。

3.注解配置别名

通过注解的方式来配置别名,在需要配置别名的类前通过 @Alias 注解即可,参数就是别名名称

示例代码:

@Alias("user")
public class user{
    //其他代码
}

映射器

1.相对类路径进行映射

<mappers >
    <mapper resource="xxx/xxx/xxxxMapper.xml"/>
</mappers>

2使用映射器接口实现类的完全限定类名

<mappers >
    <mapper class="xxx.xxxx.xxx.xxxxMapper"/>
</mappers>

注意:接口和它的Mapper文件必须同名,且在同一个包

3.将包内的映射器接口实现全部注册为映射器

<mappers >
    <package name="xxx.xxx.dao"/>
</mappers>

注意:接口和它的Mapper文件必须同名,且在同一个包

解决属性名和字段名不一致的问题

数据库:

1

实体类:

2

可以从上图看出,数据库中的pwd和实体类中的password不同,会导致以下结果:

3

解决方法

1.起别名

起别名,在字段名后用as对应属性名,pwd as password

<mapper namespace="com.Dao.UserDao">
    <select id="getUserList" resultType="pojo.user" >
        select id,name,pwd as password from mybatis.user
    </select>
</mapper>

2.使用resultMap

<resultMap id="user" type="pojo.user">
        <!--column数据库中的字段,property实体类中的属性-->
        <id column="id" property="id"/>
        <result column="name" property="name" />
        <result column="pwd" property="password" />
</resultMap>

<select id="getUserList" resultMap="user" >
        select * from mybatis.user
</select>

4

Test时,会出现bug:

  • 首先是:2 字节的 UTF-8 序列的字节 2 无效
    • 这个问题是因为在xml文件中的中文注释的问题,将xml文件的中文注释删除,解决
    • xml文件顶部的encoding=UTF-8改为encoding=UTF8可以解决问题
  • 第二个是:数据库连接问题
    • 设置setTimeZone=UTC,没有解决
    • 设置set-on-borrow=true,没有解决重启mysql,没有解决
    • 最终发现,mysql版本问题,而Maven导入的依赖包和mysql版本不同
  • resultMap 元素是 MyBatis 中最重要最强大的元素
  • ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。

个人博客为:
MoYu's Github Blog
MoYu's Gitee Blog

原文地址:https://www.cnblogs.com/MoYu-zc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1.pom.xml引入依赖 &lt;dependency&gt; &lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt; &lt;artifactId&gt;pagehelper&lt;/artifactId&gt; &lt;version&gt;5
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;!DOCTYPE configuration PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot; &qu
准备工作 ① 创建数据库&amp;数据表 ## 创建数据库 CREATE DATABASE `dbtest1`; ## 创建数据表 CREATE TABLE `t_user` ( `id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(20) DEF
MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、Mapper接口以及SQL映射文件的过程。这个过程可以通过MyBatis提供的逆向工程工具来完成,极大地方便了开发人员,避免了重复的代码编写,提高了开发效率。 创建逆向工程的步骤 1、添加依赖&amp;插件 &lt;!-- 控制Mave
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值。 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自
resultMap作用是处理数据表中字段与java实体类中属性的映射关系。 准备工作 ① 创建数据库&amp;数据表 CREATE DATABASE `dbtest1`; CREATE TABLE `t_emp` ( `emp_id` int NOT NULL AUTO_INCREMENT, `em
EHCache缓存针对于MyBatis的二级缓存。 MyBatis默认二级缓存是SqlSessionFactory级别的。 添加依赖 &lt;!-- MyBatis-EHCache整合包 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis.cac
MyBatis 提供了一级缓存和二级缓存的支持,用于提高数据库查询的性能,减少不必要的数据库访问。 一级缓存(SqlSession 级别的缓存) 一级缓存是 MyBatis 中最细粒度的缓存,也称为本地缓存。它存在于每个 SqlSession 的生命周期中,当 SqlSession 被关闭或清空时,
动态SQL是 MyBatis 中非常强大且灵活的功能,允许你根据不同的条件构建SQL查询。 这主要通过 &lt;if&gt;、&lt;choose&gt;、&lt;when&gt;、&lt;otherwise&gt;、&lt;foreach&gt;等标签实现。 查询场景 /** * 根据条件查询员工
本教程操作系统:windows10系统、DELL G3电脑。 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。在 MyBatis 中,配置数据库连接是非常重要的第一步。下面将详细介绍如何配置 MyBatis 的
今天小编给大家分享的是MyBatis批量查询、插入、更新、删除如何实现,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。
今天小编给大家分享的是Mybatis操作多数据源实现的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获...
本篇文章和大家了解一下mybatis集成到spring的方式有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。1 前言1.1 集成spring前使用mybat...
今天小编给大家分享的是mybatis-plus分页查询的3种方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获...
本篇内容主要讲解“mybatis之BaseTypeHandler怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis...
这篇文章主要介绍了mybatisforeach怎么传两个参数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mybatisforeach怎...
这篇“MyBatis映射文件中parameterType与resultType怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的...
这篇文章主要介绍“MyBatis怎么获取自动生成的键值”,在日常操作中,相信很多人在MyBatis怎么获取自动生成的键值问题上存在疑惑,小编查阅了各式资料,整理出
这篇文章主要讲解了“怎么去掉IntelliJIDEA中mybatis对应的xml文件警告”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入...
这篇文章主要介绍“MybatisPlus使用@TableId主键id自增长无效如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这...