在开发的时候应该遇到这样的情况,数据库中的字段名与属性名不一致的情况,通常数据库中的字段命名时多个单词之间使用下划线连接在一起的,而在类中的属性名则多数是用驼峰标识的命名方式,我见过的大多数都是这样,那么使用mybatis该如果解决这一的问题呢?如下:
数据表:
[html] view plain copy
- 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 '部门表'
实体类:
[html] view plain copy
- 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主配置文件:
[html] view plain copy
- <? 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 >
映射文件:
[html] view plain copy
- <? 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 >
工具类:
[html] view plain copy
- 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 ;
- }
- }
测试类:
[html] view plain copy
- 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);
- }
- }
- }
这样就可以处理字段名与属性名不一致的情况了。