4、[重点]Mybatis配置解析
1、核心配置文件:mybatis-config.xml
configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
2、环境environments
Mybatis可以配置多套环境、
要注意的是:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一 种环境。
Mybatis默认的事务管理是:JDBC 默认的连接池是POOLED
<!--环境:可以配置多套--> <environments default="development"> <environment id="development"> <!--事务管理--> <transactionManager type="JDBC"/> <!--数据源--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
3、属性(properties)
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置
<dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="zhixi158"/> </dataSource>
也可以编写properties配置文件进行读取:
db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&;useUnicode=true&;characterEncoding=UTF-8 username=root password=zhixi158
上面代码即可写成-->这样要修改只需要修改properties中的代码了:
<!--引入配置文件--> <properties resource="db.properties" /> <!--环境:可以配置多套--> <environments default="development"> <environment id="development"> <!--事务管理--> <transactionManager type="JDBC"/> <!--数据源--> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
得出:
方法参数传递的属性 > resource/url 属性中指定的配置文件 > properties 元素中指定的属性
4、类型别名(typeAliases)
- 类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写
第一种使用方式:
原来在接口的实现类上:使用全限定名称 :resultType="com.zhixi.pojo.User"
<!--给实体类起别名--> <typeAliases> <typeAlias type="com.zhixi.pojo.User" alias="User"></typeAlias> </typeAliases>
现在再写:
<select id="getUserList" resultType="User"> /*查询所有用户*/ select * from mybatis.user; </select>
第二种使用方式:
指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,也就是实体类
在没有注解的情况下,会使用 实体类的首字母小写的非限定类名来作为它的别名。 比如 com.zhixi.pojo
的别名为 user
<!--给实体类起别名--> <typeAliases> <package name="com.zhixi.pojo"/> </typeAliases>
使用:
<!--不需要再写接口的实现类,在配置文件里写sql即可--> <select id="getUserList" resultType="user"> /*查询所有用户*/ select * from mybatis.user; </select>
第三种:在实体类上使用注解:
注意的是优先级:(typeAlias = @Alias)> package
就是说:
typeAlias 和 @Alias() 可以同时存在.并且都可以使用
typeAlias 和 package 可以同时存在,并且都可以使用
package和@Alias() 同时存在,package不会生效
5、映射器(mappers)
第一种:
放在resources目录下(新建一个mapper文件夹):
第二种:通过class
需要注意的是包名以及文件名字要一样:
第三种:通过绝对路径file
第四种:按照包名
标签属性:自动获取生成的主键值
比如在数据库操作中有一个这么需求,在插入用户的时候,同时插入所在部门表中的用户ID
前提是:MYSQL数据库设置了主键自增,这样才能够获取到生成的主键值
useGeneratedKeys="true":使用自动生成的主键值 keyProperty="id":指定生成的主键值赋值给对象的哪个属性。这个就表示将主键值赋值给Act对象的id属性。
这样就可以获取到了自动生成的主键值: