四.修改 update
四.一 全部修改时
接口:
int update(User user);
实现方法:
@Override public int update(User user) { SqlSession sqlSession=SqlSessionFactoryUtils.getSession(); int result= sqlSession.update("com.yjl.pojo.User.updateUser",user); sqlSession.commit(); //手动提交 sqlSession.close(); return result; }
测试方法:
@Test public void updateTest(){ UserDao userDao=new UserDaoImpl(); User user=new User(); user.setId(1); //编号为1 user.setName("修改老蝴蝶"); user.setAge(25); user.setSex("男"); user.setDescription("这是一个修改的老蝴蝶"); userDao.update(user); }
xml 修改语句
<update id="updateUser" parameterType="com.yjl.pojo.User"> update user set name=#{name},sex=#{sex},age=#{age},description=#{description} where id=#{id} </update>
运行时:
数据库:
确实发生了修改的操作。是正确的。
四.二 部分修改字段时
xml 不变。
测试方法:
@Test public void update1Test(){ UserDao userDao=new UserDaoImpl(); User user=new User(); user.setId(1); user.setDescription("这是一个老蝴蝶,只修改描述"); userDao.update(user); }
传入的值为空,
这样修改的话,#{name} 时取出的值 是默认的String 为null, #{age} 也是默认的Integer, 为null. 表示修改的传入值是null .
四.三 查询时修改
将id =1 的值设置成原先的值
xml 不变,测试方法为:
@Test public void update2Test(){ UserDao userDao=new UserDaoImpl(); SqlSession sqlSession=SqlSessionFactoryUtils.getSession(); User user=sqlSession.selectOne("com.yjl.pojo.User.getById",1); user.setDescription("这是一个老蝴蝶,只修改描述"); userDao.update(user); }
可以正确的进行修改。
如果一个表中 有几十个字段,而现在只修改 一个描述字段,会将以前所有的字段都进行修改, 很浪费资源的。 希望 可以修改哪一个,就只修改哪一个, 后面的动态sql 语句会学习的。
五. 删除 delete
接口:
int delete(int id);
实现类:
@Override public int delete(int id) { SqlSession sqlSession=SqlSessionFactoryUtils.getSession(); int result= sqlSession.delete("com.yjl.pojo.User.deleteById",id); sqlSession.commit(); //手动提交 sqlSession.close(); return result; }
测试方法:
@Test public void deleteTest(){ UserDao userDao=new UserDaoImpl(); userDao.delete(1); }
xml 语句:
<!-- 删除记录 --> <delete id="deleteById" parameterType="int"> delete from user where id=#{id} </delete>
写正常的删除语句。
运行:
六. 注意点
这就是原来 ibatis 时的命名空间的 单表基本操作, 当然 ,也有其他的操作形式,这里暂不讲解,会在Mapper 时进行详细的讲解。
另外注意, sql 语句时, 如:
delete from user where id=#{id}
加上; 和不加; 都可以运行, 但不建议加; 号。
谢谢!!!