1.生命周期,和作用域,是至关重要的,因为错误的使用会导致严重的并发问题
并发问题流程图
注意:每一个sqlSession对应一个业务
在用sqlSession去写增删改相关的业务时用提交事务(sqlSession.commit();)
在每个持久层操作完毕后要将sqlSession关闭(sqlSession.close())
2.resultMap(结果集映射)
2.1,为什么模拟场景:更好的了解resultMap(结果集映射),
2.1,模拟场景:当数据库字段名和对应实体类属性不一致时:
解决方式一,利用sql语句给字段起别名(让别名跟对应的实体类属性相同)
<select id="getUserById" parameterType="int" resultType="user"> select id,name,pwd as password from mybatis.user where id = #{id} </select>
方式二,结果集映射
<!--结果集映射--> <resultMap id="userMap" type="user"> <!--column对应数据库的字段,property对应实体类的属性--> <result column="id" property="id"/> <result column="name" property="name"/> <result column="pwd" property="password"/> </resultMap> <select id="getUserById" parameterType="int" resultMap="userMap"> select * from mybatis.user where id = #{id} </select>
注意:当使用结果集映射时,sql操作标签中的resultType(返回参数类型)要改成resultMap
官方文档的解释:
resultMap
元素是 MyBatis 中最重要最强大的元素- ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。
- ResultMap最优秀在于,虽然你已经相当了解她了,,但是根本就不需要显示的用到他们