zoukankan      html  css  js  c++  java
  • Mybatis框架学习_2_增删改查的简单实现

    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 语句;

     

  • 相关阅读:
    程序猿财务自由之路·规划篇
    如何教女友学编程?
    粤港澳大湾区9城最新购房政策一览
    一个漂亮妹子的美团面试经历,4轮2小时,成功拿到Offer
    在北京的互联网公司工作多少年可以买房?
    这六个 MySQL 死锁案例,能让你理解死锁的原因!
    阿里双11:「线上全链路压测」完整经验分享
    千亿级公司低代码平台的测试体系介绍
    Weblogic
    30分钟?不需要,轻松读懂IL
  • 原文地址:https://www.cnblogs.com/haibaowang/p/11856870.html
Copyright © 2011-2022 走看看