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

数据表:

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



实体类:

 

1. package com.tenghu.mybatis.model;  
2.   
3. import java.io.Serializable;  
4.   
5. /**  
6.  * 部门表  
7.  * @author Arvin_Li  
8.  *  
9.  */  
10. public class Department implements Serializable{  
11. serialVersionUID = 6998332095922284289L;  
12.       
13.     private int ids;//部门编号  
14.     private String deName;//部门名称  
15.     private int pIds;//上级部门id  
16.     private String deChargePerson;//部门负责人  
17.     private long createTime;//创建时间  
18.       
19.     //省略get和set方法  
20. }

 

 

mybatis主配置文件:

 



1. <?xml version="1.0" encoding="UTF-8"?>  
2. <!DOCTYPE configuration  
3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
4. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
5. <configuration>  
6. <!-- 配置实体类别名 -->  
7. <typeAliases>  
8. <typeAlias type="com.tenghu.mybatis.model.Department" alias="Department"/>  
9. </typeAliases>  
10. <environments default="development">  
11. <environment id="development">  
12. <transactionManager type="JDBC"/>  
13. <dataSource type="POOLED">  
14. <property name="driver" value="${jdbc.driver}"/>  
15. <property name="url" value="${jdbc.url}"/>  
16. <property name="username" value="${jdbc.username}"/>  
17. <property name="password" value="${jdbc.password}"/>  
18. </dataSource>  
19. </environment>  
20. </environments>  
21.       
22. <!-- 配置映射文件 -->  
23. <mappers>  
24. <mapper resource="com/tenghu/mybatis/model/xml/DepartmentMapper.xml"/>  
25. </mappers>  
26. </configuration>

映射文件:

1. <?xml version="1.0" encoding="UTF-8"?>  
2. <!DOCTYPE mapper  
3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
5. <mapper namespace="com.tenghu.mybatis.model.xml.DepartmentMapper">  
6.       
7. <!-- 配置映射字段 -->  
8. <resultMap type="Department" id="tab_department">  
9. <id property="ids" column="ids"/>  
10. <result property="deName" column="de_name"/>  
11. <result property="pIds" column="p_ids"/>  
12. <result property="deChargePerson" column="de_charge_person"/>  
13. <result property="createTime" column="create_time"/>  
14. </resultMap>  
15.       
16. <!-- 查询所有部门 -->  
17. <select id="queryAllDepartment" resultMap="tab_department">  
18.         select * from tab_department  
19. </select>  
20. </mapper>
  1.   



工具类:

 

1. package com.tenghu.mybatis.util;  
2.   
3. import java.io.IOException;  
4. import java.io.InputStream;  
5. import java.util.Properties;  
6.   
7. import org.apache.ibatis.io.Resources;  
8. import org.apache.ibatis.session.SqlSession;  
9. import org.apache.ibatis.session.SqlSessionFactory;  
10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
11.   
12. /**  
13.  * Mybatis工具类  
14.  * @author Arvin_Li  
15.  * @version 1.0  
16.  *  
17.  */  
18. public class MybatisUtil {  
19.     private MybatisUtil(){}  
20.       
21.     //声明SqlSession工厂  
22.     private static SqlSessionFactory sqlSessionFactory;  
23.       
24.     //使用静态代码块获取SqlSession工厂  
25.     static{  
26.         try {  
27.             //获取mybatis主配置文件流  
28. inputStream=Resources.getResourceAsStream("mybatis-config.xml");  
29.             //创建属性文件对象  
30. properties=new Properties();  
31.             //加载属性配置文件  
32.             properties.load(Resources.getResourceAsStream("jdbc.properties"));  
33.             //创建SqlSessionFactory对象  
34. sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream, properties);  
35.         } catch (IOException e) {  
36.             e.printStackTrace();  
37.         }  
38.     }  
39.       
40.     /**  
41.      * 开启SqlSession对象,不自动提交  
42.      * @return  
43.      */  
44.     public static SqlSession openSession(){  
45.         return sqlSessionFactory.openSession();  
46.     }  
47.       
48.     /**  
49.      * 开启自动提交的SqlSession  
50.      * @return  
51.      */  
52.     public static SqlSession openAutoCommitSession(){  
53.         return sqlSessionFactory.openSession(true);  
54.     }  
55.       
56.     /**  
57.      * 关闭SqlSession  
58.      * @param sqlSession  
59.      */  
60.     public static void closeSession(SqlSession sqlSession){  
61.         if(null!=sqlSession){  
62.             sqlSession.close();  
63.         }  
64. sqlSession=null;  
65.     }  
66. }


测试类:

 

1. package com.tenghu.mybatis.test;  
2.   
3. import java.util.List;  
4.   
5. import org.apache.ibatis.session.SqlSession;  
6. import org.junit.Test;  
7.   
8. import com.tenghu.mybatis.model.Department;  
9. import com.tenghu.mybatis.util.MybatisUtil;  
10.   
11. /**  
12.  * 部门测试类  
13.  * @author Arvin_Li  
14.  *  
15.  */  
16. public class DepartmentTest {  
17.     //命名空间  
18. namespace="com.tenghu.mybatis.model.xml.DepartmentMapper.";  
19.       
20.     /**  
21.      * 查询出所有部门  
22.      */  
23.     @Test  
24.     public void testQueryAllDepartment(){  
25.         //获取SqlSession  
26. sqlSession=MybatisUtil.openSession();  
27.         try {  
28.             //查询  
29. <Department> departList=sqlSession.selectList(namespace+"queryAllDepartment");  
30.             //输出部门信息  
31.             for (Department department : departList) {  
32.                 System.out.println(department.getIds()+"\t"+department.getDeName()+"\t"+department.getpIds()+"\t"+department.getDeChargePerson());  
33.             }  
34.         } catch (Exception e) {  
35.             e.printStackTrace();  
36.         }finally{  
37.             //关闭SqlSession  
38.             MybatisUtil.closeSession(sqlSession);  
39.         }  
40.     }  
41. }

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