如何快速上手SQL映射文件的编写?

发表于:2018-11-14 10:29

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:DJstudio    来源:博客园精华区

分享:
  使用delete完成删除操作
  编写接口方法
  int deleteUserById(@Param("id")Integer delId);
  在映射文件中编写删除语句
  <delete id="deleteUserById">
  DELETE FROM USER  WHERE id=#{id}
  </delete>
  编写测试
SqlSession sqlSession=null;
try{
sqlSession=MyBatisUtil.createSqlSession();
int id=15;
int count=sqlSession.getMapper(UserMapper.class).deleteUserById(id);
System.out.println("数量:"+count);
sqlSession.commit();
}catch (Exception ex){
ex.printStackTrace();
sqlSession.rollback();
}finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
  使用resultMap实现高级结果映射(表表关联)
  Role类
public class Role {
private Integer id;
private String roleCode;
private String roleName;
private Integer createdBy;
private Date creationDate;
private Integer modifyBy;
private Date modifyDate;
//省略getter和setter
}
  修改pojo User类
public class User {
private Integer id;             //id
private String userCode;        //用户编码
private String userName;        //用户名称
private String userPassword;    //用户密码
private Integer gender;         //性别
private Date birthday;          //出生日期
private String phone;           //电话
private String address;         //地址
private Integer userRole;       //用户角色
private Integer createdBy;       //创建者
private Date creationDate;      //创建时间
private Integer modifyBy;       //更新者     private Date modifyDate;        //更新时间
//private String userRoleName;
//用户角色名称     private Role role;
//省略getter&setter方法
}
  在UserMapper接口中添加方法
  List<User> getUserListByRoleId(@Param("userRole")Integer roleId);
  修改UserMapper.xml 增加getUserListByRoleId
  xml <resultMap id="userRoleResult" type="User"> <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> </resultMap> <select id="getUserListByRoleId" parameterType="Integer" resultMap="userRoleResult"> 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>
  使用外部resultMap复用配置
<resultMap id="roleResult" type="Role">
<id property="id" column="r_id"/>
<result property="roleCode" column="roleCode"/>
<result property="roleName" column="roleName"/>
</resultMap>
<resultMap id="userRoleResult" type="User">
<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>
  collection 一对多关联
  创建pojo Addres.java
public class Address {     private Integer id;
private String contact;
private String addressDesc;
private String postCode;
private String tel;
private Integer createdBy;
private Date creationDate;
private Integer modifyBy;
private Date modifyDate;     private Integer userId;
//省略getter和setter
}
  修改User类增加地址列表属性
  List<Address>addressList;
  编写接口中的方法
  List<User> getAddressListByUserId(@Param("id")Integer userId);
  编写映射文件
<resultMap id="addressResult" type="Address">
<id column="a_id" property="id"/>
<result property="postCode" column="postCode"/>
<result property="tel" column="tel"/>
<result property="contact" column="contact"/>
<result property="addressDesc" column="addressDesc"/>
</resultMap>
<resultMap id="userAddressResult" type="User">
<id property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<collection property="addressList" ofType="Address" resultMap="addressResult"/>
</resultMap>
  编写测试
SqlSession sqlSession=null; try{
sqlSession=MyBatisUtil.createSqlSession();
List<User> userList=sqlSession.getMapper(UserMapper.class).getAddressListByUserId(1);     for (User user: userList) {
System.out.println(user.getUserName());         List<Address> addresses=user.getAddressList();         for (Address address:
addresses) {
System.out.println("--- "+address.getContact());
}
}
}catch (Exception ex){
ex.printStackTrace();
}finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
  resultMap自动映射级别和MyBatis缓存
  autoMappingBehavior的三个级别
  NONE:禁止自动匹配
  PARTIAL:(默认)自动匹配所有属性,有内部嵌套(assocition,collection)除外
  FULL:自动匹配所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
22/2<12
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号