MyBatis学习总结(三)——优化MyBatis配置文件中的配置

MyBatis(三) MyBatis 文章目录 MyBatis 十.复杂查询环境搭建 1.多对一处理 2.一对多处理 3.小结: 十一.动态SQL 1.环境搭建 2.if语句 3. choose(when,otherwise) 4. trim(where、set) 5.SQL片段 6.Foreach 十二.缓存 1.简介 2.MyBatis缓存 3.一级缓存 4.二级缓存 5.缓存原理 6.自定义缓存 十.复杂查询环境搭建 1.多对一处理 例如:多个学生对应一个老师 对于学生这边而言:关联 多 阅读详情

MyBatis学习总结(三)——优化MyBatis配置文件中的配置

一、连接数据库的配置单独放在一个properties文件中

  之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4     <environments default="development">
 5         <environment id="development">
 6             <transactionManager type="JDBC" />
 7             <!-- 配置数据库连接信息 -->
 8             <dataSource type="POOLED">
 9                 <property name="driver" value="com.mysql.jdbc.Driver" />
10                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
11                 <property name="username" value="root" />
12                 <property name="password" value="XDP" />
13             </dataSource>
14         </environment>
15     </environments>
16     
17 </configuration>
复制代码

  其实我们完全可以将数据库的连接配置信息写在一个properties文件中,然后在conf.xml文件中引用properties文件,具体做法如下:

  1、在src目录下新建一个db.properties文件,如下图所示:

  

  在db.properties文件编写连接数据库需要使用到的数据库驱动,连接URL地址,用户名,密码,如下:

1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/mybatis
3 name=root
4 password=XDP

  2、在MyBatis的conf.xml文件中引用db.properties文件,如下:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4 
 5     <!-- 引用db.properties配置文件 -->
 6     <properties resource="db.properties"/>
 7     <!-- 
 8         development : 开发模式
 9         work : 工作模式
10      -->
11     <environments default="development">
12         <environment id="development">
13             <transactionManager type="JDBC" />
14             <!-- 配置数据库连接信息 -->
15             <dataSource type="POOLED">
16                 <!-- value属性值引用db.properties配置文件中配置的值 -->
17                 <property name="driver" value="${driver}" />
18                 <property name="url" value="${url}" />
19                 <property name="username" value="${name}" />
20                 <property name="password" value="${password}" />
21             </dataSource>
22         </environment>
23     </environments>
24     
25 </configuration>
复制代码

二、为实体类定义别名,简化sql映射xml文件中的引用

  之前,我们在sql映射xml文件中的引用实体类时,需要写上实体类的全类名(包名+类名),如下:

