1.mybatis-config.xml 文件的进一步说明

  • 一个 mybatis-config.xml文件中可以包含多个运行环境的数据库环境信息(即多个<environment>标签);
  <environments default="prod"><!--与 id 值保持一致-->
        <environment id="prod"><!--与 defaule 值保持一致-->
            <transactionManager type="JDBC"/><!--数据库事务的处理方式,默认为 JDBC-->
            <dataSource type="POOLED"><!--数据库源类型保持默认值 POOLED-->
                <!--配置数据库信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/><!--数据库驱动方式,需要导入 JDBC驱动的 jar 包-->
                <property name="url" value="jdbc:mysql://localhost:3306/db?serverTimezone=UTC"/><!--数据库 URL 地址-->
                <!--<property name="url" value="jdbc:mysql://localhost:3306/db"/>&lt;!&ndash;数据库 URL 地址&ndash;&gt;-->
                <property name="username" value="root"/><!--数据库用户名-->
                <property name="password" value="root"/><!--数据库密码-->
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC"/><!--数据库事务的处理方式,默认为 JDBC-->
            <dataSource type="POOLED"><!--数据库连接池类型保持默认值 POOLED-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/><!--数据库驱动方式,需要导入 JDBC驱动的 jar 包-->
                <property name="url" value="jdbc:mysql://localhost:3306/db?serverTimezone=UTC"/><!--数据库 URL 地址-->
                <property name="username" value="root"/><!--数据库用户名-->
                <property name="password" value="root"/><!--数据库密码-->
            </dataSource>
        </environment>
    </environments>

如上配置文件中即包含了两个环境的数据库配置信息;

  • mybatis-config.xml 文件中配置了多个数据库信息后,使用的时候需要指定目前操作的是哪个数据库,指定方法:通过配置 environments default值和 environment的id 来指定 mybatis 运行时的数据库环境;(即 default 和 哪个 id 一致,即表示当前引用的就是这个数据库环境)
  • 除了修改 mybatis-config.xml 文件的 environments 的 default 的值和 environment 的 id 值一致指定数据库运行环境外,还可以在运行代码中强制指定数据库运行环境,代码如下:

 但是这种方式不推荐,尽量不要这样使用;

  • mybatis-config.xml 文件中的 dataSource 标签指的是数据源,理论上支持以下三种形式:

    ▶UNPOOLED:属于传统的 JDBC 模式,该模式下每次访问数据库,都需要打开、关闭数据库连接,所以不予以推荐;

    ▶POOLED:使用第三方的数据库连接池

    ▶JNDT:从 tomcat 中获取一个内置的数据库连接池;

          默认情况下一般推荐使用 POOLED;

  • mybatis-config.xml 文件中的 transactionManager 标签代表事务提交方式。一般情况下才用以下两种形式:

    ▶JDBC:利用 JDBC 的方式处理事务(即包括 commit(提交事务)、rollback(事务回滚)、close(关闭事务))

    ▶MANAGED:将事务交由其他组件去托管(例如 Spring,jboss),默认使用完成要关闭连接,如果不想关闭可以增加如下配置:   

<transactionManager type="MANAGED"/>
<property name="closeConnection" value="false"></property>

 2.增删改查

我们只讲 mapper.xml 文件中的配置标签以及测试类,其他步骤可以参考上一节内容;

2.1插入 insert

  • 在mapper.xml 配置文件中增加 insert 标签
<!--插入一个职员-->
    <!--如果插入的是基本数据类型 或者String,则插入的值可以是任意的占位符
        如果插入的是对象,则插入的值必须是此对象的属性名称;
    -->
    <insert id="addEmployee" parameterType="com.entity.Employee">
