SSM框架之Mybatis的SQL對映檔案寫法
阿新 • • 發佈:2018-11-05
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>