<!-- 创建用户(Create) -->
<insert id="addUser" parameterType="me.gacl.domain.User">
    insert into users(name,age) values(#{name},#{age})
</insert>

  parameterType="me.gacl.domain.User"这里写的实体类User的全类名me.gacl.domain.User,每次都写这么一长串内容挺麻烦的,而我们希望能够简写成下面的形式

<insert id="addUser2" parameterType="_User">
    insert into users(name,age) values(#{name},#{age})
</insert>

  parameterType="_User"这样写就简单多了,为了达到这种效果,我们需要在conf.xml文件中为实体类="me.gacl.domain.User"定义一个别名为"_User",具体做法如下:
  在conf.xml文件中<configuration></configuration>标签中添加如下配置:

<typeAliases>
    <typeAlias type="me.gacl.domain.User" alias="_User"/>
</typeAliases>

  这样就可以为me.gacl.domain.User类定义了一个别名为_User,以后_User就代表了me.gacl.domain.User类,这样sql映射xml文件中的凡是需要引用me.gacl.domain.User类的地方都可以使用_User来代替,这就达到了一个简化实体类引用的目的。

  除了可以使用<typeAlias type="me.gacl.domain.User" alias="_User"/>这种方式单独为某一个实体类设置别名之外,我们还可以使用如下的方式批量为某个包下的所有实体类设置别名,如下:

复制代码
<!-- 配置实体类的别名,配置实体类别名的目的是为了在引用实体类时可以使用实体类的别名来代替实体类,达到简写的目的 -->
    <typeAliases>
        <!-- 为实体类me.gacl.domain.User配置一个别名_User -->
        <!-- <typeAlias type="me.gacl.domain.User" alias="_User"/> -->
        <!-- 为me.gacl.domain包下的所有实体类配置别名,MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名
        比如me.gacl.domain.User这个实体类的别名就会被设置成User
         -->
        <package name="me.gacl.domain"/>
    </typeAliases>
复制代码

  <package name="me.gacl.domain"/>就表示为这个包下面的所有实体类设置别名。MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名,比如me.gacl.domain.User这个实体类的别名就会被设置成User。

评论

#1楼 2015-01-31 17:43 巧克力键盘  

  
 

一不留神你就开始学框架了啊?真快哦。

 
   
  

#2楼[楼主] 2015-01-31 19:31 孤傲苍狼  

  
 

@巧克力键盘
这些东西在平时开发中一直在使用着,有时间了就想好好总结一下!

 
   
  

#3楼 2015-07-08 15:22 小嫩芽儿  

  
 

lz,为啥我引用.properties的数据库配置,不成功啊,变量替换不了??${url}还是原字符

 
   
  

#4楼 2015-09-09 17:43 归去来兮21  


  
 

改变别名时有个问题 就是typeAliases在conf.xml中的位置,如果放在configuration中的最下面的话会包如下错误
conf.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>

<!-- 引用properties文件 -->
<properties resource="db.properties" />



<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>



<mappers>
<!-- 注册userMapper.xml文件, 
userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
<mapper resource="com/guozz/myBatis/mybtis_study/mapper/userMapper.xml"/>
<mapper class="com.guozz.myBatis.mybtis_study.mapper.UserMapperI"/> 
</mappers>

<typeAliases>
<typeAlias type="com.guozz.myBatis.mybtis_study.domain.User" alias="_User"/>
</typeAliases>
</configuration>

错误为
org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 35; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
根据报错看来mybatis中对configuration中的配置是有顺序问题的,调整后的conf.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>

<!-- 引用properties文件 -->
<properties resource="db.properties" />

<typeAliases>
<typeAlias type="com.guozz.myBatis.mybtis_study.domain.User" alias="_User"/>
</typeAliases>


<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>



<mappers>
<!-- 注册userMapper.xml文件, 
userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
<mapper resource="com/guozz/myBatis/mybtis_study/mapper/userMapper.xml"/>
<mapper class="com.guozz.myBatis.mybtis_study.mapper.UserMapperI"/> 
</mappers> 

</configuration>
此时在运行测试就不报错了



mybatis-3.4.5官方参考文档(中文版) 本人依据mybatis官网中文参考文档制作的PDF书籍,带书签和重点划线标注+实际应用注释 立即下载

相关推荐

uniapp原生安卓插件开发之路

声明: 我的功能需求:全局悬浮框,也就是在其他应用上依旧能悬浮。查遍uni文档,无法实现,甚至native.js也无法实现,无奈只能走上原生插件开发这条不归路了。(吐槽:天天写前端js,突然写了下android简直要炸,public static String啥的,var不香嘛,不过别人严谨肯定还是有别人道理的,加油吧,争取能入个门!) 本人不懂安卓开发,完全安卓小白,所以安卓方面可能表达的不是很好,安卓代码可能写的不优美,但我功能最终还是实现了。但是为了需求,能力总能被“逼”出来。有描述错误的还望指正

Jone's Area 1万+

mybatis从入门到精通

一、简单例子 说明:本例基于mybatis-3.2.6。 1.新建web项目mybatis,引入jar包mybatis-3.2.6.jar。 2.新建java类com.hanjun.entity.User(数据库中建立与些类对应的t_user表) private int id; private String userName; private String userAge; private String userAddress; 3.在User类同包下新...

apartonely的专栏 584

0基础手把手搭建 Trae\+Seedance2\.0 真人短剧生成智能体(可直接运行)

前言:本文专为0基础新手编写,全程无复杂代码、无专业术语,一步一截图提示(操作路径清晰),只需跟着点鼠标、复制粘贴,就能搭建出可自动生成真人短剧的智能体,生成的短剧可直接导出发布。核心工具:Trae(字节跳动AI IDE,免费)+ Seedance2.0(真人视频生成API,公测免费),无需提前学习编程、设计,全程10-15分钟搞定。 适用人群:0基础小白、想快速生成真人短剧(自媒体、短视频创作者)、无需懂技术即可实现自动化短剧生成的人群。

skygulangfendouz的专栏 1058

mybatis 动态sql

mybatis 动态sql 标签 if --> 使用OGNL表达式, 能直接调用方法(包括静态方法),能使用 三元运算符, 能做逻辑判断 choose(when,otherwise) foreach trim(where,set) if 标签 exmaple <!-- test ----- OGNL 表达式,特殊字符需要使用转义字符 含义: 满足 条件才会拼接 if 标签中的sql...

weixin_43723635的博客 646

薄膜比拟、开口截面扭转承载力以及风电混塔水平缝张开状态下抗扭承载力推导

风电混塔水平缝张开状态下的抗扭承载力推导,从弹性力学说起

George的博客 873

MIT液态神经网络(LNN)深度研究:原理、应用与未来

液态神经网络(Liquid Neural Networks, LNNs)代表了人工智能领域,特别是神经网络架构设计中的一次范式转移。它从根本上挑战了传统深度学习模型依赖大规模参数和静态架构的惯例,转而寻求一种更为动态、高效且受生物神经系统启发的计算范式。LNN的核心创新在于其将神经网络的计算过程从离散的、基于时间步的更新,转变为连续的、由微分方程驱动的动态系统演化。这种转变不仅赋予了模型前所未有的适应性和鲁棒性,还使其在处理复杂的时序数据和因果推断任务时表现出色。本章节将深入剖析LNN的技术原理,从其核心的

步子哥的博客 2590

Mybatis三步手写

1、引用依赖 <!-- 读取xml文件 --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6....

看图说话 296

Agentic AI商业化落地指南:提示工程架构师的7步优化法

Agentic AI(具备自主感知、决策与行动能力的智能体系统)是未来AI商业化的核心方向,其价值在于将大模型的“认知能力”转化为“实际行动”,解决复杂商业场景中的自动化与个性化需求。而提示工程(Prompt Engineering)作为连接人类意图与智能体行为的“翻译器”,直接决定了智能体的可控性、效率与用户体验,是Agentic AI商业化落地的关键支撑。本文结合第一性原理与工程实践,提出提示工程架构师的“7步优化法”,覆盖从“商业目标定义”到“规模化推广”的全流程。通过理论框架推导架构设计拆解。

AI架构全栈开发实战笔记 1万+

03、MyBatis学习总结(三)——优化MyBatis配置文件中的配置

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一、连接数据库的配置单独放在一个properties文件中   之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: 1 &lt;?xml version="1.0" encoding="UTF-8"?&...

baochanghong的专栏 136

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2007

线结构光相机原理详解以及精度控制总结

摘要:线阵结构光相机是工业三维检测的核心设备,结合线阵相机的高分辨率与结构光的主动三维成像能力。其工作原理基于线激光投射、逐线扫描、亚像素级条纹提取及三角测量法实现三维重建。精度受硬件、校准、环境和算法四因素影响,需通过优化硬件选型(如小像元相机、窄线宽激光)、精准校准(相机内参、激光平面)、环境控制(遮光、隔振、恒温)及算法优化(Steger算法、点云后处理)来提升。典型应用(卷材、轨道检测)中深度精度可达5-20μm,需根据场景需求平衡参数配置。

start_up_go的博客 940

SQL语句中三目运算式子需要注意问题小结

一般情况下句式:sql中的三目运算符:case字段isnullthen'true'else参数end 例子:state如果为null就显示'n',否则显示state的值 case when state is null then 'n' else...

兔的骄傲 2004

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mybatis 自定义转换规则_Mybatis框架学习_5_自定义类型转换器

1.背景为什么要做自定义类型转换器。就是为了解决 java 类中的属性和数据库表字段属性类型不一致的情况。例如如下案例:我们可以看到 id、name、age的属性表与实体类都是一一对应的,但是 sex确不对应,此时如果我们不进行类型转换,那么向表 person 插入数据的时候会报错,查询的时候性别 sex 会显示空值(NULL),为了解决类似这种情形,我们需要自定义类型转换器;2.具体实现步骤我...

weixin_29702195的博客 376

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

通过项目逐步深入了解Mybatis<三>

相关阅读: 1、通过项目逐步深入了解Mybatis<一> 2、 通过项目逐步深入了解Mybatis<二> 本项目所有代码及文档都托管在 Github地址:https://github.com/zhisheng17/mybatis Mybatis 高级知识 安排:对订单商品数据模型进行分析 订单商品数据模型 数据模...

weixin_34248118的博客 153

三、Mybatis的OGNL表达式

功能:OGNL表达式主要用于参数值的传递,以及“”、“”等标签的使用 注意: OGNL直接支持java中的方法(只支持JDK中的方法,不支持其他JAR包中的方法)。 例: &amp;amp;amp;amp;amp;lt;if test=&amp;amp;amp;amp;quot;Command != null and !&amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot;.equals(Command.

panchang199266的博客 8684

Mybatis(三)OGNL表达式

(1)

qq_36675851的博客 1137

mybatis的xml映射文件,dao接口类,entity实体类

xml映射文件的头文件: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&gt; Book实体类(成员变量与数据库的一张表的属性

等待新娘的僵尸的博客 1025

SpringMVC 和 mybatis 整合之修改(三)

在上一篇 商品查询 的基础上,对商品添加修改功能。     productSevice 接口:   productServiceImpl 实现类:   ProductsMapper.xml:   参数绑定: Controller 类: package lxf.controller; import java.util.List; import org.sp...

QLiuQ 419

Mybatis3全面详解

Mybatis3 1. MyBatis的介绍 (1) MyBatis的历史 原是Apache的一个开源项目,iBatis,2010年6月这个项目由Apache Software Foundation 迁移到了 Goodle Code,随着开发团队转投Google code旗下,iBatis3.X正式更名为MyBatis,代码于2013年11月迁移到Github。 iBatis 一词 来源于 internet 和 abatis的组合。是一个基于Java的持久层框架。iBatis提供的持久层框架包括Sql M

想看什么文章都可以私信给我,综合性博客。 3196
上一篇: MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
下一篇: MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值