`
aijuans
  • 浏览: 1566356 次
社区版块
存档分类
最新评论

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

阅读更多

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

数据表:

 

[html] view plaincopy
 
  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 '部门表'  


实体类:

 

 

[html] view plaincopy
 
  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.     private static final long 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主配置文件:

 

[html] view plaincopy
 
  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>  


映射文件:

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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>  


工具类:

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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 inputStream=Resources.getResourceAsStream("mybatis-config.xml");  
  29.             //创建属性文件对象  
  30.             Properties 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. }  


测试类:

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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.     private String namespace="com.tenghu.mybatis.model.xml.DepartmentMapper.";  
  19.       
  20.     /**  
  21.      * 查询出所有部门  
  22.      */  
  23.     @Test  
  24.     public void testQueryAllDepartment(){  
  25.         //获取SqlSession  
  26.         SqlSession sqlSession=MybatisUtil.openSession();  
  27.         try {  
  28.             //查询  
  29.             List<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. }  


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

 

其他精彩文章文章

jQuery教程(9)-DOM树操作之复制元素

android学习笔记(35)android AlertDialog创建列表对话框[2]

android shareSDK sso登录新浪和微信

mysql 索引类型详解-B-Tree索引

BroadcastReceiver 使用AlertDialog后 app奔溃了

 

更多关于android开发文章

3
9
分享到:
评论
2 楼 baggio_hk 2015-01-06  
这种也能推荐上来?
1 楼 tanliansheng 2015-01-06  
好搞笑   

相关推荐

    MyBatis--解决字段名与实体类属性名不相同的冲突--源代码

    总之,面对字段名与实体类属性名不一致的问题,MyBatis提供了多种解决方案,包括使用`&lt;resultMap&gt;`、在SQL语句中直接调整列名,以及使用注解。通过学习源代码,我们可以掌握这些方法,提升在实际项目中的应用能力。

    MyBatis表字段名与实体属性名不一致-src.zip

    首先,当表字段名与实体属性名不一致时,MyBatis提供了一种映射机制,通过`@Column`注解(在Java 8及以上版本)或在XML映射文件中定义`&lt;resultMap&gt;`来解决。例如,如果数据库表中有一个字段名为`user_name`,而在...

    java实体类字段自定义-数据库字段和程序实体类属性不一致解决方案.docx

    Java 实体类字段自定义-数据库字段和程序实体类属性不一致解决方案 Java 实体类字段自定义是指在 Java 开发中,实体类的字段与数据库表的字段不一致的问题。这种情况下,需要实现实体类字段的自定义,以便与数据库...

    05.MyBatis中当实体类中的属性名和表中的字段名不一样怎么办 ?.zip

    在MyBatis中,我们经常遇到实体类(Entity Class)中的属性名与数据库表中的字段名不一致的情况。这种情况通常是由于编程习惯、命名规范或为了提高代码可读性导致的。MyBatis提供了多种方式来解决这个问题,确保实体...

    MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题

    在MyBatis框架中,当数据库表的字段名与实体类的属性名不一致时,我们需要采取特定的方式来解决这种冲突,以确保数据的正确映射。以下是一些关键点和解决方案: 1. **别名配置**: - MyBatis允许我们在实体类中...

    MyBatis生成工具

    - **实体类生成**:根据数据库表的字段信息,自动生成对应的Java实体类,每个字段对应一个属性,数据类型自动匹配Java类型。 - **Mapper XML文件生成**:生成与实体类相对应的Mapper XML文件,包含基本的CRUD操作...

    解决属性名和字段名不一致的问题

    数据库中的字段 select * from mybatis.user where id = #{id} resultMap 元素是 MyBatis 中最重要最强大的元素 ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只...

    mybatis逆向工程,带中文注释

    在实际开发中,掌握MyBatis逆向工程不仅可以节省大量的手动编码时间,还能保证代码的一致性和规范性。同时,结合中文注释,使得代码更易于理解和维护,尤其对于团队协作来说,是非常重要的。通过不断地调整和优化...

    Mybatis 28道面试题及答案.docx

    面对属性名与字段名不一致的情况,可以: 1. 使用SQL的AS关键字设置字段别名,使其与实体类属性匹配。 2. 在映射文件中使用`&lt;resultMap&gt;`定义字段和属性的映射关系。 在进行模糊查询(LIKE)时,可以: 1. 在Java...

    数据库字段名转换成Java字段名

    - ORM框架如Hibernate、MyBatis等,能自动处理数据库字段与Java对象之间的映射,包括字段名的转换。它们提供了配置或注解的方式来指定字段的对应关系。 3. **工具**: - 开发者可以使用一些工具,如在线转换器或...

    mybatis xml文件自动生成

    2. 获取表信息:连接成功后,工具会查询数据库的元数据,获取所有表的信息,包括表名、字段名、字段类型等。 3. 生成Mapper XML文件:根据每张表的字段信息,工具会自动生成对应的Mapper XML文件,文件中包含INSERT...

    使用mybatis自动建bean

    通过字段名和数据库列名的对应,MyBatis能自动将查询结果转换为Java Bean对象。 2. 注解方式:除了XML配置,MyBatis还支持注解方式。在Java接口的方法上,可以直接使用`@Select`、`@Insert`等注解来写SQL,然后通过...

    Mybatis入门资源

    "Mybatis学习(四)解决表字段名和实体类属性名不相同的冲突.docx"可能讨论了如何处理数据库字段名与Java实体类属性名不一致的情况。Mybatis通过别名(aliases)或者注解(@Column)来实现字段映射,使得两者可以...

    一个MyBatis的学习成果,仅作个人保存

    在MyBatis中,如果数据库字段名与Java实体类的属性名不一致,可以使用`@Column`注解或者在XML映射文件中使用`resultMap`进行映射。这样,MyBatis可以根据映射关系正确地将数据转换为实体对象。 4. **关联表查询**...

    MybatisX 快速开发插件

    如果数据库表结构发生变化,MybatisX插件可以帮你更新实体类的属性,保持与数据库的一致性。这对于数据模型频繁调整的项目来说,是一项非常实用的功能。 7. **代码格式化与优化** MybatisX还提供了代码格式化和...

    MybatisX idea 快速开发插件

    MybatisX提供了强大的SQL语句智能提示功能,当在Mapper XML文件中编写SQL时,能够自动完成表名、字段名等,节省了手动输入的时间。同时,它还支持动态SQL标签的自动补全,如`if`, `choose`, `when`, `otherwise`等...

    MyBatis代码生成工具

    总的来说,MyBatisGenerator是MyBatis框架的一个强大辅助工具,它帮助开发者快速创建数据访问层的代码,减轻手动编写重复代码的工作量,从而提高开发效率并保持代码的一致性。通过合理配置,它可以适应各种项目需求...

    mybatis笔记

    - **解决方案**:当数据库表的列名与Java实体类的属性名不一致时,可以采用以下方法解决: - 使用别名(`resultMap`中使用`column="database_column_name" property="java_property_name"`)。 - 使用`resultMap`...

    MyBatis的27道面试题

    当实体类属性与数据库字段名不一致时,可以通过别名或者在resultMap中定义映射关系来解决。MyBatis模糊查询like语句的写法相对简单,只需要在占位符中加入%即可。 在DAO接口的工作原理方面,MyBatis通过动态代理...

Global site tag (gtag.js) - Google Analytics