MyBatis学习笔记1-入门          返回主页

入门

  1. mybatis使用mapper代理方式只需要写DAO接口 sql_date.sql存放了系统的初始化数据
  2. JDBC的sql语句是硬编码,mybatis要把sql语句写入配置文件,sql占位符及参数类型写入配置

配置介绍

  1. 核心配置文件 SqlMapConfig.xml,名称不固定;配置了运行环境参数,包括数据源、事务。是公用的文件
  2. mapper.xml,mapper.xml...... ,配置sql语句
  3. mybatis(apache开源组织的,在github上托管)实现了对sql语句的灵活操作,只需要关注sql本身
  4. 通过xml或者注解方式配置statement完成输入输出映射

结构

  1. SqlSessionFactory(会话工厂) 配置产生,创建SqlSession
  2. SqlSession 操作数据库的接口,面向用户 内部是Executor执行操作,事一个接口。两个实现:默认的执行器,还有一个是缓存执行器
  3. MapperedStatement,底层封装对象,封装了sql语句 需要输入映射,支持java简单类型,hashmap 输出类型:支持上述类型

开发环境搭建

  1. mapper.xml命名规则: 建议:表明+mapper.xml
  2. 添加jar包及依赖
  3. 书写log4j.properties
  4. 书写SqlMapConfig.xml
  5. 添加数据源,添加映射文件

代码书写

  1. 书写SqlMapConfig.xml <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

        <!-- 加载mapper.xml -->
        <mappers>
            <mapper resource="sqlmap/User.xml"/>
        </mappers>
    </configuration>
    
  2. User.xml, User.java

        <?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">
        <!-- 命名空间,分类管理sql语句
            mapper.xml以Statement为单位管理sql语句
        -->
        <mapper namespace="test">
            <!-- 根据id查用户信息 -->
            <!-- id标示一个框架
                一个sql封装一个MappedStatement
                #{}表示一个占位符,若传入简单类型参数,名称可以任意
                parameterType:输入参数类型
                resultType输出结果类型:制定映射的单条记录POJO
             -->
            <select id="findUserById" parameterType="int" resultType="com.mybatis.po.User">
                select * from user where id=#{id}
            </select>
        </mapper>
    
        public class User {
    
            private int id;
            private String username;
            private String sex;
            private Date birthday;
            private String address;
    
  3. 建立SqlSessionFactory

    //创建会话工厂 声明配置
    String resource = "SqlMapConfig.xml";
    //加载配置
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
  4. 建立SqlSession

    SqlSession session = sessionFactory.openSession();
    try {
        user = session.selectOne("test.findUserById", 1);
    
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //关闭sqlSession
        session.close();
    }
    System.out.println(user);
    
  5. 运行测试

    DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
    DEBUG [main] - Opening JDBC Connection
    DEBUG [main] - Created connection 1914582232.
    DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@721e34d8]
    DEBUG [main] - ==>  Preparing: select * from user where id=?
    DEBUG [main] - ==> Parameters: 1(Integer)
    DEBUG [main] - <==      Total: 1
    DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@721e34d8]
    DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@721e34d8]
    DEBUG [main] - Returned connection 1914582232 to pool.
    User [id=1, username=王五, sex=2, birthday=null, address=null]
    

小结

  1. 编写SqlMapConfig.xml
  2. 编写mapper.xml
  3. 通过配置文件加载SqlSessionFactory
  4. 建立SqlSession
  5. 通过SqlSession操作数据库 如果执行添加 更新 删除 需要调用commit()
  6. 使用完成后关闭

关于#{}

 表示一个占位符,向占位符输入参数,Mybatis会自动进行MyBatis和JDBC类型的转换

关于${}

**是拼接串,不能防止sql注入**
 表示sql拼接,通过${}接受的参数,将对参数不加修饰
     如:#{%${小名}%} 相当于'%小名%'