Mybatis2
Mybatis配置文件中的各个属性
1、mybatis可以使用properties来引入外部properties配置文件的内容
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
例子:
dbConfig.properties(mysql)
jdbc.driver=com:mysql.jdbc.driver
jdbc.url=jdbc:mysql://localhost:3306//mybatis
jdbc.username=root
jdbc.password=123456
dbConfig.properties(oracle)
orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhsot:1521:orcl
orcl.username=scott
orcl.password=123456
在全局配置文件引入dbConfig.properties
<properties resource="dbConfig.properties"/>
2、Settings(改变mybatis的运行时行为)
mapUnderscoreToCamelcase:是否开启驼峰命名规则(camel case)映射(从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射)
<settings>
<setting name="mapUnderscoreToCamelcase" value="true" />
</settings>
3、typeAliases:别名处理器,可以为Java类型起别名,不区分大小写
<!--
typeAliases:为某个Java类型起别名
type:指定要起别名的类型全类名,默认别名是类名小写
alias:指定新的别名
package:为某个包下的所有类起别名,name=指定包名
-->
<typeAliases>
<typeAliases type="com.taotao.Bean.Employee" />
</typeAliases>
批量起别名的情况下,使用@Aliases注解为某个类型指定新的别名
4、typeHandler(类型处理器)可根据需求重写类型处理器或创建定义处理器
步骤:1、实现org.apache.ibatis.type.TypeHandler接口或继承org.apache.ibatis.BeanTypeHandler
2、指定映射某个JDBC类型
3、在mybatis全局配置文件中注册
5、environments:环境们,mybatis可以配置多种环境 default 指定默认数据项
environment:配置一个具体的环境信息,必须有两个标签,id代表当前环境唯一标识
transactionManager:事务管理器 type:JDBC|MANAGER
datasource数据源:UNPOOLED|POOLED|JNDI
6、databaseIdProvider:支持多数据库厂商的
type="DB_VENDOR":VendorDatabaseIdProvider:得到数据库厂商的标识
7、mapper:将sql映射注册到全局配置中
mapper:注册一个sql映射(配置文件)
resource:引用类路径下的sql映射文件
url:引用网络路径
mybatis映射文件:映射文件指导着mybatis如何进行数据库的增删改查
cache----->命名空间的二级缓存配置
cache----->其他命名空间缓存配置的引用
resultMap--------->自定义结果集映射
sql--------->抽取可重用语句块
insert-------->映射插入
update-------->映射更新
delete--------->映射删除
select--------->映射查询
1、mybatis运行void、boolean、Integer、Long类型返回值
2、需要手动提交数据
sqlSessionFactory.openSession();------------>手动提交数据
sqlSessionFactory.openSession(true);----------->自动提交数据
mybatis支持自增主键,自增主键的获取,mybatis也是利用statement.getGenereatedKeys();
useGeneratedkeys="true":使用自增主键获取主键的策略
keyProperty:指定对应的主键属性,mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
keyProperty:查出的主键值封装给javaBean的哪个id属性
order="BEFORE":当前插入在插入sql之前运行
AFTER:当前sql在插入sql之后运行
resultType:查出数据的返回值类型
运行顺序:先运行selectkey查出id的sql,查出id值封装给javaBean的id属性
在运行插入的sql:就可以取出id属性(BEFORE)
先运行插入的sql(从序列中取出新值作为id),再运行selectKey查出id的sql(AFTER)
Oracle不支持自增:oracle使用序列来模拟自增
每次插入的数据的主键是从序列中拿到的值
单个参数:mybatis不会做特殊处理 #{参数名}:取出参数值
多个参数:mybatis 会做特殊处理 多个参数会被封装成一个map key:param1。。。。。paramn
#{}从map中获取指定的key的值 value:传入的参数的值
命名参数:明确指定封装参数的map的key:@Param(“id‘)
多个参数会被封装成一个map
key:使用@Param注解指定的值
value:参数值 #{指定的值}:取出key的值
例子:(@Parm(”id“)Integer id,@Param(”lastName“)String lastname);
ParamNameResolver解析参数封装的map
1、获取每个标了param注解的参数的@Param的值:id,lastName,赋值给name
2、每次解析一个参数给map中保存信息:(key:参数索引,value:name的值)
总结:参数多时会封装map,为了不混乱,使用@Param来指定封装时使用的key
#{key}就可以取出map中的值
#{ }:可以获取map中的值或者POJO对象属性的值
${ }:可以获取map中的值或者POJO对象属性的值
区别:#{ }:以预编译的形式,将参数设置到sql语句中
${ }:取出的值,直接拼装在sql语句中,会有安全问题
原生jdbc不支持占位符的地方,可以使用${ }进行取值
jdbcType需要在某种特定的条件下设置(有些数据库可能不能识别mybatis对null的默认处理)
JdbcType other:无效的类型(因为mybatis对所有的null都映射的是原生Jdbc的OTHER类型)
1、#{参数,jdbcType=OTHER};
2、jdbcTypeForNull=null
全局设置中<setting name="jdbcTypeForNull" value="null"/>