- SSM框架里面一般都是用接口式编程:***Mapper==>***Mapper.xml
- SqlSession和Connection 一样都是非线程安全的,故在多线程环境下不安全,因为每次都要去获取新的对象
- mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象(将接口和映射文件绑定)
- mybatis.xml文件配置文件
<!-- 这个标签是用来引入外面properties配置文件的内容
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
有了这个,在连接数据库是,就可以用 ${jdbc.driver}这种方式获取
-->
<properties resource="properties.properties"></properties>
<!--
settings:包含了很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings>
<!-- 开启驼峰命名规则,默认为 false,
为什么要开启这个呢???
因为如果 实体类中有属性值名 为:lastName
数据库字段名为:last_name
如果不做配置的话,在映射时候会发现 lastName输出的时候为 null,没有映射成功
当然除了配置驼峰命名的方法外还有另外一个小技巧:
就是在映射文件中写 sql 语句的时候,不要使用 * ,将要查询的字段写出来
然后将名字不匹配的字段用 SQL 语句写一个和 实体类属性名相同的 别名
-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--
*****别名不区分大小写******
typeAliases:别名处理器,可以为 java 类型取别名
typeAliase:为某个JAVA类型取别名《单个取别名》
type:指定要起别名的类型全类名;默认别名就是类名小写
alias:指定新的别名
使用这个的原因是因为在 Mapper.xml 文件中,比如返回值是实体类的时候,要将该实体类的全类名都写上,比较麻烦。
resultType="com.domain.Customer"
package:《批量取别名》
name:指定为某个包下面的所有类都取一个默认别名(类名小写)
批量取别名可能会出错:如果在controller包下面还有一个子包,且在子包里面有一个类和controller包下面的类类名相同,则会出现别名冲突了,会出现异常
解决方法:可以在这两个类其中一个类中添加一个注解 @Alias("cus")
为该类重新取一个叫 cus 的别名
-->
<typeAliases>
<!-- <typeAliase type="com.controller.CustomerDao" alias="cu"> -->
<package name="com.controller">
</typeAliases>
<!--
databaseIdProvider:支持多数据库厂商
type="DB_VENDOR":作用是得到数据库厂商的表示(驱动自带的),
mybatis就能根据数据库厂商标识来执行不同的sql
MySQL、Oracle、SQL Server
如果想在mappeer.xml文件中使用oracle数据库中的表,则
eg. <select ..... databaseId="oracle">
select * from t_user
</select>
-->
<databaseIdProvider type="DB_VENDOR">
<!--为不同数据库厂商起别名-->
<property name="MySQL" value="mysql">
<property name="Oracle" value="oracle">
<property name="SQL Server" value="sqlServer">
</databaseIdProvider>
<!--
mappers:将sql 映射注册到全局配置中
mapper:注册一个SQL映射
resource:引入类路径下的sql映射文件
url:引用网络路径或者磁盘路径下的sql映射文件(file:///var/mappers/AuthorMapper.xml)
class:引用接口
有sql映射文件,映射文件民必须和接口同名,且放在与接口同一目录下
没有sql映射文件,将SQL语句用注解写咋方法上
-->
<mappers>
<!-- <mapper resource="mybatis/mapper/CustomerMapper.xml">
<mapper class="com.controller.CustomerDao"> -->
<!-- 批量注册,要将 mapper.xml映射文件放在和接口同一包下-->
<package name="com.controller">
</mappers>
</settiongs>