在项目开发中,数据库中的字段名不一定和实体类的类名完全相同(当然大小写忽略),那么就可以在sql映射文件中解决此问题

一.创建需要的数据库和表

编写sql脚本,在navicat for mysql中执行后生成表

 CREATE TABLE orders(
order_id INT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(20),
order_price FLOAT
);
INSERT INTO orders(order_no, order_price) VALUES('banana', 23);
INSERT INTO orders(order_no, order_price) VALUES('dogfood', 33);
INSERT INTO orders(order_no, order_price) VALUES('apple',8);

二.定义实体类

 package me.gacl.domain;

 /**
* Order实体类
*/
public class Order {
private int id;//id对应order_id
private String orderno;//no对应order_no
private String price;//price对应order_price public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getOrderno() {
return orderno;
} public void setOrderno(String orderno) {
this.orderno = orderno;
} public String getPrice() {
return price;
} public void setPrice(String price) {
this.price = price;
} @Override
public String toString() {
return "Order{" +
"id=" + id +
", name='" + orderno + '\'' +
", price='" + price + '\'' +
'}';
}
}

三.定义映射文件

1.首先定义OrderMapper.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">
<!--namespace一般命名成报名+映射名-->
<mapper namespace="me.gacl.mapping.OrderMapper">
<!--根据id查询对应的Order,但是这得不到我们想要的结果,因为实体类的属性名和数据库字段名不一样-->
<select id="getOrderById" parameterType="int" resultType="Order">
select * from orders where order_id=#{id}
</select>
<!--根据id查询对应的Order,可以得到我们想要的结果,因为我们将数据库中
查询到的字段名重命名,重命名后和实体类的字段名一样-->
<select id="getOrderByIdList" parameterType="int" resultType="Order">
select order_id id,order_no orderno,order_price price from orders where order_id=#{id}
</select>
<!--根据id查询对应的Order,通过resultMap指定属性名和字段名的一一对应关系-->
<select id="getOrderByIdMap" parameterType="int" resultMap="OrderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap id="OrderResultMap" type="me.gacl.domain.Order">
<!--通过id标签指定主键的对应关系-->
<!--通过result标签指定其他字段名与属性名的对应关系-->
<id property="id" column="order_id"></id>
<result property="orderno" column="order_no"></result>
<result property="price" column="order_price"></result>
</resultMap>
</mapper>

2.在mybatis-config.xml中注册映射OrderMapper.xml文件

 <!--resource值是映射文件所在的路径-->
<!--class值是映射接口类所在的路径-->
<mappers>
<!--mapper resource="mapping/userMapper.xml"></mapper>-->
<!--<mapper class="me.gacl.map.UserMapperI"></mapper>-->
<mapper resource="mapping/OrderMapper.xml"></mapper>
</mappers>

四.编写测试类

测试类OrderTest.java

 package me.gacl.domain;

 import me.gacl.Util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession; import java.util.List; /**
* 测试类
*/
public class OrderTest {
public void testGetOrderById(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//statement是映射sql的标识字符串,me.gacl.mapping.OrderMapper是OrderMapper.xml中mapper标签的namespace属性,
//getOrderById是select标签的id,通select标签的id值可以找到要执行的sql语句
String statement = "me.gacl.mapping.OrderMapper.getOrderById";
//执行查询全部操作
Order order = sqlSession.selectOne(statement,1);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(order);
}
public void testGetOrderByList(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//statement是映射sql的标识字符串,me.gacl.mapping.OrderMapper是OrderMapper.xml中mapper标签的namespace属性,
//getOrderByList是select标签的id,通select标签的id值可以找到要执行的sql语句
String statement = "me.gacl.mapping.OrderMapper.getOrderByIdList";
//执行查询全部操作
Order order = sqlSession.selectOne(statement,1);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(order);
}
public void testGetOrderByMap(){
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
//statement是映射sql的标识字符串,me.gacl.mapping.OrderMapper是OrderMapper.xml中mapper标签的namespace属性,
//testGetOrderByMap是select标签的id,通select标签的id值可以找到要执行的sql语句
String statement = "me.gacl.mapping.OrderMapper.getOrderByIdMap";
//执行查询全部操作
Order order = sqlSession.selectOne(statement,1);
//使用sqlSession执行完后需要关闭sqlSession
sqlSession.close();
System.out.println(order);
} public static void main(String[] args) {
OrderTest orderTest = new OrderTest();
//orderTest.testGetOrderById();
//orderTest.testGetOrderByList();
orderTest.testGetOrderByMap();
}
}

