首页 > 代码库 > MyBites的几点说明

MyBites的几点说明

在我们实际项目当中,我们数据库及表中的列名和实体类中的字段名不一定都是一致的,所以我们在使用MyBites中如何处理这个问题呢?

在MyBites中有两种解决方案来处理当前这种情况:

首先将表结构贴出来:

技术分享

对应实体类贴出来:

技术分享
package cn.core.domain;

public class User {
    //用户主键
    private String user_id;
    //用户名称
    private String uname;
    //地址
    private String addr;
    //年龄
    private Integer age;
    /** 
     * 返回 用户主键 
     *  
     * @return 用户主键 
     */
    public String getUser_id() {
        return user_id;
    }
    /** 
     * 设置 用户主键 
     *  
     * @param user_id 
     *            用户主键 
     */
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
    /** 
     * 返回 用户名称 
     *  
     * @return 用户名称 
     */
    public String getUname() {
        return uname;
    }
    /** 
     * 设置 用户名称 
     *  
     * @param uname 
     *            用户名称 
     */
    public void setUname(String uname) {
        this.uname = uname;
    }
    
    
    
    /** 
     * 返回 地址 
     *  
     * @return 地址 
     */
    public String getAddr() {
        return addr;
    }
    /** 
     * 设置 地址 
     *  
     * @param addr 
     *            地址 
     */
    public void setAddr(String addr) {
        this.addr = addr;
    }
    /** 
     * 返回 年龄 
     *  
     * @return 年龄 
     */
    public Integer getAge() {
        return age;
    }
    /** 
     * 设置 年龄 
     *  
     * @param age 
     *            年龄 
     */
    public void setAge(Integer age) {
        this.age = age;
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "User [user_id=" + user_id + ", uname=" + uname + ", addr="
                + addr + ", age=" + age + "]";
    }
    
    
    
    
    
}
User实体类

一、修改sql语句:

    <select id="selectUserById" parameterType="string" resultType="cn.core.domain.User">
        select user_id,uname,address as addr,age from user where user_id = #{user_id}
    </select>

可以看到,将查询语句中的*替换成对应的列名,将不一致的列名通过起别名的方式和实体类进行对应,通过测试这种方式也确实好使,但是实际项目当中很少会用这种方式去进行字段映射,因为需要改大量的sql代码,所以推荐使用下面这种处理方式

二、使用resultMap

    <!-- 声明一个resultMap id在当前空间唯一即可 -->
    <resultMap type="cn.core.domain.User" id="userMap">
        <id column="user_id" property="user_id"  />
        <result column="uname" property="uname" />
        <result column="address" property="addr" />
        <result column="age" property="age" />
    </resultMap>
    <!-- 查询单个对象 -->
    <select id="selectUserById" parameterType="string" resultMap="userMap">
        select * from user where user_id = #{user_id}
    </select>

可以看到将resultType换成resultMap 在对应属性中指定我们手动去映射的一个resultMap,即可解决我们的问题。

 注意:在我们使用parameterType和resultType的时候MyBites帮助我们定义了几种类型,最常用的就是小写的string和java.lang.String一样的效果,并且还提供了hashmap这个类型,也就是说支持在参数和返回值直接指定一个HashMap的意思,具体用法我就不贴出来了,大家可以自己摸索动手实践一下。

MyBites的几点说明