mybatis 配置文件configuration environments以及单独使用mybatis的demo

来源:互联网 发布:武工队后勤部淘宝 编辑:程序博客网 时间:2024/05/18 00:17

前一篇我们学会了使用配置缓存,使用缓存,这篇我们来看看mybatis 的主配置文件,即mybatis 中的事务和数据源的配置。

mybatis 是一个orm框架,他的使用让我们省去了一些和业务无关的代码,能提高我们的开发速度,尤其是在业务不是很多但是 链接数据库,从中查询的比较多的话你会发现很多时候你在做获取数据源链接即Connection  以及ResultSet 结果集的获取并将结果集组装成对象、释放资源 以及异常的处理等这些 工作,并且占有很大的工作量。 但当你使用mybatis的时候你会发现工作量会很小一个配置文件,一个映射文件 一个SqlSessionFactory 类就OK了其他的你什么都不用管。

上面扯了很多下面我们进入正题,那就是mybatis的配置文件,废话不说先来看看一个完整的小demo:

 1、数据源配置文件

[html] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. driver=com.mysql.jdbc.Driver  
  2. url=jdbc:mysql://localhost:3306/user  
  3. name=root  
  4. password=admin  
  5. driver.encode=utf-8  
  6. poolMaximumActiveConnections=15  
  7. poolMaximumIdleConnections=10  
  8. poolMaximumCheckoutTime=20000  
  9.   
  10.   
  11. tdriver=com.mysql.jdbc.Driver  
  12. turl=jdbc:mysql://localhost:3306/user2  
  13. tname=root  
  14. tpassword=admin  
  15. tdriver.encode=utf-8  
  16. tpoolMaximumActiveConnections=15  
  17. tpoolMaximumIdleConnections=10  
  18. tpoolMaximumCheckoutTime=20000  


2、mybatis 配置文件
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>  
  5. <!--配置文件的引入 -->  
  6. <properties resource="db.properties">  
  7. </properties>  
  8. <!-- 配置数据源相关属性和事务  -->  
  9. <environments default="development">  
  10. <!-- 环境配置开始,可以配置多个环境 而使用哪一个可以在创建session时指定,默认使用default中的值 -->  
  11. <environment id="development">  
  12. <!--事务配置,使用jdbc类型的事务  -->  
  13. <transactionManager type="JDBC"/>  
  14. <!--数据源的配置,使用库链接池类型 -->  
  15. <dataSource type="POOLED">  
  16. <property name="driver" value="${driver}"/>  
  17. <property name="url" value="${url}"/>  
  18. <property name="username" value="${name}"/>  
  19. <property name="password" value="${password}"/>  
  20. <property name="poolMaximumActiveConnections" value="${poolMaximumActiveConnections}"/>  
  21. <property name="poolMaximumCheckoutTime" value="${poolMaximumCheckoutTime}"/>  
  22. <property name="poolMaximumIdleConnections" value="${poolMaximumIdleConnections}"/>  
  23. <property name="driver.encode" value="${driver.encode}"/>  
  24. </dataSource>  
  25. </environment>  
  26. <environment id="work">  
  27. <!--事务配置,使用jdbc类型的事务  -->  
  28. <transactionManager type="JDBC"/>  
  29. <!--数据源的配置,使用链接池方式 -->  
  30. <dataSource type="POOLED">  
  31. <property name="driver" value="${tdriver}"/>  
  32. <property name="url" value="${turl}"/>  
  33. <property name="username" value="${tname}"/>  
  34. <property name="password" value="${tpassword}"/>  
  35. <property name="poolMaximumActiveConnections" value="${tpoolMaximumActiveConnections}"/>  
  36. <property name="poolMaximumCheckoutTime" value="${tpoolMaximumCheckoutTime}"/>  
  37. <property name="poolMaximumIdleConnections" value="${tpoolMaximumIdleConnections}"/>  
  38. <property name="driver.encode" value="${tdriver.encode}"/>  
  39. </dataSource>  
  40. </environment>  
  41. </environments>   
  42. <mappers>  
  43. <!--  映射路径 -->  
  44. <mapper resource="com/mybatis1/UserMap.xml"/>  
  45. <mapper resource="com/mybatis2/UserMap.xml"/>  
  46. </mappers>  
  47. </configuration>  

3、执行方法
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. package com.mybatis2;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.util.Properties;  
  6.   
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10.   
  11. /** 
  12.  * @author WHD data 2016年3月8日 
  13.  */  
  14. public class Test1 {  
  15.   
  16.     public static void main(String[] args) {  
  17.         // 配置文件  
  18.         String path = "config.xml";  
  19.         InputStream input = Test.class.getClassLoader().getResourceAsStream(  
  20.                 path);  
  21.         SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();  
  22.         SqlSessionFactory factory = builder.build(input);  
  23.         SqlSession session = factory.openSession();  
  24.         try {  
  25.             User user = session.selectOne("com.mybatis2.userMap.userInfo",  
  26.                     "whd");  
  27.             System.out.println(user.toString());  
  28.         } finally {  
  29.             // 关闭session 释放资源  
  30.             session.close();  
  31.         }  
  32.     }  
  33.   
  34. }  

