100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 解决实体类属性与表字段名不一致的问题

解决实体类属性与表字段名不一致的问题

时间:2019-07-07 08:24:49

相关推荐

解决实体类属性与表字段名不一致的问题

如果实体类属性与表字段名不一致时,会出现对象为null,如何处理?

有三种解决方法:

准备工作:

项目工程如下:

1.引用依赖

<!--配置junit依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--配置servlet依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency><!-- 配置数据库依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- 配置mybatis依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency>

2.创建数据库表

#创建地域表CREATE TABLE CH_REGION (ID BIGINT(10) NOT NULL AUTO_INCREMENT,#ID号PARENT_ID BIGINT(10) DEFAULT NULL,#父级ID号REGION_ID BIGINT(10) DEFAULT NULL,#地域编号REGION_PARENT_ID BIGINT(10) DEFAULT NULL,#地域父级编号REGION_NAME VARCHAR(100) DEFAULT NULL,#地域名称REGION_TYPE INT(11) DEFAULT NULL COMMENT '1省 2市 3区',#地域类型PRIMARY KEY (ID)) ENGINE=INNODB AUTO_INCREMENT=11186 DEFAULT CHARSET=utf8 COMMENT='地区信息表';

3.创建实体类

package com.liuYongQi.MyBatisTest2.pojo;import java.io.Serializable;/*** @ClassName: Region* @Description: TODO 地域表实体类* @Author: Administrator* @CreateDate: /10/8 10:05* @UpdateUser: Administrator* @UpdateDate: /10/8 10:05* @UpdateRemark: 修改内容* @Version: 1.0*/public class Region implements Serializable {private Integer id; //ID号private Integer parentId; //父级ID号private Integer regionId; //地域编号private Integer regionParentId;//地域父级编号private String regionName;//地域名称private Integer regionType; //地域类型public Region(Integer id, Integer parentId, Integer regionId, Integer regionParentId, String regionName, Integer regionType) {this.id = id;this.parentId = parentId;this.regionId = regionId;this.regionParentId = regionParentId;this.regionName = regionName;this.regionType = regionType;}public Region(Integer parentId, Integer regionId, Integer regionParentId, String regionName, Integer regionType) {this.parentId = parentId;this.regionId = regionId;this.regionParentId = regionParentId;this.regionName = regionName;this.regionType = regionType;}public Region() {}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getParentId() {return parentId;}public void setParentId(Integer parentId) {this.parentId = parentId;}public Integer getRegionId() {return regionId;}public void setRegionId(Integer regionId) {this.regionId = regionId;}public Integer getRegionParentId() {return regionParentId;}public void setRegionParentId(Integer regionParentId) {this.regionParentId = regionParentId;}public String getRegionName() {return regionName;}public void setRegionName(String regionName) {this.regionName = regionName;}public Integer getRegionType() {return regionType;}public void setRegionType(Integer regionType) {this.regionType = regionType;}@Overridepublic String toString() {return "Region{" +"id=" + id +", parentId=" + parentId +", regionId=" + regionId +", regionParentId=" + regionParentId +", regionName='" + regionName + '\'' +", regionType=" + regionType +'}';}}

4.创建地域表实体类接口

package com.liuYongQi.MyBatisTest2.dao;import com.liuYongQi.MyBatisTest2.pojo.Region;/*** @ClassName: IRegionDao* @Description: TODO 地域表实体类接口* @Author: Administrator* @CreateDate: /10/8 10:10* @UpdateUser: Administrator* @UpdateDate: /10/8 10:10* @UpdateRemark: 修改内容* @Version: 1.0*/public interface IRegionDao {/*** @Author Administrator* @Description //TODO 根据地域名称查询地域对象信息* @Date 10:16 /10/8* @Param [regionName]* @return com.liuYongQi.MyBatisTest2.pojo.Region* @exception*/public Region selectRegionByRegionName(String regionName);}

5.创建MyBatisConfig.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><settings><!-- 打印查询语句 --><setting name="logImpl" value="STDOUT_LOGGING"></setting><!--解决数据库和实体类属性名字不一致--><setting name="mapUnderscoreToCamelCase" value="true"></setting></settings><!--1. 配置数据库环境,默认使用development数据库构建环境--><environments default="development"><!--配置环境变量--><environment id="development"><!--配置事务管理器类别--><transactionManager type="JDBC"></transactionManager><!--配置数据源--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://127.0.0.1:3306/db_a?useUnicode=true&amp;characterEncoding=UTF-8"></property><property name="username" value="root"></property><property name="password" value="root"></property></dataSource></environment></environments><!--2. 加载映射器:实体类对象/关系映射文件--><mappers><mapper resource="com/liuYongQi/MyBatisTest2/mapper/RegionMapper.xml"></mapper></mappers></configuration>

6.创建映射文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><!--接口注册--><mapper namespace="com.liuYongQi.MyBatisTest2.dao.IRegionDao"><select id="selectRegionByRegionName" parameterType="String" resultType="com.liuYongQi.MyBatisTest2.pojo.Region">select * from ch_region where REGION_NAME=#{regionName}</select></mapper>

7.创建测试类

package com.liuYongQi.MyBatisTest2.test;import com.liuYongQi.MyBatisTest2.dao.IRegionDao;import com.liuYongQi.MyBatisTest2.pojo.Region;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.After;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;public class TestCRUD {//获得SqlSession对象,通过SqlSession操作CRUDprivate SqlSession sqlSession;private IRegionDao iregionDao;@Beforepublic void before(){//读取配置文件,获取SQLSessionFactorytry {//通过Resources类加载核心配置文件,得到文件的输入流InputStream inputStream = Resources.getResourceAsStream("MyBatisConfig.xml");//创建会话工厂,编译配置文件流,sqlSessionFactorySqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);//通过sqlSessionFactory得到sqlSession象sqlSession = sqlSessionFactory.openSession();//通过sqlSession获得映射实例类的父接口iregionDao = sqlSession.getMapper(IRegionDao.class);} catch (IOException e) {e.printStackTrace();}}@Afterpublic void after(){mit();}@Testpublic void selectRegionByRegionName(){Region region = iregionDao.selectRegionByRegionName("湖南省");System.out.println(region);}}

结果为:

解决方案如下:

方法一:在SQL语句中为列名取别名(与属性名一致)

<select id="selectRegionByRegionName" parameterType="String" resultType="com.liuYongQi.MyBatisTest2.pojo.Region">select id as id,PARENT_ID as parentId,REGION_ID as regionId,REGION_PARENT_ID as regionParentId,REGION_NAME as regionName,REGION_TYPE as regionType from ch_region where REGION_NAME=#{regionName}</select><!--不用在意大小写,MyBatis会先转换成大写再进行匹配-->

方法二:resultMap指定映射关系,MyBatis也能自动完成映射

<select id="selectRegionByRegionName" parameterType="String" resultMap="selectRegionByRegionNameMapper">select * from ch_region where REGION_NAME=#{regionName}</select><resultMap id="selectRegionByRegionNameMapper" type="com.liuYongQi.MyBatisTest2.pojo.Region"><id property="id" column="id"></id><result property="parentId" column="parent_id"></result><result property="regionId" column="region_id"></result><result property="regionParentId" column="region_parent_id"></result><result property="regionName" column="region_name"></result><result property="regionType" column="region_type"></result></resultMap>

方法三:设置全局属性(推荐)

通常情况下,Java中的实体类属性采用骆峰命名,而数据库中表的字段则用下划线区分字母。在这种情况下MyBatis提供了一个全局属性mapUnderscoreToCamelCase来解决两者名字不一致的问题。

在mybatisConfig.xml中配置:

<settings><setting name=”mapUnderscoreToCamelCase” value=”true”></settings>

三种方案结果都为:

今天的测试就到这里了,谢谢大家的支持!

如果大家想浏览我的下一篇文章,请留言

版权声明:此文章属于原创,不准随意转载:/LYQ2332826438

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。