关闭

MyBatis(3)--MyBatis一些概念

标签: mybatis
63人阅读 评论(0) 收藏 举报
分类:

1.资料

1>.下载MyBatis

2>.MyBatis项目参考

3>.MyBatis-Sping项目参考


2.MyBatis的基本构成

1>.SqlSessionFactoryBuilder

①.用于根据配置信息或者代码生成工厂接口(SqlSessionFactory);

2>.SqlSessionFactory

①.依靠工厂生成会话(SqlSession);

②.这是一个接口,而不是实现类;

③.两种方式创建:

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>
    <typeAliases>
        <typeAlias type="com.anlw.model.Role" alias="role" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
                <property name="autoCommit" value="true"/>
            </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="123456" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="roleMapper.xml" />
    </mappers>
</configuration>
  • (1).其中别名typeAliases只针对实体类设置别名,比如在mapper.xml中的parameterType和resultType属性使用,经测试,对于namespace属性不适用;
  • (2).environments下可以有多个environment节点,用于配置多个数据库连接信息,可以通过default属性选择使用哪个;
  • (3).这个配置事务自动提交不起作用,需要在代码级别设置,sqlSessionFactory.openSession(true),这个方法是重载,默认不加参数为不自动提交;
  • (4).mapper的路径注意:。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
代码(不推荐):
public static SqlSessionFactory getSqlSessionFactory(){
        //构建数据库连接池
        PooledDataSource dataSouce = new PooledDataSource();
        dataSouce.setDriver("com.mysql.jdbc.Driver");
        dataSouce.setUrl("jdbc:mysql://localhost:3306/mybatis");
        dataSouce.setUsername("root");
        dataSouce.setPassword("123456");
        //构建数据库事务方式
        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        //创建数据库运行环境
        Environment environment = new Environment("development", transactionFactory, dataSouce);
        //构建Configuration对象
        Configuration configuration = new Configuration(environment);
        //注册一个MyBatis的上下文别名
        configuration.getTypeAliasRegistry().registerAlias("firstRole", Role.class);
        //加入一个映射器,下面的映射器必须使用注解,不可以使用配置文件
        configuration.addMapper(RoleMapper.class);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
        return sqlSessionFactory;
    }

3>.SqlSession

①.直接通过命名信息去发送sql去执行并返回结果,SqlSession层可以通过insert,update,select和delete等方法带上sql的id来操作XML中配置好的sql;

session.insert("com.anlw.mapper.RoleMapper.insertRole", role);

②.可以获取Mapper的接口(映射器),让映射器通过命名空间和方法名称找到对应的sql,发送给数据库执行后返回结果;

4>.SQL Mapper(映射器)

①.由Java接口和XML文件或注解构成,需要给出对应的sql和映射规则,负责发送sql去执行并返回结果;

②.两种方式创建:

XML(推荐)
代码(不推荐)
public interface RoleMapper {
    @Select("select id,role_name as roleName,note from t_role where id = #{id}")
    Role getRole(Long id);
}

③.如果mapper使用注解,那么获取SqlSessionFactory的方式必须采用代码的方式,而不能采用xml配置的方式;


3.MyBatis核心组件生命周期

1>.SqlSessionFactoryBuilder

①.它的生命周期只存在于方法局部,生成SqlSessionFactory后就可以回收丢弃;

2>.SqlSessionFactory

①.存在于MyBatis应用的整个生命周期中;

②.应该为单例模式,一个数据库只对应一个SqlSessionFactory;

3>.SqlSession

①.生命周期为请求数据库处理事务的过程;

②.线程不安全对象;

③.保证事务的一致性;

④.用完在finally中及时关闭;

4>.Mapper

①.生命周期在一个SqlSession事务方法之内,属于方法级别的;

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:37652次
    • 积分:595
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论