Mybatis实体类属性名与字段名不相同冲突_4
来源:互联网 发布:pandorabox安装python 编辑:程序博客网 时间:2024/05/01 15:57
在开发中,有可能我们表中的字段名和表对应实体类的属性名称不一致!如何解决字段名与实体类属性名不相同的冲突。
一、表及数据
create table USERINFOS( id NUMBER(8) not null, uname VARCHAR2(20) not null, upass VARCHAR2(8) not null)alter table USERINFOS add primary key (ID)insert into USERINFOS (id, uname, upass)values (1, '冒泡', '8888');insert into USERINFOS (id, uname, upass)values (3, '大白熊', '000');insert into USERINFOS (id, uname, upass)values (6, 'John', '000');commit;
二、实体类Userinfo
package com.hlx.entzity;public class Userinfo {//Userinfo实体类中属性名和Userinfos表中的字段名是不一样的private int myid; // idprivate String myuname; // unameprivate String myupass; // upasspublic int getMyid() {return myid;}public void setMyid(int myid) {this.myid = myid;}public String getMyuname() {return myuname;}public void setMyuname(String myuname) {this.myuname = myuname;}public String getMyupass() {return myupass;}public void setMyupass(String myupass) {this.myupass = myupass;}public Userinfo(int myid, String myuname, String myupass) {super();this.myid = myid;this.myuname = myuname;this.myupass = myupass;}public Userinfo() {super();}public Userinfo(int myid) {super();this.myid = myid;}@Overridepublic String toString() {return "Userinfo [myid=" + myid + ", myuname=" + myuname + ", myupass="+ myupass + "]";}}
三、编写代码
1)UserinfoMapper.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="com.hlx.dao.UserinfoMapper"><!--1) 根据ID查询用户对象,使用这个查询查询出数据是null 因为实体类的属性名和数据库的字段名对应不上的原因,因此无法查询出对应的记录 --><select id="getByid" parameterType="int" resultType="Userinfo">select * from userinfos where id=#{myid}</select><!--(a)写个sql语句字段别名与属性名一致 OK!--><select id="getByidA" parameterType="int" resultType="Userinfo">select id myid,uname myuname,upass myupass from userinfos where id=#{myid}</select><!--(b) 可以通过<resultMap>映射实体类属性名和表的字段名一一对应关系 --> <select id="getByidB" parameterType="int" resultType="Userinfo" resultMap="UserinfoMap">select * from userinfos where id=#{myid} </select> <!--通过<resultMap>映射实体类属性名和表的字段名对应关系 --> <resultMap type="com.hlx.entity.Userinfo" id="UserinfoMap"><!-- 用id属性来映射主键字段 --><id property="myid" column="id"/><!-- 用result属性来映射非主键字段 property属性,column列名字段 --> <result property="myuname" column="uname"/> <result property="myupass" column="upass"/> </resultMap></mapper>
<typeAliases> <package name="com.hlx.pojo" /> <package name="com.hlx.entity" /> <!-- 可以配置多个 --></typeAliases>
<!-- 将mapper文件加入到配置文件中 --><mappers><mapper resource="com/hlx/dao/UserinfosMapper.xml" /><mapper resource="com/hlx/dao/UserinfoMapper.xml" /></mappers>
3)测试
public class UserTest {// 日志对象private Logger logger = Logger.getLogger(UserTest.class);@Testpublic void getId() {SqlSession session = null;try {// 获得会话session = MyBatisUtil.getSqlSession(true);/** * 映射sql的标识字符串, com.hlx.dao.UserinfosMapper是userinfosMapper. * xml文件中mapper标签的namespace属性的值, * getUserinfo是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL */// 映射sql的标识字符串String statement = "com.hlx.dao.UserinfoMapper.getByid";// 执行插入操作Userinfo userinfos = session.selectOne(statement, 23);logger.debug("查询数据!");System.out.println(userinfos);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {session.close(); // 对应一次数据库会话,会话结束必须关闭}}}
执行后的效果:
1、getById方法执行查询后返回一个null。
2、getByIdA方法和getByIdB方法执行查询后可以正常得到想要的结果。
四、总结
解决办法一: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。
解决办法二: 通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。
0 0
- Mybatis实体类属性名与字段名不相同冲突_4
- mybatis-解决字段名与实体类属性名不相同的冲突
- MyBatis——解决字段名与实体类属性名不相同的冲突
- MyBatis中解决字段名与实体类属性名不相同的冲突
- MyBatis解决字段名与实体类属性名不相同的冲突
- mybatis解决字段名与实体类属性名不相同的冲突
- MyBatis入门03 解决字段名与实体类属性名不相同的冲突
- Mybatis-解决字段名与实体类属性名不相同的冲突
- MyBatis入门学习教程 解决字段名与实体类属性名不相同的冲突
- MyBatis 解决字段名与实体类属性名不相同的冲突
- MyBatis (4)——解决字段名与实体类属性名不相同的冲突
- mybatis解决字段名与实体类属性名不相同的冲突
- 【MyBatis】——解决字段名与实体类属性名不相同的冲突
- MyBatis学习之解决字段名与实体类属性名不相同的冲突
- mybatis学习笔记(三) --- 解决字段名与实体类属性名不相同的冲突
- 四、Mybatis解决字段名与实体类属性名不相同的冲突
- MyBatis解决字段名与实体类属性名不相同的冲突
- Mybatis 解决字段名与实体类属性名不相同的冲突
- [Cloud Computing]Mechanisms: Cloud Workload Scheduler
- 智能科普:VR、AR、MR的区别
- 关于Activity生命周期的一些小总结
- Enigma机密码加密解密的实现
- LINUX SCSI回调IO的分析
- Mybatis实体类属性名与字段名不相同冲突_4
- 1002
- 中文Ubuntu主目录下的文档文件夹改回英文
- myeclipse8.5 启动时不弹出工作空间的选择,直接进入一个空的工作空间
- CodeForces 339B Xenia and Ringroad
- java内省机制与反射实现工厂模式
- PL/SQL块结构和组成元素
- Zen Coding: 一种快速编写HTML/CSS代码的方法
- java语言常用性能优化技巧