Mybatis初探

mybatis的构造

Configuration -> SqlSessionFactoryBuilder -> SqlSessionFactory -> SqlSession -> xxMap -> 进行数据库的操作

mybatis的Config文件配置




<configuration>
    
    <typeAliases>
        <typeAlias alias="role" type="chapter2.po.Role" />
    typeAliases>

    
    <environments default="development">
        <environment id="development">

            
            <transactionManager type="JDBC">
                <property name="autoCommit" value="false" />
            transactionManager>

            
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            dataSource>
        environment>
    environments>

    
    <mappers>
        <mapper resource="chapter2/mapper/roleMapper.xml" />
    mappers>

configuration>

mybatis的map配置




<mapper namespace="chapter2.mapper.RoleMapper">

    
    <select id="getRole" parameterType="long" resultType="role">
        SELECT
        id,role_name as roleName,note FROM
        t_role WHERE id = #{id}
    select>

    
    <insert id="insertRole" parameterType="role">
        insert into
        t_role(role_name,note) values(#{roleName},#{note});

    insert>

    
    <delete id="deleteRole" parameterType="long">
        DELETE FROM t_role where
        id=#{id};
    delete>

mapper>

mybatis的操作流程

SqlSessionFactoryBuilder是利用xml或者java编码获得资源来构建SqlSessionFactory。一旦构建完成,其存在的意义也就消失了,所以它的生命周期只存在方法的内部。

SessionFactory的作用是创建SqlSession,而SqlSession相当于JDBC中的Connection对象。如果多次创建同一个数据库的SqlSessionFactory,则每次创建SqlSessionFactory会打开更多的数据库连接资源,因此对于一个数据库而言应该只有一个实例,所以我们希望它是单例的。

SqlSession是一个会话,相当于Connection对象,是一个线程不安全的对象,每次创建使用完后需要及时关闭,否者会使数据库连接池的活动资源减少。

Mapper是一个接口,作用是发送Sql,返回我们需要的结果,或者执行sql语句。生命周期和SqlSession一样。

1.获取SqlSessionFactoryBuilder对象

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

2.根据配置文件获取SqlSessionFactory对象

String resource  = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

3.获取SqlSession对象

SqlSession sqlSession  = sqlSessionFactory.openSession();

4.获取Mapper对象

    XxxMapper xxxMapper = sqlSession.getMapper(XxxMapper.class);

示例代码:

public class SqlSessionFactoryUtil {
    private static SqlSessionFactory sqlSessionFactory = null;

    private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;

    public SqlSessionFactoryUtil() {
    }

    public static SqlSessionFactory initSqlSessionFactory() {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;

        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE, null, e);
        }
        synchronized (CLASS_LOCK) {
            if (sqlSessionFactory == null) {
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }
        }
        return sqlSessionFactory;

    }

    public static SqlSession openSqlSession() {
        if (sqlSessionFactory == null) {
            initSqlSessionFactory();
        }
        return sqlSessionFactory.openSession();
    }
}

参考文献:

深入浅出Mybatis技术原理与实战             电子工业出版社            杨开振

你可能感兴趣的:(数据库,mybatis,框架)