Mybatis解决属性名与字段名不一致

在开发的时候应该遇到这样的情况,数据库中的字段名与属性名不一致的情况,通常数据库中的字段命名时多个单词之间使用下划线连接在一起的,而在类中的属性名则多数是用驼峰标识的命名方式,我见过的大多数都是这样,那么使用mybatis该如果解决这一的问题呢?如下:

数据表:

CREATE TABLE tab_department(
	ids INT PRIMARY KEY AUTO_INCREMENT,
	de_name VARCHAR(50) COMMENT '部门名称',
	p_ids INT COMMENT '上级部门id',
	de_charge_person VARCHAR(50) COMMENT '部门负责人',
	create_time LONG COMMENT '创建时间'
) COMMENT '部门表'

实体类:

package com.tenghu.mybatis.model;

import java.io.Serializable;

/**
 * 部门表
 * @author Arvin_Li
 *
 */
public class Department implements Serializable{
	private static final long serialVersionUID = 6998332095922284289L;

	private int ids;//部门编号
	private String deName;//部门名称
	private int pIds;//上级部门id
	private String deChargePerson;//部门负责人
	private long createTime;//创建时间

	//省略get和set方法
}

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>
	<!-- 配置实体类别名 -->
	<typeAliases>
		<typeAlias type="com.tenghu.mybatis.model.Department" alias="Department"/>
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}"/>
				<property name="url" value="${jdbc.url}"/>
				<property name="username" value="${jdbc.username}"/>
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>
	</environments>

	<!-- 配置映射文件 -->
	<mappers>
		<mapper resource="com/tenghu/mybatis/model/xml/DepartmentMapper.xml"/>
	</mappers>
</configuration>

映射文件:

<?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">
<mapper namespace="com.tenghu.mybatis.model.xml.DepartmentMapper">

	<!-- 配置映射字段 -->
	<resultMap type="Department" id="tab_department">
		<id property="ids" column="ids"/>
		<result property="deName" column="de_name"/>
		<result property="pIds" column="p_ids"/>
		<result property="deChargePerson" column="de_charge_person"/>
		<result property="createTime" column="create_time"/>
	</resultMap>

	<!-- 查询所有部门 -->
	<select id="queryAllDepartment" resultMap="tab_department">
		select * from tab_department
	</select>
</mapper>

工具类:

package com.tenghu.mybatis.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * Mybatis工具类
 * @author Arvin_Li
 * @version 1.0
 *
 */
public class MybatisUtil {
	private MybatisUtil(){}

	//声明SqlSession工厂
	private static SqlSessionFactory sqlSessionFactory;

	//使用静态代码块获取SqlSession工厂
	static{
		try {
			//获取mybatis主配置文件流
			InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
			//创建属性文件对象
			Properties properties=new Properties();
			//加载属性配置文件
			properties.load(Resources.getResourceAsStream("jdbc.properties"));
			//创建SqlSessionFactory对象
			sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream, properties);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 开启SqlSession对象,不自动提交
	 * @return
	 */
	public static SqlSession openSession(){
		return sqlSessionFactory.openSession();
	}

	/**
	 * 开启自动提交的SqlSession
	 * @return
	 */
	public static SqlSession openAutoCommitSession(){
		return sqlSessionFactory.openSession(true);
	}

	/**
	 * 关闭SqlSession
	 * @param sqlSession
	 */
	public static void closeSession(SqlSession sqlSession){
		if(null!=sqlSession){
			sqlSession.close();
		}
		sqlSession=null;
	}
}

测试类:

package com.tenghu.mybatis.test;

import java.util.List;

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

import com.tenghu.mybatis.model.Department;
import com.tenghu.mybatis.util.MybatisUtil;

/**
 * 部门测试类
 * @author Arvin_Li
 *
 */
public class DepartmentTest {
	//命名空间
	private String namespace="com.tenghu.mybatis.model.xml.DepartmentMapper.";

