【Mybatis学习】Mybatis框架中的配置

来源:互联网 发布:java中try catch的用法 编辑:程序博客网 时间:2024/05/16 02:06

Mybatis中的配置

配置文件整体结构

<configuration><!--配置-->  <properties/><!--属性-->  <settings/><!--设置-->  <typeAliases/><!--类型命名-->  <typeHandlers/><!--类型处理器-->  <objectFactory/><!--对象工厂-->  <plugins/><!--插件-->  <environments default=""><!--配置环境-->    <environment id=""><!--环境变量-->      <transactionManager type=""/><!--事物管理器-->      <dataSource type=""/><!--数据源-->    </environment>  </environments>  <databaseIdProvider type=""/><!--数据库厂商标识-->  <mappers/><!--映射器--></configuration>

1.properties

1.1 property

配置该属性可以在上下文中使用这些配置好的属性,比如dataSource。
      <dataSource type="POOLED">        <property name="driver" value="com.mysql.jdbc.Driver"/>        <property name="url" value="jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8"/>        <property name="username" value="wsz"/>        <property name="password" value="wsz"/>      </dataSource>

1.2 properties配置文件

该属性可以读取项目中的文件,比如通用的数据库配置文件,改进上面的dataSource。首先新建jdbc.properties文件,然后在配置文件中引用。
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8jdbc.username=wszjdbc.password=wsz
  <properties resource="jdbc.properties"/>  <environments default="development">    <environment id="development">      <transactionManager type="JDBC"/>      <dataSource type="POOLED">        <property name="driver" value="${jdbc.driver}"/>        <property name="url" value="${jdbc.url}"/>        <property name="username" value="${jdbc.username}"/>        <property name="password" value="${jdbc.password}"/>      </dataSource>    </environment>  </environments>

1.3程序参数传递

如果我们在jdbc.properties文件中设置的数据库链接密码为特定的密文,直接使用则无法进行与数据库之间的交互,需要先读取处理后才能操作。
public static void main(String[] args) throws Exception {decodePassword();}public static void decodePassword() throws IOException {SqlSessionFactory sqlSessionFactory = null;InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");Reader reader = new InputStreamReader(inputStream);InputStream inputStream1 = Resources.getResourceAsStream("jdbc.properties");Reader reader1 = new InputStreamReader(inputStream1);Properties properties = new Properties();properties.load(reader1);properties.setProperty("username",decode(properties.getProperty("jdbc.username")));properties.setProperty("password",decode(properties.getProperty("jdbc.password")));synchronized (Demo1.class){if(sqlSessionFactory == null){sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,properties);}}SqlSession session = sqlSessionFactory.openSession();UserMapper mapper1 = session.getMapper(UserMapper.class);List<User> list = mapper1.findAll();for (User u : list) {System.out.println(u.toString());}session.close();}public static String decode(String str){return str;}

1.4三者优先级

注意:不建议混合使用,不易管理。
  1. properties元素中的属性先被读取
  2. 根据properties元素中的resource属性读取项目路径下属性文件,或根据URL指定的路径读取属性文件,并覆盖已读取的同名属性
  3. 读取作为方法参数传递的属性,并覆盖已读取的同名属性

2.设置settings

settings常用配置设置参数描述有效值默认值cacheEnabled所有映射器中配置缓存的全局开关。true、falsefalselzayLoadingEnabled延迟加载全局开关。为true时,所有关联对象均延迟加载。特定关联也可用fetchType属性
覆盖该项的开关。true、falsefalseaggressiveLazyLoading为true时对任意延迟属性的调用都会使带有延迟加载属性的对象完整加载。反之按需记载。true、falsetrueuseGeneratedKeys运行JDBC支持自动生成主键,需要驱动兼容。为true时,则强制使用自动生成主键,
尽管有些驱动不兼容但依旧可以工作(Derby)true、falsefalseautoMappingBehavior指定Mybatis如何自动映射列到字段或属性。
NONE标识取消自动映射。
PARTIAL只会自动映射没有定义嵌套结果集映射的结果集。
FULL自动映射任意复杂的结果集,无论是否嵌套。NONE
PARTIAL
FULLPARTIALlocalCacheScope利用本地缓存机制(Local Cache)防止循环引用和加速重复嵌套查询。
默认SESSION,会缓存一个会话中执行的所有查询。
STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会数据共享。SESSION
STATEMENTSESSIONjdbcTypeForNull没有为参数提供特定的JDBC类型是,为空值指定JDBC类型。          

3.别名typeAliases

可以简化过长的类全限定名。分为系统定义别名、自定义别名。Mybatis中别名不区分大小写。别名在解析配置文件时生成,长期保存在Configuration对象中,可以随时获取并使用。

3.1自定义别名

注意:不要别名重复。
<typeAliases>  <typeAlias type="domain.User" alias="user"/></typeAliases>
<typeAliases>  <package name="domain"/></typeAliases>
@Alias("user")public class User implements Serializable{......}

4.environment配置环境

<environments default="development">  <environment id="development">    <transactionManager type="JDBC"/>    <dataSource type="POOLED">      <property name="driver" value="${jdbc.driver}"/>      <property name="url" value="${jdbc.url}"/>      <property name="username" value="${jdbc.username}"/>      <property name="password" value="${jdbc.password}"/>    </dataSource>  </environment>
  <environment id="development1">
****
</environment>
</environments>
environments的default可以选择不同的数据源配置。
transactionManager配置数据库事务:
  • JDBC,使用JDBC方式管理事务
  • MANAGED,采用容器方式管理事务,在JNDI数据源中常用
  • 自定义
dataSource数据库连接方式:
  • UNPOOLED,非连接池数据库,使用org.apache.ibatis.datasource.unpooled.UnpooledDataSource实现。
  • POOLED,连接池数据库,使用***.pooled.PooledDataSource实现。
  • JNDI,JNDI数据源,使用***.jndi.JndiDataSourceFactory实现。
  • 自定义数据源,***.DataSourceFactory实现。比如DBCP:***.DbcpDataSourceFactory

5.引入映射器

可用文件路径、包名、类注册、mapper.xml引入,一般使用包名引用。下面三种分别为文件路径、包名、类注册引入。
<mappers>  <mapper resource="dao/UserMapper.xml"/>  <package name="dao"/>  <mapper class="dao.UserMapper"/></mappers>




原创粉丝点击