一、开发步骤


  *第一步:打包方式

    <packaging>jar</packaging>

   *第二步:.引起依赖

  在 https://Maven Repository: org.mybatis » mybatis  下载

  mybatis依赖

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</version>
    </dependency>

   MySQL驱动依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>

配置如下:

<!--打包方式-->
    <packaging>jar</packaging>
<!--引入依赖-->
<dependencies>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</version>
    </dependency>

    <!--mysql驱动依赖-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>

</dependencies>

报错的话就更新maven 

  *第三步:编写mybatis核心配置文件:mybatis-config.xml

  注意:名字都可以,文件位置可以随意,一般情况 放在类的根目录也就是resource

  把数据库信息修改一下,其他的不要动

    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>

  *第四步:编写XxxMapping.xml文件

这里给出一个基于 XML 映射语句的示例CarMapping.xml

 

<?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 namespace="org.mybatis.example.BlogMapper">

//这个id是sql语句唯一的标识
<insert id="insertCar">
    insert into t_car(id,car_num,brand,guide_price,produce_time,type)
    values (null,'1003','丰田',30.0,'2000-11-15','燃油车')
</insert>
</mapper>

 

 

 

  *第五步:在mybatis-config.xml文件中间指定XxxMappingxml文件路径.

  说明resource属性会自动从根目录开始查找

 

<!--    指定XxxMapping.xml-->
    <mappers>
        <mapper resource="CarMapping.xml"/>
    </mappers>

 

 

 

  *第六步:编写mybatis程序 (使用mybatis的类库,编写mybatis程序,连接数据库,做增删改查)

    负责执行sql语句的对象 Sqlsession是一个专门用来执行sql语句得到,是一个Java程序和数据库的一次会话。

  要想获取Sqlsession对象,先获取SqlsessionFactory对象,通过SqlsessionFactoryBuilder对象的build方法来获取sqlsessionFactory对象

  mybatis的核心对象包括

  • SqlsessionFactoryBuilder
  • sqlsessionFactory
  • Sqlsession

  SqlsessionFactoryBuilder--> sqlsessionFactory--> Sqlsession

 

 

  

  public static void main(String[] args) throws IOException {
        //获取sqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory对象
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
        //获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        int count = sqlSession.insert("insertCar");
        //手动提交
        sqlSession.commit();

        System.out.println(count);

    }

 

二、从XML中构建 SqlsessionFactory


 

   第一,在Mybatis中一对有一个重要的对象,这个对象是SqlsessionFactory对象

   第二, SqlsessionFactory对象的创建需要XML

  XML是什么  一定是个配置文件

  1.XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)一个简单的例子

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

 

三、mybatis有两个主要的配置文件:


 

  一个是:mybatis-config.xml ,这是核心配置文件,主要配置连接数据库的信息等 (一个)

  另一个是,XxxMapping.xml 这个文件专门编写sql 语句的配置文件 (一表一个)

 

四、注意细节

  1. 
      (1) Resources.getResourceAsStream(mybatis-config.xml)
      见到resource,大部分情况下,在根目录下加载
      (2) FileInputStream fileInputStream = new FileInputStream('D:\\MybatisTest\\mybatis\\mybatis-001-introdation\\src\\main\\resources\\mybatis-config.xml')
       采用这个方式也行,但可移植性太差
     (3) InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
 
   2.  系统加载器有一个方法叫做getresouresAsstream,他是从类路径加载资源的
      通过源代码分析
 InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); 
底层代码就是
InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");

      源代码如下:

public static InputStream getResourceAsStream(ClassLoader loader, String resource) throws IOException {
    InputStream in = classLoaderWrapper.getResourceAsStream(resource, loader);
    if (in == null) {
      throw new IOException("Could not find resource " + resource);
    }
    return in;
  }   

 

  3.CarMapping.xml文件名字不固定,路径也不固定

<mapper resource="CarMapping.xml"/>这种方式是从类路径当中加载资源
<mapper url="file:///d:/CarMapping.xml"/> url属性: 这种方式是从绝对路径当中加载资源

 五、关于Mybatis事务管理机制。

  1. 在mybatis-config.xml文件中,可以通过一下的配置进行mybatis的事务管理
 <transactionManager type="JDBC"/>

 

   2.type后面的值,包括JDBC(jdbc) 、MANAGED(managed)

  3.在mybatis中提供两种事务管理机制:

  第一种: JDBC事务管理器

  第二种: MANAGED事务管理器

  4.JDBC事务管理器:mybatis框架自己管理事务,自己采用原生的JDBC代码去管理事务:

conn.setAutoCommit(false);开启事务
。。。事务处理。。。
coo.commit();手动提交

 

  底层创建的事务处理对象是JDBCTransaction对象  

   SqlSession sqlSession = sqlSessionFactory.openSession();
  openSession()方法底层如下:
 // connection.setAutoCommit(desiredAutoCommit);

 

  如果编写代码如下:

SqlSession sqlSession = sqlSessionFactory.openSession(true); 表示没有开始事务,在JDBC事务中,没有执行conn.setAutoCommit(false),那么autoCommit默认就是true
不建议使用,因为没有开始事务

 

 

  5.MANAGED事务管理器:

  mybatis不再负责事务的管理,交给其他容器来负责,例如 Spring。

  对于我们当前的单纯只有mybais的情况下,如果配置为MANAGED,那就事务没有人管理,事务就不会开始 .

  重点:只要autoCommit是true,表示没有事务

六、完整的程序如下

public class MybatisCompleteTest {

    public static void main(String[] args) {

        SqlSession sqlSession = null;
        try {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

            SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));

            sqlSession = sessionFactory.openSession();

            int count = sqlSession.insert("insertCar");
            System.out.println(count);

            sqlSession.commit();
        } catch (Exception e) {
            //最好回滚
            if (sqlSession != null) {
                sqlSession.rollback();
            }
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close(); //释放资源
            }

        }


    }
}