由于项目需求最近开始学习mybatis,才入门有很多没有注意的也犯了很多错,在这里总结一下。
1.核心配置文件SqlMapConfig.xml
头文件:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
datasource标签用于设置数据库连接信息,属性type选择pooled;
datasource中property标签则是具体数据库链接的内容
<dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password }" />
</dataSource>
注:如果选择使用属性文件配置连接,则需要新建jdbc.propertise文件并添加标签
<properties resource="jdbc.properties"/>
2.映射文件
<dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password }" />
</dataSource>
mapper标签内写CURD语句及对应的参数和结果,namespace解决不同需求下方法重名的问题。
注意:${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value,如果用了其他值,则会报错:Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'username' in 'class java.lang.String'。
3.Dao开发
Dao开发有两种类型,一种是原始的通过实现接口完成代码的方式,一种是利用动态代理的方式完成。
前一种开发方式Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法,调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不利于开发维护。
后一种方式代码精简,开发简单,只需要接口,但配置较复杂一点,需多练习。
mapper接口代理实现编写规则:
1) 映射文件中namespace要等于接口的全路径名称
2) 映射文件中sql语句id要等于接口的方法名称
3) 映射文件中传入参数类型要等于接口方法的传入参数类型
4) 映射文件中返回结果集类型要等于接口方法的返回值类型
4.hibernate和mybatis区别
hibernate:它是一个标准的orm框架,比较重量级,学习成本高.
优点:高度封装,使用起来不用写sql,开发的时候,会减低开发周期.
缺点:sql语句无法优化
应用场景:oa(办公自动化系统), erp(企业的流程系统)等,还有一些政府项目,
总的来说,在用于量不大,并发量小的时候使用.
mybatis:它不是一个orm框架, 它是对jdbc的轻量级封装, 学习成本低,比较简单
优点:学习成本低, sql语句可以优化, 执行效率高,速度快缺点:编码量较大,会拖慢开发周期
应用场景: 互联网项目,比如电商,P2P等
总的来说是用户量较大,并发高的项目.