mybatis 在typeAliases别名时报错的解决

目录
  • mybatis 在typeAliases别名时报错
    • 原因
  • mybatis typeAliases别名标签
    • 单个的取别名
    • 一次性给所有pojo取别名
    • 内置别名

mybatis 在typeAliases别名时报错

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 36; columnNumber: 18; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
at me.gacl.test.Test1.main(Test1.java:20)

原因

元素顺序错误,元素类型为 "configuration" 的内容必须匹配

"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"

修改如下图后,正常。

mybatis typeAliases别名标签

在xxxxMapper.xml文件中User无论是作为参数还是作为查询返回数据类型,都需要写上全限定名,实际可以写上简单类名即可,但是需要配置别名

MyBatis框架提供了两种别名机制,一种是自定义别名,一种是内置别名

自定义别名

单个的取别名

第一步:修改mybatis-config.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd约束 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <settings>
  	<!-- 使用驼峰命名法 -->
  	<setting name="mapUnderscoreToCamelCase" value="true"/>
  </settings>
  <!-- ####################################################  -->
   <typeAliases>
   		<!--typeAlias子标签:设置单个类型的别名
   			type:pojo或vo的数据类型,值为全限定名
   			alias:别名,一般都使用类的简单名称
   		  -->
   		<typeAlias type="com.mybatis.pojo.User" alias="user"/>
   		<!-- <typeAlias type="com.mybatis.pojo.XXX" alias="xxx"/> -->
   </typeAliases>
   <!-- ####################################################  -->
  <environments default="dev_mysql">
    <environment id="dev_mysql">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/gj1?characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  	<mapper resource="com\mybatis\mapper\UserMapper.xml"/>
  </mappers>
</configuration>

第二步:修改UserMapper.xml

<?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.mybatis.mapper.UserMapper">
    <!-- 单行查询功能
      resultType : 返回类型,必须和对应映射接口方法的返回类型一致,值必须为全限定名
      此时的resultType必须跟mybatis-config.xml中alias属性值一致
     -->
     <select id="selectByPrimaryKey" parameterType="int" resultType="user">
      select id u_c_a_id,username u_c_a_name,password u_c_a_pwd,age from user where id=#{id}
     </select>

</mapper>

一次性给所有pojo取别名

第一步:修改mybatis-config.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd约束 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <settings>
  	<!-- 使用驼峰命名法 -->
  	<setting name="mapUnderscoreToCamelCase" value="true"/>
  </settings>
<!--    <typeAliases>
   		typeAlias子标签:设置单个类型的别名
   			type:pojo或vo的数据类型,值为全限定名
   			alias:别名,一般都使用类的简单名称

   		<typeAlias type="com.mybatis.pojo.User" alias="user"/>
   		<typeAlias type="com.mybatis.pojo.XXX" alias="xxx"/>
   </typeAliases> -->
    <!-- ####################################################  -->
   <typeAliases>
   		<!--
   			package标签:使用包扫描配置别名
   			为对应包下面的所有类都取了别名
   			默认使用简单的名称作为别名
   		  -->
   		<package name="com.mybatis.pojo"/>
   </typeAliases>
   <!-- ####################################################  -->
  <environments default="dev_mysql">
    <environment id="dev_mysql">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/gj1?characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  	<mapper resource="com\mybatis\mapper\UserMapper.xml"/>
  </mappers>
</configuration>

第二步:修改UserMapper.xml

<?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.mybatis.mapper.UserMapper">
    <!-- 单行查询功能
      resultType : 返回类型,必须和对应映射接口方法的返回类型一致,值必须为全限定名
      此时的resultType为pojo的简单名,可以为user,也可以为User
     -->
     <select id="selectByPrimaryKey" parameterType="int" resultType="user">
      select id u_c_a_id,username u_c_a_name,password u_c_a_pwd,age from user where id=#{id}
     </select>
</mapper>

