第一章 MyBatis 入门

第一章 MyBatis 入门

开发环境搭建

​ (1)新建gradle工程

​ (2)配置gradle里的mybatis

compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.18'
compile group: 'org.mybatis', name: 'mybatis', version: '3.4.6'

MyBatis的基本构成

MyBatis的基本组件

(1)SqlSessionFactoryBuilder构造器: 根据配置文件或者代码生成SqlSessionFactory(工厂接口)

(2)SqlSessionFactory:依赖工厂生成SqlSession

​ 提供两种模式去创建SqlSessionFactory

​ ①xml方式构建

定义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 alias="user" type="bases.User" />
    </typeAliases>
    <!--定义数据库信息-->
    <environments default="dev">
        <environment id="dev">
            <!--使用JDBC的事务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据库连接信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/demo"/>
                <property name="username" value="root"/>
                <property name="password" value="manager1"/>
            </dataSource>
        </environment>
    </environments>
    <!--定义映射器-->
    <mappers>
        <mapper resource="./UserMapper.xml"></mapper>
    </mappers>
</configuration>

​ 获取sqlSessionFactory

public static SqlSessionFactory getSqlSessionFactoryForXML(){
   InputStream stream = SqlSessionFactoryTest.class.getClassLoader().getResourceAsStream("./mybatis-config1.xml");
   /**
    * 通过SqlSessionFactoryBuilder读取xml文件信息,来创建SqlSessionFactory的对象
    *
    * Mybatis会将mybatis-config1.xml文件配置信息解析到Configuration类对象里面
    * 然后利用SqlSessionFactoryBuilder对象读取为我们创建的SqlSessionFactory
    */
   return new SqlSessionFactoryBuilder().build(stream);
}

​ ②代码方式

public static SqlSessionFactory getSqlSessionFactoryForJava(){

   PooledDataSource pooledDataSource = new PooledDataSource();
   pooledDataSource.setDriver("com.mysql.jdbc.Driver");
   pooledDataSource.setUrl("jdbc:mysql://localhost:3306/demo");
   pooledDataSource.setUsername("root");
   pooledDataSource.setPassword("manager1");

   //数据库的事务方式
   JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory();


   //创建数据库运行时环境
   Environment dev = new Environment("dev", jdbcTransactionFactory,pooledDataSource);

   //构建Configuration对象
   Configuration configuration = new Configuration(dev);

   //注册一个MyBatis上下问别名
   configuration.getTypeAliasRegistry().registerAlias("user", User.class);

   //加入一个映射器
   configuration.addMapper(UserMapper.class);

   //构建SqlSessionFactory
   return new SqlSessionFactoryBuilder().build(configuration);
}

(3)SqlSession:发送sql去执行,并返回结果,也可以获取Mapper的接口

SqlSessionFactory sqlSessionFactory = SqlSessionFactoryTest.getSqlSessionFactoryForXML();
SqlSession sqlSession = null;
try {
   sqlSession = sqlSessionFactory.openSession();
   UserMapper mapper = sqlSession.getMapper(UserMapper.class);
   User dd = mapper.getUserByName("dd");
   System.out.println(dd.toString());
   sqlSession.commit();
} catch (Exception e) {
   e.printStackTrace();
} finally {

   if(sqlSession!= null){
      sqlSession.close();
   }
}

(4)Sql Mapper(映射器):有一个Java接口和一个Xml文件构成,需要给出对应的Sql和映射规则。负责发送Sql去执行,并返回结果

MyBatis各个组件的生命周期

(1)SqlSessionFactoryBuilder利用XML或者Java编码获得资源来构建SqlSessionFactory,作用就是一个构建器,所以一旦创建完sqlSessionFactory作用就完结,我们就可以回收

(2)SqlSeesionFactory用来创建SqlSession,而sqlSession是一个会话,所以SqlSessionFactory的生命周期是MyBatis的整个生命周期,如果我们多次创建同一个数据库的sqlSessionFactory,会打开多个数据库连接,会照成资源耗尽,所以,我们应该使每一个数据库对应一个sqlSessionFactory。管理好数据库资源分配。

(3)SqlSession:是一个会话,相当于JDBC的Contection对象,生命周期应该是请求数据库处理事务的过程中,是一个线程不安全的对象,创建的sqlSession必须及时关闭

(4)Mapper是一个接口,作用是发送SQL,然后返回我们需要的结果,或者执行Sql从而修改数据库的数据,因此,他应该是一个SqlSession事务方法内的一个方法级别的东西,如同JDBC中的一个sql语句执行,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值