全局配置文件
环境配置(environments)
<!-- 先写properties标签 resource:前找当前项目下的连接池的properties资源;找的是类路径下面的; url:获取网上配置信息; --> <properties resource="jdbc.properties"> <!-- name:键 value:值; 在properties内部标签中的property中配置的信息优先级最高,优先读取后, 如果配置文件中,与之键名相同则进行覆盖; <property name="" value=""/> --> </properties> <environments default="development"> <!-- environment正常来说分成了三种:生产prod、测试test、开发: --> <environment id="development"> <!-- transactionManager:事务管理: type:类型:JDBC:支持jdbc事务; MANAGED :从不提交和回滚; --> <transactionManager type="JDBC"/> <!-- dataSource:POOLED:表示使用池化技术,池化指的是连接池,此处 指代的是mybatis自己的连接池 type="[UNPOOLED|POOLED|JNDI] --> <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>
设置(setting)
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> 类型别名(typeAliases) 常用* <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="safeResultHandlerEnabled" value="true"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> <setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver"/> <setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumTypeHandler"/> <setting name="callSettersOnNulls" value="false"/> <setting name="returnInstanceForEmptyRow" value="false"/> <setting name="logPrefix" value="exampleLogPreFix_"/> <!-- 引入日志框架:在此处使用的是LOG4J2 需要引入两个jar包: log4j-api; log4j-core; 需要引入log4j2.xml或者log4j2.properties; --> <setting name="logImpl" value="SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING"/> <setting name="proxyFactory" value="CGLIB | JAVASSIST"/> <setting name="vfsImpl" value="org.mybatis.example.YourselfVfsImpl"/> <setting name="useActualParamName" value="true"/> <setting name="configurationFactory" value="org.mybatis.example.ConfigurationFactory"/> </settings>
类型别名(typeAliases)
<!-- 别名包扫描: --> <typeAliases> <package name="cn.ry.pojo"/> </typeAliases>
常用别名类型:
插件(plugins)
<plugins> <plugin interceptor="org.mybatis.example.ExamplePlugin"> <property name="someProperty" value="100"/> </plugin> </plugins> <!-- 以后使用分页插件 pageHelper -->
映射器(mappers)
<!-- 映射文件地址: --> <mappers> <!--<mapper resource>具体去找到单个的映射文件 不推荐: <mapper resource="cn/ry/mapper/SysUserMapper.xml"/> --> <!-- 包扫描:读取所有的mapper.xml文件; --> <package name="cn.ry.mapper"/> </mappers>
映射文件
insert*
新增数据后,获取新增进去的数据的id
<!-- keyColumn:主键的列名或者别名; keyProperty: 主键的属性名; useGeneratedKeys: 等同于全局配置文件中是否开启自增主键——》新增完对象以后,对 象.getId能否取到值; --> <!-- 第一种写法: --> <insert id="insertSysUser" parameterType="cn.ry.pojo.SysUser" keyColumn="id" keyProperty="id" useGeneratedKeys="true"> insert into sys_user (dept_id, user_name, mobile, email, login_name, login_pwd) values (#{dept_id},'${userName}',#{mobile},#{email},#{login_name}, #{loginPwd}) </insert> <!-- 第二种写法: --> <insert id="insertSysUser" parameterType="cn.ry.pojo.SysUser" > <!-- order: 排序: AFTER: 数据库先执行insert,再执行selectKey——》mysql; BEFORE: 先执行selectkey 再执行insert;——》oracle; --> <selectKey keyColumn="idd" keyProperty="id" order="AFTER" resultType="int" > <!-- 用来查询当前的最后一个进入的id值; --> select id idd from sys_user order by id desc limit 1 </selectKey> insert into sys_user (dept_id, user_name, mobile, email, login_name, login_pwd) values (#{dept_id},'${userName}',#{mobile},#{email},#{login_name}, #{loginPwd}) </insert>
select
<!-- resultMap:主要用于多表查询,多表时进行别名映射等; 需要专门去定义resultMap标签,标签中id属性指的是map名; type属性指的是映射的实体类全限定类名或者别名; extends指的是继承,一般来说继承当前xml中的基本的map; resultType:单表查询即可; --> <select id="selectAllData" resultMap="map0"> select id,dept_id,user_name from sys_user </select> <!-- resultMap主要写的是映射规则: --> <resultMap type="cn.ry.pojo.SysUser" id="map0"> <!-- id标签指的是主键: column:查询出来的列名或者别名 property:指的是实体类属性名; 日志使用 需要导入两个jar包:log4j-core、 log4j-api; log4j2.xml --> <id column="id" property="id"/> <!-- 除主键以外的其他列: --> <result column="dept_id" property="dept_id"/> <result column="user_name" property="userName"/> </resultMap>
日志使用
- 需要导入两个jar包:log4j-core、log4j-api
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <!-- 定义日志文件的输出路径、命名方式等 --> <Appenders> <!-- 控制台输出 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <!-- 文件输出 --> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}- %i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <Policies> <!-- 每天生成一个新的日志文件 --> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!-- 文件大小超过10MB时滚动生成新文件 --> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> </RollingFile> </Appenders> <!-- 日志级别及日志输出目的地定义 --> <Loggers> <!-- 设置root logger级别为info,并将日志输出到控制台和文件 --> <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFile" /> </Root> <!-- 可以为特定的包或类设置不同的日志级别 --> <Logger name="cn.ry.mapper" level="debug"> </Logger> </Loggers> </Configuration>
好了今天的分享就到这里了,博主创作不易,点个关注不迷路,感谢大家。我们下期再见!