mybatis-config.xml
MyBatis 配置文件的 configuration 标签主要包括:
configuration 配置
properties 属性
settings 设置
typeAliases 类型命名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
databaseIdProvider 数据库厂商标识
mappers 映射器
configuration
properties--配置文件可以用于dataSource里面使用,可以用url或者resource指定路径,可以有property子标签
typeAliases--设置实体类的别名package子标签,然后再mapper.xml中可以直接使用类名,不用全名
environments--设置连接池,事务等
mappers--使用的mapper文件在哪mapper子标签的resource属性和url属性
<package name="com.shiyanlou.mybatis.mapper" />
<mapper class="com.shiyanlou.mybatis.mapper.UserMapper"/>
这两种方法需要将 mapper 接口类名和 mapper.xml 映射文件名称保持一致,且在一个目录中
此外由于IDEA maven项目默认不会把src下除java文件外的文件打包到classes文件夹下,需要在maven的pom中增加配置如下
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>
XxxMapper.xml
映射文件包含的顶级元素:
cache:给定命名空间的缓存配置。
cache-ref:其他命名空间缓存配置的引用。
resultMap:描述如何从数据库结果集中来加载对象。
sql:可被其他语句引用的可重用语句块。
insert:映射插入语句
update:映射更新语句
delete:映射删除语句
select:映射查询语句
mapper标签 namespace指定mapper类
resultMap--指定返回的map,当数据库中的字段与实体类的字段名称不一致时可以使用这种方法,也可以在具体额查询语句中使用as引入别名
resultMap 的子元素包括:
constructor:用来将结果注入到一个实例化好的类的构造方法中
idArg: ID 参数,标记结果作为 ID
arg:注入到构造方法的一个普通结果
id: 一个 ID 结果,标记结果作为 ID
result:注入到字段或 JavaBean 属性的普通结果--都有column和property属性的
association:复杂的类型关联,多个结果合成的类型
嵌入结果映射:结果映射自身的关联,也可以引用一个外部结果映射
collection:复杂类型的集 也可以引用一个外部结果映射
discriminator:使用结果值来决定使用哪个结果集
case:基本一些值的结果映射,也可以引用一个外部结果映射
select 返回时可以使用 resultType 或 resultMap,但不能同时使用
useGeneratedKeys="true" keyProperty="id"这个属性可以在插入的时候生成主键
useGeneratedKeys、keyProperty 和 keyColumn 仅对 insert 和 update 有用。同时只有数据库支持自增长主键字段(比如 MySQL、SQL Server)才可以设置 useGeneratedKeys="true",像 Oracle 则不支持自增长 id,如果设置 useGeneratedKeys="true" 就会报错。
$和#的区别
一般用#号
$是字符串拼接的,且括号里面必须写value。但是如果传入参数是列名的话必须用$.
模糊查询的时候#直接用,而$需要加单引号。因为是拼接。
一些sql的内联函数也可以在这个时候使用,中文字符串排序可以使用这个方法
order by CONVERT(chineseColumnName USING gbk)
XxxMapper
接口类
使用方法
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);