2MyBatis-Configuration
Posted 江湖小小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2MyBatis-Configuration相关的知识,希望对你有一定的参考价值。
一、引用 properties 配置文件
db.properties
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://192.168.8.136:3306/mybatis username=root password=root
mybatis-config.xml
<!-- 外部 properties 配置文件 --> <properties resource="db.properties"/> <!--配置数据源--> <environments default="development-mysql"> <environment id="development-mysql"> <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>
http://www.mybatis.org/mybatis-3/zh/configuration.html#properties
二、MyBatis 配置
mybatis-config.xml
<settings> <!-- 数据库字段下划线转 Bean 字段的驼峰命名 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 控制台打印SQL --> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings>
更多配置:http://www.mybatis.org/mybatis-3/zh/configuration.html#settings
三、别名处理
<!-- typeAliases:别名处理器:可以为 JavaBean 类型起别名,别名不区分大小写 --> <typeAliases> <!-- typeAlias:为某个java类型起别名,type:指定要起别名的类型全类名;默认别名就是类名小写,alias:指定新的别名 --> <!--<typeAlias type="com.bean.MyUser" alias="myUser"/>--> <!-- package:为某个包下的所有类批量起别名,name:指定包名,为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写) --> <package name="com.bean"/> <!-- 批量起别名的情况下,可以在 Bean 上使用 @Alias 注解为某个类指定新的别名 --> </typeAliases>
设置别名后映 SQL 射文件的返回值可不写全类名
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace 对应接口文件的全路径 --> <mapper namespace="com.dao.MyUserMapper"> <!-- id 与接口文件方法名对应,resultType 设置别名后返回类型可写别名 --> <!--<select id="selectMyUser" resultType="com.bean.MyUser">--> <select id="selectMyUser" resultType="myUser"> select * from myuser where id = #{id} </select> </mapper>
MyBatis 为基本数据类型默认设置了别名:http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases
四、多环境配置
<!-- environments:环境配置,default 指定使用某种环境 environment:配置具体环境信息;有两个标签;id代表当前环境唯一标识 transactionManager:事务管理器 type:事务管理器的类型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory) 自定义事务管理器:实现 TransactionFactory 接口,type 为全类名 dataSource:数据源 type:数据源类型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory) | JNDI(JndiDataSourceFactory) 自定义数据源:实现 DataSourceFactory 接口,type 为全类名 --> <environments default="development-dev"> <environment id="development-dev"> <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> <environment id="development-sit"> <transactionManager type="MANAGED"/> <dataSource type="UNPOOLED"> <property name="driver" value="${sit.driver}"/> <property name="url" value="${sit.url}"/> <property name="username" value="${sit.username}"/> <property name="password" value="${sit.password}"/> </dataSource> </environment> </environments>
变量配置注册类:org.apache.ibatis.session.Configuration
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class); typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class); typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class); typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class); typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class); typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class); typeAliasRegistry.registerAlias("FIFO", FifoCache.class); typeAliasRegistry.registerAlias("LRU", LruCache.class); typeAliasRegistry.registerAlias("SOFT", SoftCache.class); typeAliasRegistry.registerAlias("WEAK", WeakCache.class); typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class); typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class); typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class); typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class); typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class); typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class); typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class); typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class); typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class); typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class); typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class); typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class); languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class); languageRegistry.register(RawLanguageDriver.class);
http://www.mybatis.org/mybatis-3/zh/configuration.html#environments
五、多种数据库配置
<!-- environments:环境配置,default 指定使用某种环境 environment:配置具体环境信息;有两个标签;id代表当前环境唯一标识 transactionManager:事务管理器 type:事务管理器的类型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory) 自定义事务管理器:实现 TransactionFactory 接口,type 为全类名 dataSource:数据源 type:数据源类型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory) | JNDI(JndiDataSourceFactory) 自定义数据源:实现 DataSourceFactory 接口,type 为全类名 --> <environments default="development-mysql"> <environment id="development-mysql"> <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> <environment id="development-oracle"> <transactionManager type="MANAGED"/> <dataSource type="UNPOOLED"> <property name="driver" value="${oracle.driver}"/> <property name="url" value="${oracle.url}"/> <property name="username" value="${oracle.username}"/> <property name="password" value="${oracle.password}"/> </dataSource> </environment> </environments> <!-- databaseIdProvider:支持多数据库厂商 type="DB_VENDOR":VendorDatabaseIdProvider 作用是得到数据库厂商的标识(JDBC getDatabaseProductName()),mybatis 就能根据数据库厂商标识来执行不同的 SQL --> <databaseIdProvider type="DB_VENDOR"> <!-- 为不同的数据库厂商起别名 --> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle"/> <property name="SQL Server" value="sqlserver"/> </databaseIdProvider>
修改 SQL 射文件支持多种数据库
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace 对应接口文件的全路径 --> <mapper namespace="com.dao.MyUserMapper"> <!--找不到对应数据库 SQL 语句时会执行默认--> <select id="selectMyUser" resultType="myUser"> select * from myuser where id = #{id} </select> <!-- databaseId 对应数据库别名 --> <select id="selectMyUser" resultType="myUser" databaseId="mysql"> select * from myuser where id = #{id} </select> <select id="selectMyUser" resultType="myUser" databaseId="oracle"> select * from myuser where id = #{id} </select> </mapper>
http://www.mybatis.org/mybatis-3/zh/configuration.html#databaseIdProvider
六、mapper.xml (SQL) 映射文件注册
1.resource 方式
<mappers> <!-- 引用类路径下的 SQL 映射文件 --> <mapper resource="com/dao/MyUserMapper.xml"/> </mappers>
2.Url 方式
<mappers> <!-- 引用网路路径或者磁盘路径下的sql映射文件 --> <mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers>
3.Class 方式
<mappers> <!-- 引用 Class 接口注册,没有 SQL 映射文件,所有的 SQL 都是利用注解写在接口上 --> <mapper class="com.dao.MyUserMapperAnnotation"/> </mappers>
MyUserMapperAnnotation
import com.bean.MyUser; import org.apache.ibatis.annotations.Select; public interface MyUserMapperAnnotation { @Select("select * from myuser where id = #{id}") public MyUser selectMyUser(Integer id); }
测试
import com.bean.MyUser; import com.dao.MyUserMapperAnnotation; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class Main { public static void main(String[] args) { SqlSession session = null; try { String resource = "mybatis-config2.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); session = sqlSessionFactory.openSession(); MyUserMapperAnnotation mapper = session.getMapper(MyUserMapperAnnotation.class); MyUser myUser = (MyUser) mapper.selectMyUser(1); System.out.println(myUser); } catch (IOException e) { e.printStackTrace(); } finally { if (session != null) { session.close(); } } } }
4.package name 方式,批量注册
<mappers> <!-- 批量注册,映射文件名必须和接口同名,且放在与接口同一层级目录下 --> <package name="com.dao"/> </mappers>
http://www.mybatis.org/mybatis-3/zh/configuration.html#mappers
附上全部配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 外部 properties 配置文件 --> <properties resource="db.properties"/> <!-- settings包含很多重要的设置项,setting:用来设置每一个设置项。name:设置项名,value:设置项取值 --> <settings> <!-- 数据库字段下划线转 Bean 字段的驼峰命名 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 控制台打印SQL --> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> <!-- typeAliases:别名处理器:可以为 JavaBean 类型起别名,别名不区分大小写 --> <typeAliases> <!-- typeAlias:为某个java类型起别名,type:指定要起别名的类型全类名;默认别名就是类名小写,alias:指定新的别名 --> <!--<typeAlias type="com.bean.MyUser" alias="myUser"/>--> <!-- package:为某个包下的所有类批量起别名,name:指定包名,为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写) --> <package name="com.bean"/> <!-- 批量起别名的情况下,可以在 Bean 上使用 @Alias 注解为某个类指定新的别名 --> </typeAliases> <!-- environments:环境配置,default 指定使用某种环境 environment:配置具体环境信息;有两个标签;id代表当前环境唯一标识 transactionManager:事务管理器 type:事务管理器的类型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory) 自定义事务管理器:实现 TransactionFactory 接口,type 为全类名 dataSource:数据源 type:数据源类型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory) | JNDI(JndiDataSourceFactory) 自定义数据源:实现 DataSourceFactory 接口,type 为全类名 --> <environments default="development-mysql"> <environment id="development-mysql"> <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> <environment id="development-oracle"> <transactionManager type="MANAGED"/> <dataSource type="UNPOOLED"> <property name="driver" value="${oracle.driver}"/> <property name="url" value="${oracle.url}"/> <property name="username" value="${oracle.username}"/> <property name="password" value="${oracle.password}"/> </dataSource> </environment> </environments> <!-- databaseIdProvider:支持多数据库厂商 type="DB_VENDOR":VendorDatabaseIdProvider 作用是得到数据库厂商的标识(JDBC getDatabaseProductName()),mybatis 就能根据数据库厂商标识来执行不同的 SQL --> <databaseIdProvider type="DB_VENDOR"> <!-- 为不同的数据库厂商起别名 --> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle"/> <property name="SQL Server" value="sqlserver"/> </databaseIdProvider> <!-- mappers:将 SQL 映射文件注册到全局配置中 --> <mappers> <!-- 引用类路径下的 SQL 映射文件 --> <!--<mapper resource="com/dao/MyUserMapper.xml"/>--> <!-- 引用网路路径或者磁盘路径下的sql映射文件 --> <!--<mapper url="file:///var/mappers/AuthorMapper.xml"/>--> <!-- 引用 Class 接口注册,没有 SQL 映射文件,所有的 SQL 都是利用注解写在接口上 --> <!--<mapper class="com.dao.MyUserMapperAnnotation"/>--> <!-- 批量注册,映射文件名必须和接口同名,且放在与接口同一层级目录下 --> <package name="com.dao"/> </mappers> </configuration>
各种配置在 xml 文件中需符合要求,配置顺序如下
properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers?
官方文档
以上是关于2MyBatis-Configuration的主要内容,如果未能解决你的问题,请参考以下文章