欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

01-mybatis 快速入门

程序员文章站 2022-03-05 23:24:13
...

01-mybatis 快速入门

1. 快速入门程序

  1. 导入jar

    添加 mysql的驱动包

    添加mybatis的jar
    01-mybatis 快速入门

  2. 创建项目配置文件

    <?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">
    <!--引入config.xml的约束-->
    <configuration>
    
    <!--    配置环境-->
        <environments default="development">
            <environment id="development">
    <!--            事务-->
                <transactionManager type="JDBC"/>
    <!--            连接MySQL的 4要素-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;serverTimezone=UTC&amp;characterEncoding=utf-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    
    <!--    配置mapper的映射-->
        <mappers>
        </mappers>
    
    </configuration>
    
  3. 创建获取SqlSession的工具类型

    package cn.hk.utils;
    
    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.Reader;
    import java.util.Objects;
    
    /**
     * @author 黄药师
     * @date 2020-05-11 09:33
     * @desc  sqlSession工具类
     *
     *
     */
    public class SqlSessionUtils {
    
        private static SqlSessionFactory factory = null;
    
        /**
         * 从 XML 中构建 SqlSessionFactory
         * 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。
         * SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
         * 而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出
         * SqlSessionFactory 实例。
         */
        static {
    
            // io流 读取 config配置文件
            Reader reader = null;
            try {
                reader = Resources.getResourceAsReader("mybatis-config.xml");
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            //通过 factoryBuilder 拿到 sqlSessionFactory 对象
            factory = new SqlSessionFactoryBuilder().build(reader);
    
        }
    
        /**
         * 获取sqlSession
         * 从 SqlSessionFactory 中获取 SqlSession
         * SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
         * @return
         */
        public static SqlSession getSqlSession(){
            return factory.openSession();
        }
    
        /**
         * 关闭连接
         * @param session
         * @return
         */
        public static void close(SqlSession session){
            if (Objects.nonNull(session)) { // 判null 处理
                session.close();
            }
        }
    
    }
    
    
  4. 创建一个映射接口 (需求查询一条数据)

    public interface UserMapper {
    
        /**
         * 通过 id查询 user
         * @param id
         * @return
         */
       User selectByPrimaryKey(Integer id);
    
    }
    
  5. 创建一个映射文件

    <?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.xml 的约束 -->
    <!--
       namespace: 命名空间的作用有两个,
       1. 利用更长的全限定名来将不同的语句隔离开来
       2. 实现了和mapper接口绑定
    
       命名解析:
       1. 全限定名(比如 "com.mypackage.MyMapper.selectAllThings")将被直接用于查找及使用。
       2.  短名称 如果全局唯一也可以作为一个单独的引用。
       如果不唯一,有两个或两个以上的相同名称(比如 "com.foo.selectAllThings" 和 "com.bar.selectAllThings"),
       那么使用时就会产生"短名称不唯一"的错误,这种情况下就必须使用全限定名。
    
    -->
    <mapper namespace="cn.hk.mapper.UserMapper">
    <!--
         select   映射查询语句。
         id       短名称 唯一的
         parameterType   sql输入的参数 类型
         resultType      sql执行后 输出的 结果类型
         #{id}           ONGL语法 获取传入的id值
    -->
        <select id="selectByPrimaryKey" parameterType="integer" resultType="cn.hk.bean.User">
            select * from t_user where id = #{id}
      </select>
    </mapper>
    
  6. 在config.xml配置文件中注册映射文件

    <!--    配置mapper的映射-->
        <mappers>
            <mapper resource="cn/hk/mapper/UserMapper.xml"></mapper>
        </mappers>
    
  7. 编写测试代码

        @Test
        public void testSelectOne(){
    
            // 获取SqlSession
            SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    
            // 通过session获取Mapper接口
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            // 传入参数返回值
            User user = mapper.selectByPrimaryKey(2);
    
            System.out.println(user);
        }
    
    

2.mybatis配置日志

  1. 日志

    Mybatis 通过使用内置的日志工厂提供日志功能。内置日志工厂将会把日志工作委托给下面的实现之一:

    • SLF4J
    • Apache Commons Logging
    • Log4j 2
    • Log4j
    • JDK logging

    MyBatis 内置日志工厂会基于运行时检测信息选择日志委托实现。它会(按上面罗列的顺序)使用第一个查找到的实现。当没有找到这些实现时,将会禁用日志功能。

  2. 可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择其它日志实现。

    <configuration>
      <settings>
        ...
        <setting name="logImpl" value="LOG4J"/>
        ...
      </settings>
    </configuration>
    
  3. 日志的配置

    配置日志功能非常简单:添加一个或多个配置文件(如 log4j.properties),有时还需要添加 jar 包(如 log4j.jar)。下面的例子将使用 Log4J 来配置完整的日志服务。一共两个步骤:

    1. 添加 Log4J 的 jar 包

    2. 01-mybatis 快速入门在应用的类路径中创建一个名为 log4j.properties 的文件,文件的具体内容如下:

      # Global logging configuration
      log4j.rootLogger=ERROR, stdout
      # MyBatis logging configuration...
      # 需要那个包下面的 日志打印
      
      # 日志级别    warn 警告级别   info 普通信息级别  debug 调试模式(开发阶段) error 错误(项目上线) all、trace(打开所有日志)
      log4j.logger.cn.hk.mapper=TRACE
      # Console output...
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
      
    3. 配置了日志 后测试控制台的输出结果:

      DEBUG [main] - ==>  Preparing: select * from t_user where id = ? 
      DEBUG [main] - ==> Parameters: 2(Integer)
      TRACE [main] - <==    Columns: id, name, pwd, phone
      TRACE [main] - <==        Row: 2, 李四, 123456, 1234568888
      DEBUG [main] - <==      Total: 1
      User{id=2, name='李四', pwd='123456', phone='1234568888'}
      
相关标签: 框架 java