MyBatis标准配置
1.导入jar包
2.创建mybatis的全局配置文件:mybatis-config.xml
3.创建mybatis的sql映射文件和mapper接口
要求:
sql映射文件的namespace值和接口的全类名保持一致。
sql映射文件的sql语句的id值和接口的方法名保持一致。
注意:接口中不要有重载的方法
4.写测试代码
MyBatis全局配置文件【了解】
1.Properties
作用:加载properties配置文件信息
2.Settings标签
作用:Settings标签内部可以设置多个setting标签,每个setting标签对应着对mybatis的一个设置项
3.typeAliases
类型别名处理器:给一个类起别名
补充:MyBatis自带了一些类型别名,例如java基础学过的基本数据类型、引用数据类型
4. typeHandlers
作用:将java的数据类型转换为数据库的数据类型的
5. Environments
作用:Environments里面有多个environment标签,每个environment标签可以设置mybatis的运行环境。
default="development"> "development"> "JDBC" /> "POOLED"> "driver" value="${jdbc.driverClass}" /> "url" value="${jdbc.jdbcUrl}" /> "username" value="${jdbc.userName}" /> "password" value="${jdbc.password}" />
6. databaseIdProvider
作用:为数据库厂商起别名
由于MyBatis支持多种数据库:Oracle、MySQL、SqlServler、Db2
在MyBatis全局配置文件中配置
Sql映射文件
7. Mappers
作用:加载Mapper接口或者SQL映射文件
SQL映射文件
注意点:
1.对于增删改标签,必须提交事务。提交事务的两种方式: 1.1.手动提交:openSession.commit() 1.2.自动提交:sqlSessionFactory.openSession(true); 2.只有select必须指定返回值类型,所有标签的parameterType都可以省略。
往数据表中添加数据的时候获取自增逐渐
要求:
1.接口方法的参数必须是一个pojo对象 2.在insert标签设置两个属性: useGenerateKeys=true,keyProperty=“pojo对象属性”
Sql片段
作用:可以做sql语句重用
MyBatis支持基于注解的sql语句
@Select(value="select * from book where bid = #{bid}") public Book selectOne(int bid); @Insert(value="insert into book(bname,author,price,type) values(#{bname},#{author},#{price},#{type});") public void insert(Book book); @Delete(value="DELETE FROM book WHERE bid=#{bid}") public void delete(int bid);
如何在sql映射文件中取mapper接口中的参数
1.一个普通参数
#{随便写}
2.多个普通参数
#{param注解的value值}
方式一:
方式二:
输出:
3.参数是一个pojo对象
#{pojo对象的属性名}
4.是一个map对象
#{map中键值对的key}
输出:
5.参数是一个List、Collection
#{list[下标]}或者#{collection[下标]}
输出:
6.参数是一个数组
#{array[下标]}
7.复杂参数
输出:
各种各样的返回值类型
#{}与${}的区别【面试】
#{}:采用占位符?,以预编译的方式设置参数的,类似于javaweb部分的preparestatement对象,SQL安全的,不存在sql注入问题。 ${}:直接将参数设置到sql语句中,类似于javaweb部分的statement对象,存在SQL注入问题。 在有些特殊情况下,我们必须使用${}.例如:表名、like模糊查询、排序字段。
ResultMap标签
当数据表的列名和pojo对象的属性名不一致的时候,如何将表的列名映射到pojo对象属性上?
1.起别名
2.mapUnderScoreToCamelCase=true
3.ResultMap标签
ResultMap作用说明:
- 字段映射
- 将表的关联关系直接映射为pojo对象的关联关系【resultType属性不具备的功能】