码迷,mamicode.com
首页 > 其他好文 > 详细

14Mybatis_输入映射(传递pojo的包装对象)——很重要

时间:2016-08-16 23:46:30      阅读:545      评论:0      收藏:0      [点我收藏+]

标签:

假设我们有这么一个需求:用户信息的综合查询,需要传入的查询条件很复杂(可能包括用户信息,其他的信息,比如商品,订单)

我们的思想是:传入到select中的parameterType是一个包装类,里面可以有很多的东西。

我们已经有一个user.java po类了,但我们查询的条件可能是比user这个类更复杂的。我们为了方便扩展就要延伸出一个userCustom extend user 这么一个类。

案例如下:

先给出案例结构:

技术分享

上面的案例说明如下:SqlMapConfig.xml是总的配置文件。mapper/userMapper.xml是这个案例的配置文件。User.java是针对数据库的实体类。UserCustom.java是User.java的实现类。UserQueryVo.java是包装类。userMapper.java是Mapper接口类。Mybatis_mappertest.java是测试代码。

第一步:

SqlMapConfig.xml代码如下:

<?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>
    
      
    
    <!-- properties的配置必须写在typeAliases的上面 -->
    <properties resource="db.properties"></properties>

<!-- 配置别名 -->
<typeAliases>
    <!-- 针对别名定义
    type:类型的路径
    alias:别名
     -->
    <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/>
 </typeAliases>
 
       
 <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理-->
            <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>

    <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml-->
        <mappers>
            
           <!--  把mapper.xml加载进sqlMapConfig.xml-->
           <!-- 
           遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致
           且在一个目录中。
           当着这个规范的前提是:使用mapper代理方法。
           
           
           
            -->
            <mapper resource="mapper/userMapper.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">
<!-- nanmespace:命名空间。 作用就是对sql进行分类话管理,理解Sal分离

注意:使用mapper代理方式,namespace有特殊重要的作用
-->

<mapper namespace="cn.itcast.mybatis.mapper.userMapper">
   
 <!-- 
 这里的id要和Mapp接口里面的函数名字一模一样。parameterType表示输入的类型,
 resultType表示输出的类型。
UserQueryVo里面有一个UserCustom,                           #{userCustom.sex} 里面写的是UserQueryVo里面的属性(userCustom)的属性(sex)

--> <select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom"> SELECT * FROM USER WHERE user.sex= #{userCustom.sex} AND user.username=#{userCustom.username} </select> </mapper>

 

第三步:

User.java代码和UserCustom.java:

package cn.itcast.mybatis.po;

import java.util.Date;

public class User {
private int id;//主键
private String username;//用户的名称
private Date birthday;//生日
private String sex;//性别
private String address;//地址
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public Date getBirthday() {
    return birthday;
}
public void setBirthday(Date birthday) {
    this.birthday = birthday;
}
public String getSex() {
    return sex;
}
public void setSex(String sex) {
    this.sex = sex;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}

}
package cn.itcast.mybatis.po;

public class UserCustom extends User {

}

第四步:写UserQueryVo.java包装类

package cn.itcast.mybatis.po;

public class UserQueryVo {
    //用户的查询条件
private UserCustom userCustom;

public UserCustom getUserCustom() {
    return userCustom;
}

public void setUserCustom(UserCustom userCustom) {
    this.userCustom = userCustom;
}


}

 

第五步:userMapper.java是Mapper接口类

package cn.itcast.mybatis.mapper;



import java.util.List;

import cn.itcast.mybatis.po.User;
import cn.itcast.mybatis.po.UserCustom;
import cn.itcast.mybatis.po.UserQueryVo;

public interface userMapper {
    //这个名字(findUserById)和UserMapper.xml里面的id要一模一样
//注意这里写的是返回的List.这样代码内部就会调用selectList,但是在userMapper.xml中要写的是
//resultType="cn.itcast.mybatis.po.User"
/*
 * 
 <select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom">
        SELECT * FROM USER WHERE user.sex= #{userCustom.sex} AND user.username=#{userCustom.username} 
    </select>
 * 
 * 
 */
public List<UserCustom> findUserList(UserQueryVo userQueryVo);
}

 

第六步:

编写Mybatis_mappertest.java测试代码。

package cn.itcast.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

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

import cn.itcast.mybatis.Dao.UserMapper;
import cn.itcast.mybatis.mapper.userMapper;
import cn.itcast.mybatis.po.User;
import cn.itcast.mybatis.po.UserCustom;
import cn.itcast.mybatis.po.UserQueryVo;

public class Mybatis_mappertest {
    
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void setup() throws IOException
    {   String resource="SqlMapConfig.xml";
        InputStream inputStream= Resources.getResourceAsStream(resource);
        //主要是生成SqlsessionFactory。
        this.sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
    }
    @Test
    public void testMaper()
    {
        SqlSession sqlSession=null;
        
        sqlSession=sqlSessionFactory.openSession();
        //生成代理类
        userMapper userMapper=sqlSession.getMapper(userMapper.class);
       //创建包装对象,设置查询条件
        UserQueryVo userQueryVo=new UserQueryVo();
        UserCustom userCustom=new UserCustom();
     
       
        userCustom.setSex("1");
        userCustom.setUsername("王");
        //给包装类设置设置查询条件
        userQueryVo.setUserCustom(userCustom);
        
        userMapper.findUserList(userQueryVo);
        
        
    }

}

 

结果:运行正常。

 

14Mybatis_输入映射(传递pojo的包装对象)——很重要

标签:

原文地址:http://www.cnblogs.com/shenxiaoquan/p/5778146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!