Mybatis程序员

输入、输出映射-动态sql

2017-11-17  本文已影响51人  常威爆打来福

一 输入映射-包装类型

User.java

package entity;

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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

UserCustom.java

package entity;

public class UserCustom extends User {
    //扩展User类
}

UserQuerVo.java

package entity;

public class UserQuerVo {
    private UserCustom userCustom;
        //包装UserCustom
    public UserCustom getUserCustom() {
        return userCustom;
    }

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

userMapper.xml

    <!--综合信息查询 根据姓名和性别-->
    <select id="findUserByinfo" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
    SELECT * FROM user WHERE username = #{userCustom.username} AND sex LIKE "%${userCustom.sex}%"
    </select>

UserDaoMapperTest.java

    @Test
    public void findUserByinfo() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
        UserQuerVo userQuerVo = new UserQuerVo();
        UserCustom userCustom = new UserCustom();
        userCustom.setUsername("马云");
        userCustom.setSex("男");
        userQuerVo.setUserCustom(userCustom);

        UserCustom userCustom1= userDaoMapper.findUserByinfo(userQuerVo);
        System.out.println(userCustom1);
    }
测试结果

二 输出映射

1 resultType

userMapper.xml

    <!--输出映射 pojo resultType-->
    <select id="findUserCount" parameterType="entity.UserQuerVo" resultType="int">
        SELECT COUNT(*) FROM  user WHERE username LIKE "%${userCustom.username}%"
    </select>

UserDaoMapper.java

    //输出映射 pojo resultType
    public int findUserCount(UserQuerVo userQuerVo) throws Exception;

UserDaoMapperTest.java

    @Test
    public void findUserCount() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
        UserQuerVo userQuerVo = new UserQuerVo();
        UserCustom userCustom = new UserCustom();
        userCustom.setUsername("马");
        userQuerVo.setUserCustom(userCustom);
        int num = userDaoMapper.findUserCount(userQuerVo);
        System.out.println(num);
    }
测试结果
2 resultMap

userMapper.xml

    <!--配置resultMap映射-->
        <resultMap id="PojoresultMap" type="entity.User">
            <id column="i" property="id"></id>
            <result column="us" property="username"></result>
            <result column="ad" property="address"></result>
        </resultMap>

    <!--输出映射 pojo resultMap-->
    <select id="findUserByResultMap" parameterType="int" resultMap="PojoresultMap">
            SELECT id i,username us, address ad FROM user WHERE id = #{userCustom.id}
        </select>

UserDaoMapper.java

    //输出映射 pojo resultMap
    public User findUserByResultMap(int id) throws Exception;

UserDaoMapperTest.java

    @Test
    public void findUserByResultMap() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
        User user = userDaoMapper.findUserByResultMap(10);
        System.out.println(user);
    }
测试结果

三 动态sql

1 解释
2 if 判断
    <select id="findUserByinfo" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
        SELECT * FROM user
        <where>
            <if test="userCustom.username != null">
                <if test="userCustom.username != null and userCustom.username != ''">
                    and username = #{userCustom.username}
                </if>
                <if test="userCustom.sex != null and userCustom.sex != ''">
                    and sex like "%${userCustom.sex}%"
                </if>
            </if>
        </where>
    </select>
测试执行.png
3 sql片段

userMapper.xml

    <!--动态sql片段
    id:sql片段唯一标识

    基于单表来定义sql片段,这样的话这个sql片段可重用性才高,在sql片段可重用性才高
    在sql片段不要包括where
    -->
    <sql id="qusery_user_where">
        <if test="userCustom.username != null">
            <if test="userCustom.username != null and userCustom.username != ''">
                and username = #{userCustom.username}
            </if>
            <if test="userCustom.sex != null and userCustom.sex != ''">
                and sex like "%${userCustom.sex}%"
            </if>
        </if>
    </sql>


    <select id="findUserByinfo" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
    SELECT * FROM user
    <where>
        <!--sql片段引用-->
      <include refid="qusery_user_where"></include>
    </where>
4 foreach

userMapper.xml

    <!--输入list集合 foreach遍历-->
    <select id="findUserList" parameterType="entity.UserQuerVo" resultType="entity.UserCustom">
        SELECT * FROM user WHERE
        <!--collection:指定输入对象中集合属性
item:每次遍历生成对象
open:开始遍历时拼接串
close:结束遍历时拼接串
separator:遍历两个对象中需要拼接的串
-->
            <foreach collection="ids" item="id" open="(" close=")" separator="or">
                <!--每次遍历需要拼接的串-->
                id = #{id}
            </foreach>
    </select>

UserDaoMapper.java

    //
    public UserCustom findUserList(UserQuerVo userQuerVo) throws Exception;

测试

    @Test
    public void findUserList() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDaoMapper userDaoMapper = sqlSession.getMapper(UserDaoMapper.class);
        UserQuerVo userQuerVo = new UserQuerVo();
        List ids = new ArrayList();
        ids.add(1);
        userQuerVo.setIds(ids);
       UserCustom userList =  userDaoMapper.findUserList(userQuerVo);
        System.out.println(userList);
    }
上一篇 下一篇

猜你喜欢

热点阅读