1、学习口诀:sqlmapconfig--连接池--mapper.xml(后期通过spring托管ioc)
解释:sqlmapconfig--a\连接池(与数据库相连)(附加db.poperties属性文件)--b\mapper.xml(别名typealias)
2、mabatis当中:#{}表示占位符,通过它可以实现preparedstatement(mapper)向占位符中注入值,并自动实现java向jdbc的类型转换,#{}可以接收简单类型或者是pojo类型的值,当传入的parametertype为简单类型时,#{}可以时value值也可以是其他类型(对于简单类型来说,它只是用来占位的)
${}表示拼接sql,通过它可以实现preparedstatement(mapper)向sql语言中拼接加入值,不进行java向jdbc的类型转换,#{}可以接收简单类型或者是pojo类型的值,当传入的parametertype为简单类型时,${}只可以是value值(对于简单类型来说,它是用来拼接的) 注意:既然是拼接,那么加入的其他东西也算数,比如说“%${value}%”,新加入东西之后,表示为"%zhangsan%",这样在输入的时候只输入zhangsan就行了
3、mabatis的sqlmapconfig首先链接了数据库,其次通过调用<mappers>来链接了dao层,也就是从java处来的sql语句
在编辑sqlmapconfig的时候,编辑出现错误(Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 30; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseI),执行之后不成功,并报了上面的错误,这是因为:mybatis的配置文件显然是有顺序并且个数是有限定的,‘?’表示可以没有但是最多只能有一个,顺序应该按照上面报出来的编辑,否则编译失败
4、使用mybatis时在,mapper.xml中使用了where if标签,报错的解决方案
Spring+Mybatis框架
mapper.xml中用到了<where><if>标签判断,出现了上述错误
<select id = "getOrderByCompany" resultType="com.chinamobile.sias.workorder.po.Workorder">
select * from t_view_workorder
<where>
<if test="company != '全国'">
wo_company = #{company}
</if>
</where>
</select>
mapper.java中代码如下
List<Workorder> getOrderByCompany(String company);
解决方法
在参数前加@Param标签(在mapper.java中使用param表示将company参数在mapper.xml中映射表示为
List<Workorder> getOrderByCompany(@Param("company")String company);
整理方案:SqlMapConfig.xml配置文件详解
1、Properties属性
Properties属性用来加载属性配置文件。
<!--
加载属性文件
resource:属性文件的相对路径
url:属性文件的绝对路径
-->
<properties resource="config/db.properties">
<!--
配置一些属性
name:属性的名称
value:属性的值
-->
<!--<property name="" value="" /> -->
</properties>
properties特性:
Mybatis将按照下面的属性来加载属性:
1. 首先会读取在property标签中定义的属性。
2. 然后会读取在properties标签中通过resource或url加载时的属性,它会覆盖已读取得同名属性。
3. 最后会读取sql中parameterType传递过来的属性,它会覆盖已读取的同名属性。
2、settings全局参数配置
Mybatis框架在运行时可以调整一些运行参数,比如:开启二级缓存、开启延迟加载等。这些参数
要通过settings标签来配置,全局参数会影响Mybatis的运行行为,配置一定要注意。
<!--全局参数配置-->
<settings >
<!--
name:属性名称
value:属性的值
-->
<setting name="" value=""/>
</settings>
常用的全局配置参数如下:
3、typeAlia
在映射文件中的parameterType和resultType属性中要指定输入、输出映射类型,如果类型为PO,要指定PO类的全路径这样不是特别方便,可以使用typeAlias定义一些别名,来方便开发。
<!--定义别名-->
<typeAliases>
<!--
type:需要起别名的字符串
alias:对应的别名
-->
<typeAlias type="" alias="" />
<!--
name:包名,会对包下面的类进行扫描,自动批量设置别名,
设置的别名为类名,首字母大小写均可
-->
<package name="" />
</typeAliases>
Mybatis的默认别名
4、typeHandlers(类型处理器)
Mybatis中通过typeHandlers完成jdbc类型和Java类型的装换。通常情况下,Mybatis提供的类型处理器满足日常需要,不需要我们再自定义。
<typeHandlers>
<typeHandler handler="" jdbcType="" javaType="" />
</typeHandlers>
Mybatis默认支持的数据类型
5、environments 环境
<!--
环境配置
在和Spring整合后改配置将废除
-->
<environments default="development">
<environment id="development">
<!--使用JDBC的事务管理,事务管理交给Mybatis-->
<transactionManager type="JDBC"></transactionManager>
<!--数据库连接池,有Mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
6、mapper 加载映射文件
加载映射文件有三种方式
1、加载单个映射文件
<!--引入mapper-->
<mappers>
<!--rerource:引入映射文件相对于classpath的地址-->
<mapper resource="config/sqlmap/userMapper.xml" />
</mappers>
2、通过Mapper接口加载单个映射文件
前提条件:
(1). 使用Mapper代理的方式进行开发。
(2). Mapper接口文件名要和映射文件名一致
(3).Mapper接口文件和映射文件在同一个目录下
<!--引入mapper-->
<mappers>
<mapper class="com.jack.po.UserMapper" />
</mappers>
3、批量记载映射文件
前提条件:
(1). 使用Mapper代理的方式进行开发。
(2). Mapper接口文件名要和映射文件名一致
(3).Mapper接口文件和映射文件在同一个目录下
<!--引入mapper-->
<mappers>
<!--name:mapper接口文件所在的包路径-->
<package name="" />
</mappers>
五、spring-mybatis的整合
1、对于mybatis:sqlmapconfig--连接池--mapper.xml
但是注意:连接池只是建立了到数据库的连接,mapper.xml只是java语言执行sql,具体的中间使用者sqlmapfactory并没有出现
2、对于spring:ioc控制反转,本身就是以bean的形式托管对象,这里我们可以将sqlmapfactory以bean的形式托管了,那么在接下来使用的时候,直接调用这个bean就行了
3、spring托管sqlmapfactory的bean,涉及到连接池(想到db属性),涉及到map.xml(别名typealias),干脆都放在spring在的applicationcontext.xml里面的了
结构图如下: