诀情式浮生若梦吧 关注:23贴子:422
  • 13回复贴,共1

【一步一个脚印】Mybatis的简单笔记

只看楼主收藏回复

学习使我快乐,我爱学习。


IP属地:浙江1楼2016-11-09 16:32回复
    MyBatis有一个实用类--Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
    MyBatis应用程序主要使用SqlSessionFactory实例,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
    使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的普通Java对象映射成数据库中的记录。
    用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。


    IP属地:浙江2楼2016-11-09 16:48
    回复
      con.xml 配置文件
      <?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>
      <environments default="development">
      <environment id="development">
      <transactionManager type="JDBC" />
      <!-- 配置数据库连接信息 -->
      <dataSource type="POOLED">
      <property name="driver" value="com.mysql.jdbc.Driver" />
      <property name="url" value="jdbc:mysql://localhost:3306/test" />
      <property name="username" value="root" />
      <property name="password" value="123456" />
      </dataSource>
      </environment>
      </environments>
      <mappers>
      <!-- 注册userMapper.xml映射文件, 所以resource值为该文件的地址-->
      <mapper resource="mapping/userMapper.xml"/>
      </mappers>
      </configuration>


      IP属地:浙江3楼2016-11-09 16:49
      回复
        2、mapping.userMapper.xml 映射文件,执行SQL语句,并且提供一个id以供其他程序调用
        <?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">
        <mapper namespace="mapping.userMapper">
        <!-- 根据id查询得到一个user对象 -->
        <select id="getUser" parameterType="int"
        resultType="modal.User">
        select * from userinfo where id=#{id}
        </select>
        </mapper>


        IP属地:浙江4楼2016-11-09 16:59
        收起回复
          3、测试代码,执行定义的SQL语句,
          public static void main(String[] args) throws IOException {
          //mybatis配置文件
          String resource = "conf.xml";
          //类加载器加载配置文件以及相关联的映射文件
          InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
          //构建sqlsession工厂
          SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
          //Resources类加载mybatis的配置文件(也加载关联的映射文件)
          SqlSession session = sessionFactory.openSession();
          //映射sql的标识字符串,其中getUser为映射文件的id
          String statement = "mapping.userMapper.getUser";
          User user = session.selectOne(statement,3);
          System.out.println(user);
          }


          IP属地:浙江5楼2016-11-09 17:02
          回复
            4、映射文件相关
            为mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace值唯一,例如namespace="mapping.userMapper"。
            在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复。
            使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型;
            resultType="modal.User"就表示将查询结果封装成一个User类的对象返回。


            IP属地:浙江6楼2016-11-09 17:08
            收起回复
              5、配置文件的属性
              <!-- 配置别名 类型别名是Java 类型的简称。它仅仅只是关联到XML 配置,简写冗长的JAVA 类名。-->
              <typeAliases>
              <typeAlias type="com.mybatis.model.Blog" alias="Blog"/>
              </typeAliases>
              <!-- 使用这个配置,"Blog"就能在任何地方代替"com.mybatis.model.Blog"被使用。-->
              <!-- 每个数据库(environment)对应一个SqlSessionFactory 实例-->
              <!--
              environments对于一个应用可能连接多个数据库,那就需要配置不同的环境来连接不同的数据库,
              每一个SqlSessionFactory对应一个environments也可以设置不同的环境应用于开发或测试的环境如果环境被忽略,
              那么默认环境将会被加载,也就是default="development"的作用了
              -->
              <!--
              transactionManager设置事物的管理类型是 type=”[JDBC|MANAGED]”
              JDBC使用datasource的连接来管理事物范围。
              MANAGED自己不进行事物的提交和回滚,依靠容器来管理事物,设置closeConnection为false,取消自动关闭连接
              -->
              <!--
              dataSource设置数据源[UNPOOLED|POOLED|JNDI]
              POOLED:每次被请求时简单打开和关闭连接
              POOLED:JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。
              poolMaximumActiveConnections – 在任意时间存在的活动(也就是正在使用)连接的数量。默认值:10
              poolMaximumIdleConnections – 任意时间存在的空闲连接数。
              oolMaximumCheckoutTime – 在被强制返回之前,池中连接被检查的时间。默认值:20000 毫秒(也就是 20 秒)
              poolTimeToWait – 这是给连接池一个打印日志状态机会的低层次设置,还有重新尝试获得连接,这些情况下往往需要很长时间(为了避免连接池没有配置时静默失败)。 默认值:20000 毫秒(也就是 20 秒)
              poolPingQuery – 发送到数据的侦测查询,用来验证连接是否正常工作,并且准备接受请求。默认是“NO PING QUERY SET”,这会引起许多数据库驱动连接由一个错误信 息而导致失败。
              poolPingEnabled – 这是开启或禁用侦测查询。如果开启,你必须用一个合法的SQL语句(最好是很快速的)设置 poolPingQuery 属性。默认值:false。
              poolPingConnectionsNotUsedFor – 这是用来配置 poolPingQuery 多次时间被用一次。这可以被设置匹配标准的数据库连接超时时间,来避免不必要的侦测。默认值:0 (也就是所有连接每一时刻都被侦测-但仅仅当 poolPingEnabled 为 true 时适用)。
              JNDI – 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
              initial_context – 这个属性用来从初始上下文中寻找环境(也就是initialContext.lookup(init ial——context))。这是个可选属性,如果被忽略,那么data_source 属性将 会直接以 init ialContext 为背景再次寻找。
              data_source – 这是引用数据源实例位置的上下文的路径。它会以由 init ial_context查询返回的环境为背景来查找,如果 init ial_context 没有返回结果时,直接以初始上下 文为环境来查找。
              -->


              IP属地:浙江7楼2016-11-10 15:01
              回复
                6、log4j日志文件的配置,log4j.properties
                定义输出目标
                log4j.rootLogger=info,appender1,appender2
                输出到控制台
                log4j.appender.appender1=org.apache.log4j.ConsoleAppender
                输出到文件
                log4j.appender.appender2=org.apache.log4j.FileAppender
                log4j.appender.appender2.File=C:/logFile.txt
                输出类型
                log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
                log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout


                IP属地:浙江9楼2016-11-11 12:02
                回复
                  7、conf.xml配置文件延生
                  1)typeAliases别名:在<typeAliases>属性内使用<package>配置可自动设置整个包内的类名就是别名。
                  2)environments环境:支持多个环境,如development、test等等,设置默认环境。
                  3)mappers映射器:设置属性<mapper>注册xml文件、class文件、以及注册package整个包内文件。


                  IP属地:浙江10楼2016-11-11 12:45
                  回复
                    8、构建工厂输入流
                    public class SqlSessionFactoryUtil {
                    public static SqlSessionFactory sqlSessionFactory; //工厂
                    public static SqlSessionFactory getSessionFactory(){
                    if(sqlSessionFactory==null){
                    InputStream inputStream = null;
                    try{
                    //读取文件做成输入流
                    inputStream = Resources.getResourceAsStream("conf.xml");
                    //构建工厂配置文件的输入流
                    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                    }catch(Exception e){
                    e.printStackTrace();
                    }
                    }
                    return sqlSessionFactory;
                    }
                    public static SqlSession openSession(){
                    //相当于数据库连接
                    return getSessionFactory().openSession();
                    }


                    IP属地:浙江11楼2016-11-11 12:46
                    回复
                      9、简单测试代码
                      private static Logger logger = Logger.getLogger(Test.class);
                      public static void main(String[] args){
                      SqlSession sqlSession=SqlSessionFactoryUtil.openSession();
                      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                      User user= new User("张山",25); int result = userMapper.add(user);
                      sqlSession.commit();
                      if(result>0){ logger.info("添加成功");}
                      }


                      IP属地:浙江12楼2016-11-11 12:48
                      回复