1. 程式人生 > >SSM框架之Mybatis的SQL對映檔案寫法

SSM框架之Mybatis的SQL對映檔案寫法

1、單個引數

 // UserMapper.java
    public interface UserMapper {
        public List<User> getUserListByUserName(String userName);
    }

// UserMapper.xml
    <!--根據使用者名稱稱查詢使用者列表(模糊查詢) concat 連線字串 resultType 返回型別, paramenterType傳參型別-->

    <select id="getUserListByUserName" resultType="User" parameterType="String">
        select * from user where userName like CONCAT ('%',#{userName},'%')
    </select>

 2、傳入引數:物件

   // UserMapper.java
    public interface UserMapper {
        public List<User> getUserListByUser(User user);
    }

   // UserMapper.xml
    <!-- 查詢使用者列表(引數:物件入參) -->
    <select id="getUserListByUser" resultType="User" parameterType="User">
        select * from user where userName like CONCAT 
        ('%',#{userName},'%') and userRole = #{userRole}
    </select>

3、傳入引數:Map

 // UserMapper.java
    public interface UserMapper {
        public List<User> getUserListByMap(Map<String, String> userMap);
    }

 // UserMapper.xml
    <!-- 查詢使用者列表(引數:Map) -->
    <select id="getUserListByMap" resultType="User" parameterType="Map">
        select * from user where userName like CONCAT
        ('%',#{uName},'%') and userRole = #{uRole}
    </select>

4、resultMap使用

// UserMapper.xml
<!-- 當資料庫中的欄位資訊與物件的屬性不一致時需要通過resultMap來對映,即將不同表合併成一張 -->
    <resultMap type="User" id="userList">
        <result property="id" column="id" />
        <result property="userCode" column="userCode" />
        <result property="userName" column="userName" />
        <result property="phone" column="phone" />
        <result property="birthday" column="birthday" />
        <result property="gender" column="gender" />
        <result property="userRole" column="userRole" />
        <result property="userRoleName" column="roleName" />
    </resultMap>

    <select id="getUserListByUser" resultMap="userList" parameterType="User">
        select u.*,r.roleName from user u,role r
        where u.userName like CONCAT ('%',#{userName},'%')
        and u.userRole = #{userRole} and u.userRole = r.id
    </select>

 5、向資料庫新增資訊

 // UserMapper.java
    public interface UserMapper {
        public int addUser(User user);
    }

 // UserMapper.xml
    <!-- 增加新使用者 -->
    <insert id="addUser" parameterType="User">
        insert into user
        (userCode,userName,userPassword,gender,birthday,phone,
        address,userRole,createdBy,creationDate)
        values (#{userCode}, #{userName}, #{userPassword},#{gender},#{birthday},
        #{phone},#{address},#{userRole},#{createdBy},#{creationDate})
    </insert>

6、更新資料庫資訊(寫法一)

// UserMapper.java
    public interface UserMapper {
        public int modify(User user);
    }

// UserMapper.xml
    <!-- 修改使用者資訊 -->
    <update id="modify" parameterType="User">
        update user set
        userCode=#{userCode},userName=#{userName},userPassword=#{userPassword},
        gender=#{gender},birthday=#{birthday},phone=#{phone},address=#{address},
        userRole=#{userRole},modifyBy=#{modifyBy},modifyDate=#{modifyDate}
        where id = #{id}
    </update>   

 7、更新資料庫資訊(寫法二)

// UserMapper.java
    public interface UserMapper {
        public int updatePwd(@Param("id")Integer id, @Param("password")String pwd);
    }

// UserMapper.xml
    <!-- 修改當前使用者密碼 -->
    <update id="updatePwd">
        update user set userPassword=#{password} where id = #{id}
    </update>

 8、刪除資料

 // UserMapper.java
    public interface UserMapper {
        public int deleteUserById(@Param("id")Integer delId);
    }

 // UserMapper.xml
    <!-- 根據使用者id刪除使用者資訊 -->
    <delete id="deleteUserById">
        delete from user where id = #{id} 
    </delete>

 9、resultMap > association (寫法一)

// User.java
    public class User {
        // association
        private Role role; // 使用者角色

        public Role getRole() {
            return role;
        }

        public void setRole(Role role) {
            this.role = role;
        }
        // association
    }

// Role.java
    public class Role {
        private Integer id; // id
        private String roleCode; // 角色編碼
        private String roleName; // 角色名稱
        ...
        //get{} set{}
    }

// UserMapper.java
    public interface UserMapper {
        public List<User> getUserListByRoleId(@Param("userRole")Integer roleId);
    }
// UserMapper.xml
    <!-- 根據使用者id獲取使用者列表  association start -->
    <resultMap type="User" id="userRoleList">
        <id property="id" column="id" />
        <result property="userCode" column="userCode" />
        <result property="userName" column="userName" />
        <result property="userRole" column="userRole" />
        <association property="role" javaType="Role">
            <id property="id" column="r_id" />
            <result property="roleCode" column="roleCode" />
            <result property="roleName" column="roleName" />
        </association>
        <!-- 
        javaType=Role 對應JavaBean名;
        property      對應JavaBean的屬性;
        column        對應資料庫查詢結果集的欄位 
        -->
    </resultMap>

    <select id="getUserListByRoleId" parameterType="Integer"
        resultMap="userRoleList">
        select u.*,r.id as r_id,r.roleCode, r.roleName 
        from user u,role r
        where u.userRole=#{userRole} and u.userRole = r.id
    </select>
    <!-- 根據使用者id獲取使用者列表  association end -->

 10、resultMap > association (寫法二)

// UserMapper.java
    public interface UserMapper {
        public List<User> getUserListByRoleId2(@Param("userRole")Integer roleId);
    }


// UserMapper.xml
    <!-- 根據使用者id獲取使用者列表2  association start -->
    <resultMap type="User" id="userRoleList2">
        <id property="id" column="id" />
        <result property="userCode" column="userCode" />
        <result property="userName" column="userName" />
        <result property="userRole" column="userRole" />
        <association property="role" javaType="Role" resultMap="roleResult" />
    </resultMap>

    <resultMap type="Role" id="roleResult">
        <id property="id" column="r_id" />
        <result property="roleCode" column="roleCode" />
        <result property="roleName" column="roleName" />
    </resultMap>

    <select id="getUserListByRoleId2" parameterType="Integer"
        resultMap="userRoleList2">
        select u.*,r.id as r_id,r.roleCode, r.roleName
        from user u,role r
        where u.userRole=#{userRole}
        and u.userRole = r.id
    </select>
    <!-- 根據使用者id獲取使用者列表2  association end -->

11、resultMap > collection(寫法一)

// User.java
    public class User {
        // collection
        private List<Address> addressList;

        public List<Address> getAddressList() {
            return addressList;
        }

        public void setAddressList(List<Address> addressList) {
            this.addressList = addressList;
        }
        // collection
    }

// Role.java
    public class Address {
        ...
        //get{} set{}
    }

// UserMapper.java
    public interface UserMapper {
        public List<User> getAddressListByUserId(@Param("id")Integer userId);
    }

// UserMapper.xml
    <!-- 獲取指定使用者的地址列表(user表-address表: 1對多) collection start -->
    <resultMap type="User" id="userAddressList">
        <id property="id" column="id" />
        <result property="userCode" column="userCode" />
        <result property="userName" column="userName" />
        <!-- ofType 對應JavaBean -->
        <collection property="addressList" ofType="Address">
            <id property="id" column="a_id" />
            <result property="postCode" column="postCode" />
            <result property="tel" column="tel" />
            <result property="contact" column="contact" />
            <result property="addressDesc" column="addressDesc" />
        </collection>
    </resultMap>

    <select id="getAddressListByUserId" parameterType="Integer"
        resultMap="userAddressList">
        select u.*, a.id as a_id, a.contact, a.addressDesc, a.tel, a.postCode
        from user u, address a
        where u.id=a.userId and u.id=#{id}
    </select>
    <!-- 獲取指定使用者的地址列表(user表-address表: 1對多) collection end -->

 12、resultMap > collection(寫法二)

// UserMapper.java
    public interface UserMapper {
        public List<User> getAddressListByUserId2(@Param("id")Integer userId);
    }

// UserMapper.xml
    <!-- 獲取指定使用者的地址列表2(user表-address表: 1對多) collection start -->
    <resultMap type="User" id="userAddressList2">
        <id property="id" column="id" />
        <result property="userCode" column="userCode" />
        <result property="userName" column="userName" />
        <!-- ofType 對應JavaBean -->
        <collection property="addressList" ofType="Address" resultMap="addressResult"/>
    </resultMap>

    <resultMap type="Address" id="addressResult">
        <id property="id" column="a_id" />
        <result property="postCode" column="postCode" />
        <result property="tel" column="tel" />
        <result property="contact" column="contact" />
        <result property="addressDesc" column="addressDesc" />
    </resultMap>

    <select id="getAddressListByUserId2" parameterType="Integer"
        resultMap="userAddressList2">
        select u.*, a.id as a_id, a.contact, a.addressDesc, a.tel, a.postCode
        from user u, address a
        where u.id=a.userId and u.id=#{id}
    </select>
    <!-- 獲取指定使用者的地址列表2(user表-address表: 1對多) collection end -->

 13、設定resultMap自動對映的匹配級別

// mybatis-config.xml
    <settings>
        <setting name="logImpl" value="LOG4J"/>
        <!-- 設定resultMap的自動對映級別:
                NONE   (禁止自動匹配,無法自動匹配JavaBean屬性)
                PARTIAL(預設:區域性)
                FULL   (全部對映,除了匹配resultMap屬性還有JavaBean的全部屬性)
        -->
        <!-- <setting name="autoMappingBehavior" value="NONE"/> -->
        <!-- <setting name="autoMappingBehavior" value="PARTIAL"/> -->
        <!-- <setting name="autoMappingBehavior" value="FULL"/> -->
    </settings>