SQL的映射文件 (2)

在映射文件中编写插入语句

<insert 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>

insert元素中属性的意思和select一样 编写测试类

public void testAdd(){ SqlSession sqlSession=null; try{ sqlSession=MyBatisUtil.createSqlSession(); User user=new User(); user.setUserCode("test"); user.setUserName("测试数据"); user.setUserPassword("anxin123"); user.setGender(1); Date birthday=new SimpleDateFormat("yyyy-MM-dd").parse("1990-1-1"); user.setBirthday(birthday); user.setPhone("1228392324"); user.setAddress("北京"); user.setUserRole(3); user.setCreatedBy(1); user.setCreationDate(new Date()); int count=sqlSession.getMapper(UserMapper.class).add(user); System.out.println("数量:"+count); sqlSession.commit(); }catch (Exception ex){ ex.printStackTrace(); sqlSession.rollback(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } } 使用update完成修改

在接口中添加modify()方法

public int modify(User user);

在映射文件中编写修改语句

<update parameterType="User"> UPDATE USER SET userCode=#{userCode},userName=#{userName},userPassword=# {userPassword}, gender=#{gender},phone=#{phone},address=#{address},userRole=#{userRole},modifyBy=# {modifyBy}, modifyDate=#{modifyDate},birthday=#{birthday} WHERE id=#{id} </update>

编写测试代码

public int modify(){ SqlSession sqlSession=null; try{ sqlSession=MyBatisUtil.createSqlSession(); User user=new User(); user.setId(15); user.setUserCode("test1"); user.setUserName("测试皮皮修改"); user.setUserPassword("mengqingpi123"); user.setGender(1); Date birthday=new SimpleDateFormat("yyyy-MM-dd").parse("1990-1-1"); user.setBirthday(birthday); user.setPhone("1228392324"); user.setAddress("北京"); user.setUserRole(3); user.setCreateBy(1); user.setCreationDate(new Date()); int count=sqlSession.getMapper(UserMapper.class).modify(user); //int i=2/0;//测试事务回滚 System.out.println("数量:"+count); sqlSession.commit();//事务提交 }catch (Exception ex){ ex.printStackTrace(); sqlSession.rollback();//事务回滚 }finally { MyBatisUtil.closeSqlSession(sqlSession); } } 使用@Param注解实现多参数入参

如果我们只有两个或者三个参数没有必要封装成对象,我们可以直接多参数入参,这样代码可读性会更高
比如我们要修改密码 在参数前增加@Param注解

public int updatePwd(@Param("id")Integer id,@Param("userPassword")String pwd);

上面代码中的@Param("userPassword")String pwd 就相当于把参数pwd改名为userPassword,在映射的SQl中需要使用#{注解名称}
编写修改的SQL语句

<update> UPDATE USER SET userPassword=#{userPassword} WHERE id=#{id} </update>

编写测试类

public void testUpdatepwd(){ SqlSession sqlSession=null; try{ sqlSession=MyBatisUtil.createSqlSession(); int id=15; String pwd="pipi456"; int count=sqlSession.getMapper(UserMapper.class).updatePwd(id,pwd); //int i=2/0;//测试事务回滚 System.out.println("数量:"+count); sqlSession.commit(); }catch (Exception ex){ ex.printStackTrace(); sqlSession.rollback(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } }

经验:超过4个参数最好封装成对象入参(特别是在常规增加或者修改时,字段较多,封装成对象比较方便)

使用delete完成删除操作

编写接口方法

public int deleteUserById(@Param("id")Integer delId);

在映射文件中编写删除的SQL语句

<delete> DELETE FROM USER WHERE id=#{id} </delete>

编写测试

public void testDeleteUser(){ 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实现高级结果映射(表表关联)

association:映射到JavaBean的某个“复杂查询”属性,比如javaBean类,即JavaBean内部嵌套一个复杂数据类型,这种情况就属于复杂类型的关联,但是要注意:association只处理一对一的关系
在这里我们用用户的角色做演示,因为一个用户只有一个角色(角色的意思 比如:管理员,站长)
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 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxsjf.html