-
Sql映射文件
(1)Sql映射文件是MyBatis框架最具有特色部分,功能强大使用简单
(2)Sql映射文件中的几个顶级元素有,mapper、cache、cache-ref、resultMap、sql、insert、update、delete、select。
-
MyBatis框架的条件查询
(1)多参数查询
//接口代码 List<StorageRecord> getByIdList(@Param("goodsName")String goodsName,@Param("supplierId")Integer supplierId,@Param("payStatus")Integer payStatus); //Sql映射文件代码 <select id="getByIdList" resultType="StorageRecord"> select * from t_storage_record where goodsName like concat('%',#{goodsName},'%') and supplierId=#{supplierId} and payStatus=#{payStatus} </select>
(2)单一查询
//接口代码
List<User> getUsersByRealName(String Name);
//Sql映射代码
<select id="getUsersByRealName" resultType="User">
select * from t_sys_user where realName like concat('%',#{name},'%')
</select>
(3)框架结果映射
MyBatis框架会自动获取结果集中的列名称并查找具有相同名称的属性
(4)使用resultMap元素自定义结果映射
//接口代码
List<User> getUserListWithRoleName(User user);
//Sql映射代码
<select id="getUsersByRealName" resultType="User">
select * from t_sys_user where realName like concat('%',#{name},'%')
</select>
(5)嵌套结果映射
使用连接查询的时候,结果集中往往会包含多个实体类的相关信息,此时可以使用嵌套结果映射
associtation元素:assoctiation元素用来处理一对一或多对一的结果
//接口代码
List<User> getUserListByRoleId(@Param("roleId")Integer roleId);
//Sql映射代码
<resultMap id="userWithSysRole" type="User">
<id property="id" column="id"/>
<result property="realName" column="realName"/>
<association property="sysRole" javaType="sysRole">
<result property="code" column="code"/>
<result property="roleName" column="roleName"/>
</association>
</resultMap>
<select id="getUserListByRoleId" parameterType="int" resultMap="userWithSysRole">
select u.*,r.id as rid,r.code,r.roleName from t_sys_user u,t_sys_role r where u.roleId=#{roleId} and u.roleId=r.id
</select>
property:实体类中用来映射结果子集的属性
javaType:property指定的属性数据类型
collection元素:表达的是一对多的关系
//接口代码
List<User> getUserAndAddressesByUserId(@Param("userId")Integer userId);
//Sql映射代码
<resultMap id="userWithAddresses" type="User">
<id property="id" column="id"/>
<result property="account" column="account"/>
<result property="realName" column="realName"/>
<collection property="addressList" ofType="address">
<id property="id" column="aid"/>
<result property="contact" column="contact"/>
<result property="addressDesc" column="addressDesc"/>
<result property="postCode" column="postCode"/>
<result property="tel" column="tel"/>
</collection>
</resultMap>
<select id="getUserAndAddressesByUserId" parameterType="int" resultMap="userWithAddresses">
select u.*, a.id as aid, a.contact, a.addressDesc, a.postCode, a.tel
from t_sys_user u,
t_address a
where u.id = a.userId
and u.id = #{userId}
</select>
property:实体类中用来映射结果子集的集合属性
ofType:指定的集合属性中的元素数据类型
-
resultType与resultType小结
resultMap的自动映射行为
NONE:禁用自动映射
PARTIAL:默认属性,对没有嵌套的使用自动映射,而对于没有嵌套的不使用
FULL:全部使用自动映射
- 增删改操作
//接口代码 //增加 int add(User user); //修改 int updatePwd(@Param("id")Integer id,@Param("password")String pwd); //删除 int deleteUserById(@Param("id")Integer id); //Sql映射代码 //增加 <insert id="add" parameterType="User"> insert into t_sys_user(account,realName,password,sex,birthday,phone,address,roleId,createdUserId,createdTime) values (#{account},#{realName},#{password},#{sex},#{birthday},#{phone},#{address},#{roleId},#{createdUserId},#{createdTime}) </insert> //修改 <update id="updatePwd" > update t_sys_user set password=#{password} where id=#{id} </update> //删除 <delete id="deleteUserById" > delete from t_sys_user where id=#{id} </delete>
MyBatis框架缓存
-
一级缓存
-
二级缓存