框架学习系列 mybatis 第6篇 mybatis入门程序之需求开发3向数据库中插入数据1
本节主要内容
1:根据上节课中提出的需求完成③:向数据库中插入数据
2:测试代码实现
3:总结&下节预告
本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第6篇 mybatis入门程序之需求开发3向数据库中插入数据1
声明:本文系凯哥原创。转载请注明出处
一:数据库插入数据
1.1:先写sql插入数据库
全参数插入:
说明:数据库中user表中有五个字段。所以需要五个参数。
在看表结构:
我们可以看到,主键id是自增长类型的。所以在插入的时候可以不进行插入。
修改后的sql语句:
1.2:在mybatis中怎么写呢?
思考:
1:直接把sql语句放置到对应的mapper.xml文件中吗?那么参数怎么获取?
2:传递的参数又是什么?
分析:
1:通过前面学习我们知道#{}相当于是?起占位符作用
而${}是连接符的作用(相当于是java中加号(+)连接作用)
通过sql语句,我们看到了参数值是四个?。所以这里使用#{}获取值。
2:parameterType是对应的pojo对象就可以。
在获取的时候,#{属性}中的属性就是pojo对象中属性即可。
这种是通过OGNL表达式获取的。
说明:
1:通过OGNL表达式到user对象中获取对应的属性值
2:#{属性}中的属性名称必须和user对象中的属性名称一致
二:测试代码
2.1:如下图:
说明:
1:插入数据的时候使用的是sqlsession的insert方法
2:第一个参数依然是sql语句唯一标识符
3:参数二是sql语句需要的参数。在这里我们需要的是user这个对象
2.2:使用unit测试
绿色的说明成。
查看打印的sql语句:
说明:
1:Preparing 是执行的sql语句
2:Parameters 是执行sql需要的参数列表。按照?的顺序的。
我们发现,明明传递的是user对象,这这里打印出的参数不是user对象,而是我们给user对应属性设置的值。这就是OGNL表达式做的。
3:Updates 是执行该条sql语句所影响的行数
查询数据库:
发现数据库中并没有数据啊。这是为什么呢?
因为没有提交事务。所以,数据就没有入库。
在代码中添加事务:
重新查询数据库:
上面是手动提交事务的。
在创建获取sqlsession对象的时候,还可以设置为自动提交事务:
就是在openSession的时候传递一个boolean类型的参数。
我们可以查看源码:
发现源码中会自动commit()的。
三:总结&下节预告
通过本文学习我们需要掌握的
1:在保存数据的时候,如果通过一个对象来保存
2:需要注意的是,在提交的时候需要事务。
如果是自动提交,在执行完insert方法后可以不再手动提交了
如果非自动提交事务,那么在执行完insert方法后必须手动提交(commit),数据才会入库的。
下节预告:
在电商项目中,比如下单需要涉及到多张表。如订单表、订单明细表、联系人(收货地址、联系人、手机号等)表三张表。在订单明细表和订单表是关联的。在订单明细表中,需要有订单表的主键id.
也就是说,在订单表数据插入完数据库后,就需要将这条数据的id作为参数插入到订单明细表中。
注意这些操作在同一个事务中,怎么操作才能实现这个功能呢?
欢迎学习下一篇《框架学习系列 mybatis 第7篇 mybatis入门程序之插入数据库后返回主键》