在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()提交事务
这些注意事项对于下节课的修改、删除数据一样适用,还有代码编写的规则逻辑也适用