14Mybatis_輸入映射(傳遞pojo的包裝對象)——很重要


假設我們有這么一個需求:用戶信息的綜合查詢,需要傳入的查詢條件很復雜(可能包括用戶信息,其他的信息,比如商品,訂單)

我們的思想是:傳入到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);
        
        
    }

}

 

結果:運行正常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM