今天刚刚使用MyBatis,感觉是一种比较不错的ORM框架。今晚上学习的时候碰到一些问题,记录一下。
1. 采用声明Interface调用SQL语句的时候,如果SQL语法有问题,这个方式是不能够看出来的。使用调用映射器配置文件的方式,可以直接执行SQL文件,可能会发现问题出现在哪里。在实现过程中,通过直接调用SQL语句,发现了driver名称拼写错误,select语句拼写错误,而在调用映射器Mapper接口时并没有给出任何有效信息。
2. 在要使用自定义的resultMap作为返回参数的时候,要使用标签resultMap 而不是resultType。例如:
<resultMap type="Student" id="studentResult">
<id property="studId" column="stu_id"/>
<result property="name" column="name"/>
<result property="email" column="email"/>
<result property="dob" column="dob"/>
</resultMap>
在调用studentResult的方法中要使用resultMap标签:
<select id="getAll" resultMap="studentResult">
select * from students
</select>
3.每一个线程应该有它自己的 SqlSession 实例。SqlSession 对象实例不是线程安全的,并且不被共享。所以 SqlSession 的作用域最好就是其所在方法的作用域。从 Web 应用程序角度上看,SqlSession 应该存在于 request 级别作用域上。
对于封装的service类,应该在每个增删改查方法中使用工厂创建新的session。如: SqlSession session = MyBatisSessionFactory.openSession();
4. 关于resultMap, 一对一, 一对多日后补充上去。