具体操作;
第一步: 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包下