博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明
阅读量:3903 次
发布时间:2019-05-23

本文共 3073 字,大约阅读时间需要 10 分钟。

记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容:

运行测试类一直报错:

在这里插入图片描述
然后查看报错信息:
在这里插入图片描述
这一行刚好是注释所在行,于是删掉注释
再次运行成功了;
在这里插入图片描述

(类型处理器 插件 对象工厂暂时不用了解)

配置优化

别名

映射器

配置优化

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

之前只有mybatis-config.xml,现在新建db.properties:

#第一步优化:引入外部配置文件driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3308/data1?useSSL=true&userUnicode=true&characterEncoding=UTF-8username=heziyipassword=123456

xml文件部分修改如下

别名

类型别名是JAVA类型配置设置的一个短的名字,它只和XML配置有关,它存在的意义在于减少类完全限定名的冗余。如:

现在在自己的项目中加上:

关于resultmap

resultMap 中的id 和result 标签包含的属性相同,不同的地方在于, id 代表的是主键(或唯一值)的字段(可以有多个),它们的属性值是通过setter 方法注入的。id 和result 标签包含的属性。

column : 从数据库中得到的列名, 或者是列的别名。
property :映射到列结果的属性。可以映射简单的如“ username ”这样的属性,也可以映射一些复杂对象中的属性, 例如“ address.street.number ”,这会通过“ .”方式的属性嵌套赋值。
javaType : 一个Java 类的完全限定名,或一个类型别名(通过typeAlias 配置或者默认的类型)。如果映射到一个JavaB ean, MyB at is 通常可以自动判断属性的类型。如果映射到HashMap ,则需要明确地指定java Type 属性。
jdbcType : 列对应的数据库类型。JDBC 类型仅仅需要对插入、更新、删除操作可能
为空的列进行处理。这是JDBC j dbcType 的需要,而不是MyBatis 的需要。
**接口中定义的返回值类型必须和xml中配置的resultType 类型一致,否则就会因为类型
不一致而抛出异常。**返回值类型是由XML 中的resul tType (或resultMap 中的type )决定的,不是由接口中写的返回值类型决定的

在UserMapper.xml中修改resultType:(Usera是自定义的别名)

测试类:

@Test    public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao dao = sqlSession.getMapper(UserDao.class);//获得接口 User user = dao.getUserById(3); System.out.println(user); sqlSession.close(); }

运行结果:

在这里插入图片描述
也可以指定一个包名,在包名下搜索需要的JavaBean

扫描实体类的包,它的默认别名就为这个类的类名,首字母小写如果实体类十分多,建议使用扫描实体类的包名,这种方法不能自定义别名,但如果非要改也可以通过在实体上增加注解

映射器

名称映射规则

property属性或别名要和对象中属性的名字相同,实际匹配时,mybatis会先将两者都转化为大写形式,再判断是否相同

每一个Mapper.xml都需要在Mybatis的核心配置文件中注册!注册的 三种方式

方式一:

方式二:使用class文件绑定注册

使用class的注意点:

  • 接口和他的Mapper配置文件必须同名
  • 接口和他的Mapper配置文件必须在同一个包下

方式三:使用包扫描

<package name=com.kuang.dao"/>
使用包扫描的注意点:

  • 接口和他的Mapper配置文件必须同名
  • 接口和他的Mapper配置文件必须在同一个包下

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

问题:数据库中的字段名和实体属性名不一致

pojo.User下面private String password;
而数据库的字段为pwd

  • 起别名
  • 利用resultmap(结果集映射)
    查看表的字段:
    在这里插入图片描述
    实体中的数据名称:
public class User {
private int id; private String name; // private String pwd; private String password;} //省略getter setter tostring的方法

测试类:

@Test    public void query(){
SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao que = sqlSession.getMapper(UserDao.class); User user = que.query(2); System.out.println(user); sqlSession.close(); }

在不解决问题时输出:

在这里插入图片描述

原来的select语句:

(注释掉了)

改为:

显示结果发现pwd一项不再是null:(原来的select语句输出时pwd一项为null)

在这里插入图片描述

  • resultmap是mybatis中最强大的元素
  • Resultmap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系
  • Resultmap最优秀的地方在于,虽然你已经对它相当了解了,但是根本不需要显式地用到它们

转载地址:http://dvten.baihongyu.com/

你可能感兴趣的文章
32. 最长有效括号
查看>>
6. Z字形转换
查看>>
8. 字符串转整数(atoi)
查看>>
12. 整数转罗马数字
查看>>
15. 三数之和
查看>>
16. 最接近的三数之和
查看>>
18. 四数之和
查看>>
22. 括号生成
查看>>
24. 两两交换链表中的节点
查看>>
71. 简化路径
查看>>
77. 组合
查看>>
78. 子集
查看>>
89. 格雷编码
查看>>
刚开始学python,对脚本语言的一些理解
查看>>
matplotlib进行绘图——散点图
查看>>
matplotlib进行绘图——直方图
查看>>
需求文件requirements.txt的创建及使用
查看>>
300. 最长上升子序列
查看>>
445. 两数相加 II
查看>>
449. 序列化和反序列化二叉搜索树
查看>>