在a_26_0快速入门的代码基础上,继续增删改查的操作
第一步: UserMapper.xml修改为如下
<mapper namespace="zidingyi_userMapper">
<!--查询操作--> <select id="findAll" resultType="com.huanf.domain.User"> <!--查询结果会放到上面那行的resultType路径下--> select * from user </select>
<!--插入操作。其中#{}里面填写的是User类的成员变量(这几个成员变量是对应数据库的字段名称)--> <insert id="save" parameterType="com.huanf.domain.User"> <!--${}底层使用的是PreparedStatement的setString()方法,${}是一个字符串替换变量,它会将变量中的值直接替换成字符串,可能会有SQL注入的风险--> <!--#{}底层使用的是PreparedStatement,#{}是一个占位符,它会将变量中的值放在SQL语句中,而不是字符串替换变量,不会有SQL注入的风险--> insert into user values(#{id},#{username},#{password}) </insert> </mapper>
第二步: MyBatisTest类添加如下,并运行测试
//MyBatis插入数据public void test2() throws IOException { //模拟user对象。表示插入一行新数据,例如username为tom,passwor为abc,id自增我们不用指定 User user = new User(); user.setUsername("tom"); user.setPassword("abc"); //id字段在数据库中设置了自增,所以不需要为id字段赋值
//获得核心配置文件。注意写的是相对路径,也就是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.insert("zidingyi_userMapper.save",user); //这个user是上面模拟对象的user //mybatis如果执行增删改操作,必须提交事务才能生效 sqlSession.commit(); //运行测试test2,然后去数据库查看数据 //释放资源 sqlSession.close();}
1、插入语句使用insert标签
2、在映射文件中,使用parameterType属性指定要插入的数据类型 简单说就是在MyBatisTest类创建的模拟对象类型必须是'UserMapper.xml里面的parameterType="com.huanf.domain.User"中的User类'的类型
3、sql语句中,使用#{实体属性名}方式引用实体中的属性值 简单说就是在UserMapper.xml里面的#{id},#{username},#{password},其中{}里面必须是'parameterType="com.huanf.domain.User"的User类里面'定义的成员变量
4、插入操作使用的API是SQLSession.insert("命名空间.id",实体对象); 简单说实体就是User类,实体对象就是在MyBatisTest类创建的'模拟对象'user
5、插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即使用sqlSession.commit()提交事务
这些注意事项对于下节课的修改、删除数据一样适用,还有代码编写的规则逻辑也适用