具体操作;
第一步: UserMapper.xml添加如下
xxxxxxxxxx
<!--修改数据-->
<update id="update" parameterType="com.huanf.domain.User">
<!--下面那行#{}里面写的是User类的成员变量(这几个成员变量是对应数据库的字段名称)-->
update user set username=#{username},password=#{password} where id=#{id}
</update>
第二步: MyBatisTest类添加如下,并运行测试
xxxxxxxxxx
//MyBatis修改数据
public void test3() throws IOException {
//模拟user对象。表示修改id为7对应的字段值,例如username修改为lucy,password修改为123
User user = new User();
user.setId(7);
user.setUsername("lucy");
user.setPassword("123");
//获得核心配置文件。注意写的是相对路径,也就是src/main/resources/sqlMapConfig.xml
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作,参数其实就是UserMapper.xml里面的<mapper>标签的namespace值,还有<select>标签的id值。语法namespace值.id值
sqlSession.update("zidingyi_userMapper.update",user);//这个user是上面模拟对象的user
//mybatis如果执行增删改操作,必须提交事务才能生效
sqlSession.commit();
//运行测试test3,然后去数据库查看数据
//释放资源
sqlSession.close();
}
具体操作:
第一步: UserMapper.xml添加如下
xxxxxxxxxx
<!--删除数据。删除时我们可以根据'表的id字段'删,id是整型,所以parameterType要写整型的全包名-->
<delete id="delete" parameterType="java.lang.Integer">
<!--上面我们学的查询、插入,由于parameterType写的是对象的全包名,所以#{}要写对象里面的成员变量;
但是这里parameterType写的是'一个'具体的'简单参数类型',那么#{}里面随便写都行-->
delete from user where id=#{suibianxie_id}
</delete>
第二步: MyBatisTest类添加如下,并运行测试
xxxxxxxxxx
//MyBatis删除数据
public void test4() throws IOException {
//获得核心配置文件。注意写的是相对路径,也就是src/main/resources/sqlMapConfig.xml
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作,参数其实就是UserMapper.xml里面的<mapper>标签的namespace值,还有<select>标签的id值。语法namespace值.id值
sqlSession.delete("zidingyi_userMapper.delete",2);//删id为2的表数据
//mybatis如果执行增删改操作,必须提交事务才能生效
sqlSession.commit();
//运行测试test4,然后去数据库查看数据
//释放资源
sqlSession.close();
}
1、删除语句使用delete标签
2、SQL语句中使用#{任意字符}方式引用传递(注意parameterType就是引用传递)的单个参数
3、删除操作使用的API是sqlSession.delete("命名空间.id",Object);。如果是根据id值删,Object就写具体的数字,根据其他字段删也同理
4、删除操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即使用sqlSession.commit()提交事务
还有别搞错,引用传递也就是parameterType,不要理解为当删除数据时,就只能引用单个参数, 从而让你觉得当删除数据只能这样写: sqlSession.delete("命名空间.id",参数类型),当插入、修改数据只能sqlSession.insert|update("命名空间.id",对象);
正确理解: 引用传递既可以是对象,也可以是单个参数,区别就是如下:
1、当parameterType是对象时,我们在MyBatisTest类进行使用时,首先要创建一个模拟对象,例如user,然后sqlSession.delete("命名空间.id",user)
2、当parameterType是单个参数时,例如Integer,我们在MyBatisTest类进行使用时,就直接sqlSession.delete("命名空间.id",7)
3、不管parameterType是对象还是单个参数,都必须写全包名。例如对象com.huanf.domain.User、例如单个参数java.lang.Integer
4、单个参数通常指的是类型,类型的全包名一般在java.lang包下