mabatis学习(四)----解决字段名与实体类属性名不同的冲突
在项目开发中,数据库中的字段名不一定和实体类的类名完全相同(当然大小写忽略),那么就可以在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学习(四)----解决字段名与实体类属性名不同的冲突的更多相关文章
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习笔记(四)——解决字段名与实体类属性名不相同的冲突
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演 ...
- 四:MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习总结(四)——字段名与实体类属性名不相同的冲突的解决
表中的字段名和表对应实体类的属性名称不一定都是完全相同的,这种情况下的如何解决字段名与实体类属性名不相同的冲突.如下所示: 一.准备演示需要使用的表和数据 CREATE TABLE my_user( ...
- MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习总结_04_解决字段名与实体类属性名不相同的冲突
一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...
- MyBatis解决字段名与实体类属性名不相同的冲突(四)
一.创建表和表数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no ), order_price FLOA ...
随机推荐
- django笔记 - 建站
1,建站步骤:1)django-admin.exe startproject mysite 创建完后的目录结构: - mysite # 对整个程序进行配置 - init - settings # 配置 ...
- Can't find kernel text map area from kcore
kernel : 4.9.51kexec-tools : 2.0.4 1.~ # ./kexec -p /boot/vmlinuz --initrd=/boot/initrd --command-li ...
- Centos 6.5 搭建阿里云yum源
Linux系统下yum源配置(Centos 6) 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo ...
- 创建springboot的聚合工程(二)
前篇已经成功创建了springboot的聚合工程并成功访问,下面就要开始子工程木块之间的调用: springboot项目的特点,一个工程下面的类必须要放在启动类下面的子目录下面,否则,启动的时候会报错 ...
- python-django rest framework框架之路由
路由 第一类:原始继承APIView # http://127.0.0.1:8000/api/v1/auth/ url(r'^auth/$', views.AuthView.as_view()), # ...
- java集合的实现细节--ArrayList和LinkedList
ArrayList和LinkedList的实现差异 List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表,ArrayList底层采用动态数组的形式保存每一个集合元素,Link ...
- Version Control System
Version Control System(版本控制系统),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型 ...
- fastjson SerializerFeature详解(转)
原文地址:fastjson SerializerFeature详解
- ActiveMQ 消息的重新投递
正常情况下:consumer 消费完消息后,会发送"标准确认"给 broker,这个确认对象以 MessageAck 类表征: // 省略其他代码.类中定义了各种确认的类型 pub ...
- Binary Analysis Tool安装使用教程
Binary Analysis Tool(BAT)是一个用于检测二进制文件使用到的开源组件,协助及早发现程序发布后可能会面临的开源协议解执的开源免费检测工具. 一.安装BAT和bat-extratoo ...