INSERT INTO employee (emp_id, emp_name, sex, dept_id, manager, hire_date, job_id, salary, bonus, email) 
VALUES (#{empId},#{empName},#{sex},#{deptId},#{manager},#{date},#{jobId},#{salary},#{bonus},#{email})
    </insert>
  •  调用代码为:
 //插入一位新的职员信息
    public static void insertEmployee() throws Exception {
        Reader reader = Resources.getResourceAsReader( "mybatis-config.xml" );
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( reader );
        SqlSession sqlSession = sqlSessionFactory.openSession();
        String statement = "com.entity.employeeMapper." + "addEmployee";
        BigDecimal salary = new BigDecimal( "30000.00" );
        BigDecimal bonus = new BigDecimal( "30000.00" );
        // Date date = new Date( "2011-11-10" );
        Employee employee = new Employee( 1, "刘婵", "男", 1, 1, new Date(), 1, salary, bonus, "liushan@163.com" );
        int count = sqlSession.insert( statement, employee );
        sqlSession.commit();
        System.out.println( "成功的添加了" + count + "个职员" );
        sqlSession.close();
    }

2.2更新 update

  • 在mapper.xml文件中增加 update 标签
<update id="updateEmployeeByempId" parameterType="com.entity.Employee">
        update employee set emp_name=#{empName},salary=#{salary} where emp_id=#{empId}
    </update>
  • 调用代码为:

 

  //按照职员编号更新对应职员的信息
    public static void updateEmployee() throws Exception {
        Reader reader = Resources.getResourceAsReader( "mybatis-config.xml" );
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( reader );
        SqlSession sqlSession = sqlSessionFactory.openSession();
        String statement = "com.entity.employeeMapper." + "updateEmployeeByempId";
        //新建职员对象
        Employee employee = new Employee();
        BigDecimal salary = new BigDecimal( "500000.00" );
        //指定修改的职员编号
        employee.setEmpId( 1 );
        employee.setEmpName( "刘禅老爸" );
        employee.setSalary( salary );
        //指定修改的内容
        int count = sqlSession.update( statement, employee );
        //提交事务
        sqlSession.commit();
        System.out.println( "更新第" + count + "号员工成功" );
        sqlSession.close();
    }

2.3 删除 delete

  • 在 mapper.xml 文件中增加 delete 标签
    <delete id="deleteEmployeeByempId" parameterType="int" >
        delete from employee where emp_id=#{empId}
    </delete>
  • 调用代码为:
   //按照指定职员编号查询删除职员
    public static void deleteEmployee() throws Exception {
        Reader reader = Resources.getResourceAsReader( "mybatis-config.xml" );
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( reader );
        SqlSession sqlSession = sqlSessionFactory.openSession();
        String statement = "com.entity.employeeMapper." + "deleteEmployeeByempId";
        int count = sqlSession.delete( statement, 1 );
        //执行完删除要提交事务
        sqlSession.commit();
        System.out.println( "成功删除了" + count + "位职员的信息" );
        sqlSession.close();
    }

2.4查询全部 select

  • 在 mapper.xml文件中增加 select 标签,注意查询结果类型  resultType 无论是一个职员或者是多个职员,都应该是实体类,不存在 list;
 <select id="selectEmployeeAll" resultType="com.entity.Employee">
        select * from employee
    </select>
  •  调用代码为:
  public static void queryAllEmployee() throws Exception {
        Reader reader = Resources.getResourceAsReader( "mybatis-config.xml" );
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build( reader );
        SqlSession sqlSession = sqlSessionFactory.openSession();
        String statement = "com.entity.employeeMapper." + "selectEmployeeAll";
        List<Employee> employees = sqlSession.selectList( statement );
        System.out.println( employees );
        sqlSession.close();
    }

 2.5总结

需要注意以下几点内容:

  • 如果执行  delete、update、insert 操作,且 mybatis-config.xml 中配置的事务管理为 JDBC 时【<transactionManager type="JDBC"/>】,必须进行事务提交操作;即调用 SqlSession 的 commit()方法
  • 按照条件进行更新操作时,必须先通过  setter 方法确定出待修改对象,然后执行 sql 语句;