4、User 类
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. package com.mybatis2;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /** 
  6.  * @author WHD data 2016年2月28日 
  7.  */  
  8. public class User implements Serializable {  
  9.     private static final long serialVersionUID = 3574211222602302068L;  
  10.     private String name;  
  11.     private String password;  
  12.   
  13.     public User() {  
  14.     }  
  15.   
  16.     public User(String name, String password) {  
  17.         this.name = name;  
  18.         this.password = password;  
  19.     }  
  20.   
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.   
  25.     public void setName(String name) {  
  26.         this.name = name;  
  27.     }  
  28.   
  29.     public String getPassword() {  
  30.         return password;  
  31.     }  
  32.   
  33.     public void setPassword(String password) {  
  34.         this.password = password;  
  35.     }  
  36.   
  37.     @Override  
  38.     public String toString() {  
  39.         return "[name=" + name + ", password=" + password + "]";  
  40.     }  
  41.   
  42. }  

5、映射配置文件
[html] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.mybatis2.userMap">  
  5.     <resultMap id="result" type="com.mybatis2.User">  
  6.         <result property="name" column="name" />  
  7.         <result property="password" column="password" />  
  8.     </resultMap>  
  9.     <select id="userInfo" parameterType="java.lang.String"  
  10.         resultMap="result">  
  11.         select * from usert where name =#{name}  
  12.     </select>  
  13.     <insert id="insertInfo" parameterType="com.mybatis2.User">  
  14.         insert into usert(name,password) values(#{name},#{password});  
  15.     </insert>  
  16. </mapper>  

这个小demo 很简单,但是我们在数据源配置的时候我们看到了,哪里配置了两个数据库的信息,不是多余而是我们会使用它的,下面先说说SqlSessionFactory 等都做了什么在来看看多个数据源的使用。


二、SqlSessionFactory 的创建:

[java] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. package com.mybatis2;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.util.Properties;  
  6.   
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10.   
  11. import com.mybatis2.User;  
  12.   
  13. /** 
  14.  * @author WHD data 2016年2月28日 
  15.  */  
  16. public class Test {  
  17.     public static void main(String[] args) {  
  18.         // 配置文件  
  19.         String path = "config.xml";  
  20.         InputStream input = Test.class.getClassLoader().getResourceAsStream(  
  21.                 path);  
  22.         SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();  
  23.         String environment = "work";  
  24.         // 这里的environment指定了数据源的id也就是指定了数据源,如果没有则使用mybatis配置文件中的默认值。  
  25.         // mybatis中的配置文件的datasource引用了db.properties 中的数据的配置  
  26.         SqlSessionFactory factory = builder.build(input, environment);  
  27.         SqlSession session = factory.openSession();  
  28.         try {  
  29.             User user = session.selectOne("com.mybatis2.userMap.userInfo""whd");  
  30.             session.clearCache();  
  31.             System.out.println(user.toString());  
  32.         } finally {  
  33.             // 关闭session 释放资源  
  34.             session.close();  
  35.         }  
  36.     }  
  37. }  

从这个demo我们来看看,在创建SqlSessionFactory工厂的时候我们可以传递多个参数,其中就有一个配置文件configuration的输入流InputStream 或者Reader,除了这个必传的参数外我们还可以选择传递一下参数,这个demo 中我们传递了一个String类型的参数也就是mybatis配置文件中environment 的id 。那这些东西传进去到底有什么用,下面就来看看:

在创建SqlSessionFactory 是必传的参数输入流InputStream 或者Reader 就是获取配置文件并解析xml 格式从中获取这个environment中配置的事务以及数据源的信息,组装成一个configuration 对象。如果只传了InputStream或Reader的话environment 就使用默认的值而如果向上面的这个demo一样传递了environment 的id则在解析组装生成configuration 对象时使用的不是默认的而是你指定的这个id的environment,这样就改变了我们的数据源是不是也很方便啊!哈哈

现在明白了使用两个数据源配置以及两个environment 的原因了吧,这样还有一个好处就是在使用时修改测试库和正式库也挺方便的,数起正式库和测试库的修改是不是觉得直接修改db.properties 或者mybatis 的配置文件更方便,因为这样只需要修改配置文件不用修改代码,但是上面传参的方式有比没有好不是!


总结:

1、mybatis 的配置文件很灵活你可以直接在mybatis 中也数据源事务的属性也可以通过properties 文件来引入,这样写是不是觉得很整洁干净。

2、在创建SqlSessionFactory 时我们可以使用默认的值,如果有需要我们可以在这里改变数据源默认的配置是不是也很方便。

3、其实mybatis的配置文件就是设置了数据源 数据源的一些属性、事务以及事务的级别等这些东西而SqlSessionFactory 解析了这个配置文件获取了数据源以及事务的相关信息。

4、SqlSessionFactory 对象的openSession() 方法创建SqlSession时我们可以个这个会话设置事务的级别、是否自动提交以及sql执行的方式(批量执行还是简单的一个一个执行)等这些属性。

5、当调用sqlSession对象的selectOne() 或selectList() 等方法时会按照之前设置的属性获取数据库的链接去执行指定sql。获取查询结果并解析映射。


总结中很多东西我们还没学到,但这些在后面的文章都会看到详细的解释。

0 0
原创粉丝点击