内置别名

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis中基于别名typeAliases的设置

    MyBatis 别名typeAliases的设置 第一种:通过在配置文件中typeAlias节点设置type的方式 <?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&

  • Mybatis实现单个和批量定义别名typeAliases

    目录 单个和批量定义别名typeAliases 一.使用和不使用别名的区别是 二.如何定义单个别名 三.如何批量定义别名 typeAliases别名配置元素详述 单个和批量定义别名typeAliases 使用Mybatis的别名typeAliases可以在xml文件里非常方便的使用类,而不需要写出这个类的全部路径 一.使用和不使用别名的区别是 不使用别名时:parameterType中需要写出这个类的全路径,特别麻烦 <insert id="saveCity" keyProper

  • Mybatis配置之<typeAliases>别名配置元素解析

    在前面的文章<Mybatis配置之<properties>属性配置元素详述>,我们讲述了<properties>标签元素的配置和使用方法. 在这篇文章中,我们来说说<typeAliases>标签元素,这个元素主要是用于对类型进行别名控制,具体什么意思呢?我们下面用一个示例说明,看了之后我相信你就会明白了. 这里我们贴出之前的UserDao对应的mapper文件 如下所示: <?xml version="1.0" encoding=&

  • mybatis typeAliases 给实体类起别名的方法

    typeAliases 在我们开发中,Mapper中的实体类每次都要写上包名,是不是特别的麻烦 针对这一现象,myabtis提供了解决方案,简化开发 typeAliases标签 第一种用法 在主配置文件中 配置[不是映射文件,而是主配置文件] <typeAliases> <!--type:实体类的具体全限定类名, alias:别名--> <typeAlias type="com.yixuexi.entity.User" alias="User&q

  • mybatis取别名typeAliases标签的位置放错导致报错的解决

    目录 mybatis取别名typeAliases标签的位置放错导致报错 因为<typeAliases>位置放错,报如下错 解决方案 mybatis取别名问题 今天学习Mybatis时在取别名这里总是报错 解决方案 mybatis取别名typeAliases标签的位置放错导致报错 学习mybatis的过程中,在全局配置文件SqlMapConfig.xml(名字自己取,可能不同)的配置中遇到许多坑. 在使用typeAliases标签取别名的时候, 因为<typeAliases>位置放错

  • mybatis 在typeAliases别名时报错的解决

    目录 mybatis 在typeAliases别名时报错 原因 mybatis typeAliases别名标签 单个的取别名 一次性给所有pojo取别名 内置别名 mybatis 在typeAliases别名时报错 Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### Cause: org.apache.ibatis

  • Mybatis详解在注解sql时报错的解决方法

    目录 错误: 文件结构 BookMapper.java BookMapperSQL .java Mybatis的配置文件 分析: 错误: 在做Mybatis用注解方式来注入sql的练习时,报了这样子的错误. 遇到错误很正常,然后我又从学了一遍今天刚刚学的内容,温故而知新嘛. 错误问题如下: 文件结构 BookMapper.java public interface BookMapper { @SelectProvider(type = BookMapperSQL.class,method = "

  • Typescript中使用引用路径别名报错的解决方法

    在TS中引用路径别名提示找不到模块或者相应的声明 1.ts中使用路径别名报错 在react中通常路径别名都是在webpack的webpack.config.js文件中配置的,但是在引入了ts之后,webpack中的路径别名引用失效了此时我们需要在跟src文件同级目录的tsconfig.json文件中添加配置: 注意要在compilerOptions中添加(webpack中的路径也需要配置) "compilerOptions": { "target": "e

  • Oracle环境通过SQL*PLUS本地登录时报错的解决过程

    一. 问题描述 今天在新机子(WINDOWS)上搭建Oracle环境,完了之后通过SQL*PLUS本地登录时报错: ora-01031 insufficient privileges ---权限不足 二. 解决过程 错误排除 1. 当时首先想到的是oracle不允许用sqlplus工具登录,但随即想法打消 sqlplus sys/admin as sysdba –成功登录! sqlplus sys/admin as sysdba --成功登录! 2. 带详细信息指定本机IP和实例登录 sqlpl

  • Python 使用os.remove删除文件夹时报错的解决方法

    os.remove不能用来删除文件夹,否则拒绝访问. # -*- coding:utf-8 -*-import osif __name__ == "__main__": os.remove('D:\\test') 运行结果: 删除空目录: # -*- coding:utf-8 -*-import osif __name__ == "__main__": os.rmdir('D:\\test') 如果目录不为空会报错,如下: 删除目录(不论目录是否为空): # -*-

  • 从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法

    如下所示: Uncaught Error: [vuex] Do not mutate vuex store state outside mutation handlers 今天遇到一个问题,将Vuex中数组的值赋给新的数组,新数组push时报上面的错误,代码如下 <code class="language-javascript">this.maPartListTable = this.$store.state.vehicleMa.maPartListTable; </

  • 在pycharm中使用matplotlib.pyplot 绘图时报错的解决

    This application failed to start because it could not find or load the Qt platform plugin "windows" in " ". 百度谷歌了好久都没能解决这个问题都没能解决 开始我以为是缺少windows这个包,但是代码里并没有用到,所以我打断点去看代码到底问题出在哪里 发现问题出在matplotlib上面,我猜想是Qt和matplotlib版本不兼容导致的,于是我卸载了这两个插件

  • maven deploy时报错的解决方法

    今天在发布maven工程的时候,很奇怪,因为在本地package,install等等都没问题,但是打包的时候就是报错,日志如下: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project courier-rapi: Deployment failed: repository element was not specified

  • webpack搭建vue环境时报错异常解决

    目录 首先是配置package.json 然后安装webpack工具 运行webpack测试 4.运行webpack测试 配置各种loader(文件解析器) (1)配置入口(entry) (2)配置出口(output) (3)配置加载器(loader) (4)配置插件(plugin) 搭建本地服务器 今天用webpack手动搭建环境的时候,疯狂报错,好大会都进行不了下一步 首先是配置package.json //自动配置 npm init -y 一切都没有任何问题 然后安装webpack工具 n

  • 使用@Autowired注解引入server服务层方法时报错的解决

    目录 @Autowired注解引入server服务层方法时报错 网上搜的方法:还行 JavaBean属性 方法 关于@Autowired 注解时发生的错误 1.解决 2.解决 @Autowired注解引入server服务层方法时报错 contentTypeService in com.example.demo001.controller.ContentTypeController required a bean of type 'com.example.demo001.service.Conte

随机推荐