	/**
	 * 查询出所有部门
	 */
	@Test
	public void testQueryAllDepartment(){
		//获取SqlSession
		SqlSession sqlSession=MybatisUtil.openSession();
		try {
			//查询
			List<Department> departList=sqlSession.selectList(namespace+"queryAllDepartment");
			//输出部门信息
			for (Department department : departList) {
				System.out.println(department.getIds()+"\t"+department.getDeName()+"\t"+department.getpIds()+"\t"+department.getDeChargePerson());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//关闭SqlSession
			MybatisUtil.closeSession(sqlSession);
		}
	}
}

这样就可以处理字段名与属性名不一致的情况了。

时间: 2024-10-12 07:57:47

Mybatis解决属性名与字段名不一致的相关文章

[转]MyBatis动态传入表名,字段名参数的解决办法

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

mybatis动态调用表名和字段名

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

SQL语句修改表名和字段名

今天有个临时任务,修改生产环境的数据库表名和字段名.以前要修改表名字段名都是在开发环境,直接打开 SQL Server找到对应的表或字段重命名就OK啦,可是这是线上数据库,再想直接F2修改是不可能的啦.怎么办?乖 乖写脚本呗.上网了解了一些相关资料,结合我自己操作过程中出现的一些实际问题简单作个总结,再次加深下印 象. SQL自带了一系列的系统存储过程.其中sp_rename就具有修改表名和列名的功能.对于sp_rename是这样定 义的:更改当前数据库中用户创建对象(如表.列或用户定义数据类型

ibatis动态的传入表名、字段名

ibatis动态的传入表名.字段名,主要传入表名和字段名的不一致. Java代码: Map<String,Object> params = new HashMap<String,Object>(); params.put("tableName", tableName); params.put("sidFieldName", sidFieldName); params.put("lastDateFiledName", las

oracle表名、字段名等对象的命名长度限制

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45854385 今天在为某系统数据库结构整理升级脚本时,遇到了"命名字节过长的错误",类似于下面的截图语句: 由于升级的结构中对于字段名的命名根据业务进行了修改,出现了命名过长的情况. 这里想说一下,对于oracle,表名.字段名等对象命名字节个数限制在

SQLSERVER和ORACLE批量处理表名和字段名大写

在sql移植到oracle过程中,都会遇到表名和字段名大写的问题,因为在oracle中默认表名和字段名都是大写的,虽然可以通过使用双引号的方式进行操作,如select * from "testtable"但是很多情况下,这样做的代价很大,因为很多程序的代码是早已经写好的,而要修改oracle系统配置又不安全,一个比较稳妥的办法是批量修改表名和文件名. 先说在SQL中修改表名和字段名的办法:虽然在sql中默认是不区分表名和字段名的大小写的,但是通过sql的DTS进行数据导出导入的时候,如

查询所有表名、字段名、类型、长度 和 存储过程、视图 的创建语句

-- 获得存储过程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.id where xtype ='p' order by o.xtype,o.name,cm.text -- 获得视图程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.i

ASP获取数据库表名,字段名以及对字段的一些操作

最近,在ASP论坛上看到很多网友问怎么获取数据库表名,字段名以及如何对字段进行删除,增添的操作故写此文. 本人对SQLServer比较熟一些,故以SQLServer为列: <% SET Conn=Server.CreateObject("ADODB.Connection") Conn.Open "Server=IP地址;Provider=sqloledb;Database=库名称;UID=用户名;PWD=密码;" %> 读SqlServer库中的表名:

SQL 查询所有表名、字段名、类型、长度、存储过程、视图

-- 获得存储过程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.id where xtype ='p' order by o.xtype,o.name,cm.text -- 获得视图程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.i

通过表名和字段名查询字段类型

今天遇到了一个问题,就是要通过表名和字段名获取该字段的字段类型.网上找了好多方法,都不成功(本人的数据库方面的知识比较匮乏).后来,终于找到一个正确的语句,特此记录. select data_type from user_tab_columns where table_name ='表名' and column_name ='字段名'