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"/><!–数据库 URL 地址–>--> <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 语句;