Mybatis属性和数据库表字段不一致处理

本文介绍了在Mybatis中当实体类属性与数据库表字段不匹配时的解决办法,包括设置别名和使用单独的resultMap。详细讨论了开发环境配置、项目结构、pom文件、建表文件、mapper.xml配置以及测试文件的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     mybatis中实体属性和表字段不一致处理方式

     方式主要有两种:1.设置别名; 2.将结果映射成单独的resultMap

    

     1.开发环境

     jdk1.7 eclipse4.5 mysql5.7 mybatis3.3

     2.项目结构图

    

     3.pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.neutron</groupId>
	<artifactId>flowers</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>flowers</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<!-- mybatis jar -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.1</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
			<scope>test</scope>
		</dependency>

		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.2</version>
		</dependency>
	</dependencies>

	<build>
		<defaultGoal>compile</defaultGoal>
	</build>
</project>
     4.数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=root
     5.Mybatis配置文件
<?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>
	<!-- 作为属性值引入到conf.xml中 -->
	<properties resource="db.properties" />
	
	<!-- 配置实体类的别名 -->
	<typeAliases>
		<typeAlias type="com.neutron.flowers.entity.User" alias="User"/>
		<typeAlias type="com.neutron.flowers.entity.Order" alias="Order"/>
	</typeAliases>

	<!-- development : 开发模式 work : 工作模式 -->
	<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="${name}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="com/neutron/flowers/mapper/orderMapper.xml"/>
	</mappers>
	
</configuration>

     6.建表文件    

CREATE TABLE orders(
	order_id INT PRIMARY KEY AUTO_INCREMENT,
	order_name VARCHAR(20)
);
INSERT INTO orders(order_name) VALUES('aaaa');
INSERT INTO orders(order_name) VALUES('bbbb');
INSERT INTO orders(order_name) VALUES('cccc');

     7.实体类,请注意实体类属性和数据库表中字段是不一致的    
package com.neutron.flowers.entity;
/**
 * 测试实体类和数据库表字段不一致处理情况
 * @author zhanght
 *
 */
public class Order {
	private int id;
	private String name;
	
	public Order() {
		super();
	}

	public Order(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Order [id=" + id + ", name=" + name + "]";
	}
	
}
    

      8.mapper.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相当于Id,需要唯一,此处设置为实体类包名+mapper文件名 -->
<mapper namespace="com.neutron.flowers.mapper.orderMapper"> 
	<!-- 当实体类属性和数据库字段不一致情况 -->
	<select id="query" parameterType="int" resultType="Order">
		select order_id id, order_name name from orders where order_id = #{id};
	</select>
	
	<select id="queryforMap" parameterType="int" resultMap="orderResult">
		select order_id, order_name from orders where order_id = #{id};
	</select>
	<resultMap type="Order" id="orderResult">
		<id property="id" column="order_id"/>
		<result property="name" column="order_name"/>
	</resultMap>
</mapper>
    

     9.测试文件    

package com.neutron.flowers;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.neutron.flowers.entity.Order;
import com.neutron.flowers.entity.User;
import com.neutron.flowers.utils.MybatisUtils;

import junit.framework.Assert;
import junit.framework.TestCase;

public class OrderTest extends TestCase {
	/**
	 * 别名处理方式1
	 */
	@Test
	public void testAliasQuery()
	{
		SqlSession session = MybatisUtils.openSession(true);
		String statement = "com.neutron.flowers.mapper.orderMapper.query";
		Order order = session.selectOne(statement, 1);
		System.out.println(order);
	}
	
	/**
	 * 别名处理方式2
	 */
	@Test
	public void testAliasQuery2Map()
	{
		SqlSession session = MybatisUtils.openSession(true);
		String statement = "com.neutron.flowers.mapper.orderMapper.queryforMap";
		Order order = session.selectOne(statement, 1);
		System.out.println(order);
	}
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值