三种mybatis表的列名和对象属性名不一致处理方法
目录
三种mybatis表的列名和对象属性名不一致处理方法
1.使用 resultMap 映射
1)mapper
2)mapper.xml
3)测试代码
4)测试结果
编辑
2.使用别名
1)mapper
2)mapper.xml
3)测试代码
4)测试结果
3.使用 @Results 注解
1)mapper
2)mapper.xml
3)测试代码
4)测试结果
附录
1)NameMapper文件
2)NameMapper.xml文件
3)NameMapperTest文件
4)user表结构
三种mybatis表的列名和对象属性名不一致处理方法
在MyBatis中,当数据库表的列名与Java对象的字段名不一致时,可以通过多种方式来处理这种情况。以下是几种常用的方法:
1.使用 resultMap 映射
resultMap 是 MyBatis 提供的一个非常强大的映射机制,可以用来定义复杂的映射关系。使用 resultMap 可以解决列名和字段名不一致的问题。
1)mapper
/*** 通过ResultMap方式*/
User queryUserByResultMap(int id);
2)mapper.xml
<!--定义ResultMap--> <resultMap id="user" type="org.xiji.enty.User"><!--定义主键id映射--><id property="id" column="id"/><!--定义名字映射--><result property="username" column="username"/><!--定义密码映射--><result property="password" column="password"/><!--定义信息映射--><result property="userInfo" column="user_info"/> </resultMap>.
<!--通过ResultMap处理表名和列名不一致的情况--> <select id="queryUserByResultMap" resultMap="user">select * from user where id=#{id} </select>
3)测试代码
/*** 通过resultMap的方式*/ @Test public void testGetNameByResultMap() {System.out.println("+=====================================");User user = nameMapper.queryUserByResultMap(3);System.out.println(user.toString());}
4)测试结果
2.使用别名
在 SQL 查询语句中使用别名来匹配 Java 字段名。
1)mapper
/*** 通过sql起别名的方式*/
User queryUserByAlias(int id);
2)mapper.xml
<!--通过起别名的方式处理列名与对象名不一致的情况--> <select id="queryUserByAlias" resultType="org.xiji.enty.User">select id,username,password,user_info as userInfo from user where id=#{id} </select>
3)测试代码
/*** 通过起别名的方式*/ @Test public void testGetName() {System.out.println("+=====================================");User user = nameMapper.queryUserByAlias(1);System.out.println(user);System.out.println(user.toString());}
4)测试结果
3.使用 @Results 注解
如果你使用的是 MyBatis 的注解风格,可以通过 @Results
注解来指定列名和字段名的对应关系。
1)mapper
* 通过注解的方式@Results*/ @Select("select * from user where id=#{id}") @Results({@Result(column = "id",property = "id"),@Result(column = "username",property = "username"),@Result(column = "password",property = "password"),@Result(column = "user_info",property = "userInfo")}) User queryUserByAnnotation(int id);
2)mapper.xml
这个是使用mybatis注解风格编写sql,没有xml
3)测试代码
/*** 通过注解的方式*/ @Test public void testGetNameByAnnotation() {System.out.println("+=====================================");User user = nameMapper.queryUserByAnnotation(2);System.out.println(user.toString());}
4)测试结果
附录
1)NameMapper文件
package org.xiji.mapper;import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.xiji.enty.User;@Mapper
public interface NameMapper {/*** 通过ResultMap方式*/User queryUserByResultMap(int id);/*** 通过sql起别名的方式*/User queryUserByAlias(int id);/*** 通过注解的方式@Results*/@Select("select * from user where id=#{id}")@Results({@Result(column = "id",property = "id"),@Result(column = "username",property = "username"),@Result(column = "password",property = "password"),@Result(column = "user_info",property = "userInfo")})User queryUserByAnnotation(int id);
}
2)NameMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.xiji.mapper.NameMapper"><!--定义ResultMap--><resultMap id="user" type="org.xiji.enty.User"><!--定义主键id映射--><id property="id" column="id"/><!--定义名字映射--><result property="username" column="username"/><!--定义密码映射--><result property="password" column="password"/><!--定义信息映射--><result property="userInfo" column="user_info"/></resultMap><!--通过起别名的方式处理列名与对象名不一致的情况--><select id="queryUserByAlias" resultType="org.xiji.enty.User">select id,username,password,user_info as userInfo from user where id=#{id}</select><!--通过ResultMap处理表名和列名不一致的情况--><select id="queryUserByResultMap" resultMap="user">select * from user where id=#{id}</select></mapper>
3)NameMapperTest文件
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import org.xiji.enty.User; import org.xiji.mapper.NameMapper;@SpringJUnitConfig(locations = {"classpath:springConfig.xml"}) public class NameMapperTest {@Autowiredprivate NameMapper nameMapper;/*** 通过起别名的方式*/@Testpublic void testGetName(){System.out.println("+=====================================");User user = nameMapper.queryUserByAlias(1);System.out.println(user.toString());}/*** 通过注解的方式*/@Testpublic void testGetNameByAnnotation(){System.out.println("+=====================================");User user = nameMapper.queryUserByAnnotation(2);System.out.println(user.toString());}/*** 通过resultMap的方式*/@Testpublic void testGetNameByResultMap(){System.out.println("+=====================================");User user = nameMapper.queryUserByResultMap(3);System.out.println(user.toString());}}
4)user表结构
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名字',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户密码',`userInfo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户信息',PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;