测试结果如下:

执行orderTest.testGetOrderById()

执行orderTest.testGetOrderByList()

执行orderTest.testGetOrderByMap()

五.总结

当实体类属性名与数据库中字段名不一致时,mybatis进行查询操作时无法查询出结果的解决方法有以下两个:

  解决办法一通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以将数据表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。

  解决办法二通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。

mabatis学习(四)----解决字段名与实体类属性名不同的冲突的更多相关文章

  1. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

  2. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...

  3. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  4. MyBatis学习笔记(四)——解决字段名与实体类属性名不相同的冲突

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演 ...

  5. 四:MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  6. MyBatis学习总结(四)——字段名与实体类属性名不相同的冲突的解决

    表中的字段名和表对应实体类的属性名称不一定都是完全相同的,这种情况下的如何解决字段名与实体类属性名不相同的冲突.如下所示: 一.准备演示需要使用的表和数据 CREATE TABLE my_user( ...

  7. MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  8. MyBatis学习总结_04_解决字段名与实体类属性名不相同的冲突

    一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...

  9. MyBatis解决字段名与实体类属性名不相同的冲突(四)

    一.创建表和表数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no ), order_price FLOA ...

随机推荐

  1. p1211 Prime Cryptarithm

    直接深搜+检验. #include <iostream> #include <cstdio> #include <cmath> #include <algor ...

  2. Non-UTF-8 code starting with '\xbb' in file

    一.错误问题 错误问题:Non-UTF-8 code starting with '\xbb' in file,如图所示: 二.分析问题 原因:程序文件夹中出现中文,运行的时候出现如下错误,导致出错的 ...

  3. Java中涉及到金额业务的处理

    一.MySql数据库中如何定义关于金额字段: 建议定义成[DECIMAL]类型,而不是float或者是double,因为这个两者是以二进制储存的,存在一定的误差.具体事例可参考https://blog ...

  4. Linux在shell中输入历史命令

    在Linux的shell中,经常输入的命令有很多雷同,甚至是一样的, 如果是长命令,再次敲一遍效率真的是很低, 不过可以通过Ctl+r,  查找history中以前输入的命令,很是好用. 按Ctrl+ ...

  5. iBeacon室内定位原理解析【转】

    目前,技术发展持续火热,因着iBeacon的定位精度和造价都比较符合国内室内定位的市场需求,下面我们来聊一聊iBeacon室内定位原理. iBeacon定位原理 iBeacon是一项低耗能蓝牙技术,工 ...

  6. PinkEx专用图标

  7. noip2014无线网络发射器选址

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的 129 条东西向街道和 129 条南北向街道所形成的网格状,并且 ...

  8. [LeetCode] 98. Validate Binary Search Tree(是否是二叉搜索树) ☆☆☆

    描述 解析 二叉搜索树,其实就是节点n的左孩子所在的树,每个节点都小于节点n. 节点n的右孩子所在的树,每个节点都大于节点n. 定义子树的最大最小值 比如:左孩子要小于父节点:左孩子n的右孩子要大于n ...

  9. spring cloud jwt用户鉴权及服务鉴权

    用户鉴权 客户端请求服务时,根据提交的token获取用户信息,看是否有用户信息及用户信息是否正确 服务鉴权 微服务中,一般有多个服务,服务与服务之间相互调用时,有的服务接口比较敏感,比如资金服务,不允 ...

  10. Tomcat压缩传输设置

    1.配置位于server.xml文件中的Connector节点下,具体参数如下: 参数 默认值 参数说明 compression off 是否开启压缩传输 compressableMimeType t ...