天天看點

MyBatis中映射檔案的輸入映射為pojo包裝類型

MyBatis中映射檔案的輸入映射為pojo包裝類型

自定義pojo類(User.java)

package com.hl.myabtis.first.beas;

import java.util.Date;

public class User {

    private int id;
    private String username;
    private char sex;
    private Date birthday;
    private String address;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public char getSex() {
        return sex;
    }
    public void setSex(char sex) {
        this.sex = sex;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", sex=" + sex
                + ", birthday=" + birthday + ", address=" + address + "]";
    }

}      

自定義pojo類的增強類(UserCustomer .java)

package com.hl.myabtis.first.beas;

/**
 *  使用者增強類
 * @author 浪丶蕩
 *
 */
public class UserCustomer extends User{
    //可以擴充使用者類
}      

用于綜合查詢的包裝類(UserQueryVo .java)

package com.hl.myabtis.first.beas;

/**
 *  查詢使用者包裝類型
 * @author 浪丶蕩
 *
 */
public class UserQueryVo extends User{
    //包裝使用者類增強類
    private UserCustomer userCustomer;
    //還可以包裝其他的(訂但、商品等)


    public UserCustomer getUserCustomer() {
        return userCustomer;
    }

    public void setUserCustomer(UserCustomer userCustomer) {
        this.userCustomer = userCustomer;
    }
}      

Mapper接口(UserMapper.java)

package com.hl.mybatis.first.mapper;


import java.util.List;

import com.hl.myabtis.first.beas.User;
import com.hl.myabtis.first.beas.UserCustomer;
import com.hl.myabtis.first.beas.UserQueryVo;

public interface UserMapper {

    //根據id查詢使用者資訊
    public User findUserById(int id) throws Exception;
    //添加使用者資訊
    public void insertUser(User user);
    //根據id删除使用者
    public void deleteUser(int id);
    //根據使用者姓名模糊查找
    public List<User> findUserByName(String name);
    //使用者資訊的綜合查詢
    public List<UserCustomer> fingUserList(UserQueryVo userQueryVo) throws Exception;
}      

mapper.xml映射檔案

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 對sql進行分開處理,隔離 -->
<mapper namespace="com.hl.mybatis.first.mapper.UserMapper">
    <!-- 執行資料庫的查詢 ID用來辨別次sql語句,稱為Statement的ID  
        #{}表示一個占位符
        parameterType指定輸入參數類型
        id:接收參數名叫id,如果參數為簡單類型,參數名随意
        resultType:輸出結果的類型,單條記錄所映射的對象類。
    -->
    <select id="findUserById" parameterType="int" resultType="user">
        select * FROM user WHERE id = #{id}
    </select>
    <!--${value}表示sql拼接串  -->
    <select id="findUserByName" parameterType="String" resultType="user">
        select * FROM user WHERE address LIKE '%${value}%'
    </select>
    <!-- 使用者資訊的綜合查詢
        查詢條件很複雜
     -->
    <select id="fingUserList" parameterType="com.hl.myabtis.first.beas.UserQueryVo" resultType="com.hl.myabtis.first.beas.UserCustomer">
        select * from user where user.sex=#{userCustomer.sex} or user.address like '$%{userCustomer.address}%'
    </select>


    <!-- 添加使用者 
        SELECT_LAST_INSERT_ID()隻适用于自增長情況
        keyProperty:将查詢到的結果設定到parameterType指定的屬性
        order:執行順序,在插入後執行
        resultType:結果類型
    -->
    <insert id="insertUser" parameterType="user">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
        SELECT LAST_INSERT_ID()
    </selectKey>
        insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
    </insert>
    <!-- 删除 
        parameterType:參數類型
    -->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id = #{value}
    </delete>
    <!-- 更新
        需求:根據ID更新使用者資訊
        parameterType:需要更新的使用者資訊
        #{id}:從輸入的user對象中擷取ID屬性,名稱需要和屬性名一緻
     -->
     <update id="updateUserByID" parameterType="user">
        update user set username = #{username},birthday = #{birthday},sex = #{sex},address = #{address} where id = #{id}
     </update>
</mapper>      

全局配置檔案

<?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 resource="db.properties" />
    <!--
     全局配置 
    <settings>
    </settings> -->
    <!-- 别名 -->
    <typeAliases>
        <!-- 單個定義别名 
        <typeAlias type="com.hl.myabtis.first.beas.User" alias="user"/>
        -->
        <!-- 批量定義别名
            指定包名,MyBatis會自動掃描包内類,自動定義别名,别名就是類名,首字母不區分大小寫
         -->
        <package name="com.hl.myabtis.first.beas"/>
    </typeAliases>

  <environments default="development">
    <environment id="development">
      <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>
  <!-- 加載映射檔案 -->
  <mappers>
    <mapper resource="sqlmap/user.xml"/>
    <mapper class="com.hl.mybatis.first.mapper.UserMapper"/>
  </mappers>
</configuration>      
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/MyBatis?useUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=123456      
@Test
    public void testfindUserList() throws Exception{
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
        //建構一個包裝類
        UserQueryVo userQueryVo = new UserQueryVo();
        //建構一個增強類
        UserCustomer userCustomer = new UserCustomer();
        userCustomer.setAddress("明月");
        userCustomer.setSex('1');
        //包裝類包裝這增強類作為查詢條件
        userQueryVo.setUserCustomer(userCustomer);


        List<UserCustomer> userList = usermapper.fingUserList(userQueryVo);
        sqlSession.close();
        for (UserCustomer user : userList) {
            System.out.println(user);
        }
    }