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);
}
}