您的当前位置:首页正文

2.1 Mybatis框架 --配置Mybatis 并利用SqlSessionFactory、SqlSession进行数据的增删改查

2024-11-07 来源:个人技术集锦

1.关于Mybatis:

Mybatis框架在Ibatis基础上发展而来,支持SQL查询、存储过程、支持映射的持久层(模型层)ORM框架;

Mybatis与Hibernate区别:

Hibernate是全表映射框架,只需要定义对象与数据库表的映射关系,就可以通过Hibernate操作数据库,不需要掌握SQL,通过调用Hibernate的封装方法,Hibernate会自动生成SQL语句,并调用JDBC接口来执行,就开发效率而言,要比Mybatis要好一些;但是对于多表关联,支持较差,更新数据时,也会发送一张表的全部字段,不支持存储过程,不能通过SQL调优来优化系统性能,因为所有SQL都是有Hibernate框架根据自己API生成的

Mybatis是一个半自动的ORM框架,需要手动匹配对象与数据库表的映射,需要开发者手动编写SQL,所有可以通过SQL调优来优化系统性能,对于一些复杂对性能要求高的来说,Mybatis框架更加适合。

2.Mybatis的配置:

(1)首先将Mybatis核心jar包,及系统所用的数据库驱动jar包(以mysql数据库为例) 添加到pom.xml<dependencies>节点下:

<?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>
    <!--1.配置环境 ,默认的环境id为mysql-->
    <environments default="mysql">
        <!--1.2.配置id为mysql的数据库环境 -->
        <environment id="mysql">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC" />
            <!--数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <!-"3306"端口是mysql的默认端口,具体根据数据库设置的端口更改,数据库名同理-->
                <property name="url"
                          value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="user" />
                <property name="password" value="******" />
            </dataSource>
        </environment>
    </environments>
    <!--2.配置Mapper的位置 -->
    <!--此处配置对象与数据库表的映射文件,可以在mappers节点中,配置多个mapper映射文件-->
    <mappers>
        <!--此处指向项目资源文件目录下的 com.ssm.mapper 目录下的 CustomerMapper.xml 文件-->
        <mapper resource="com.ssm.mapper/CustomerMapper.xml" />
    </mappers>
</configuration>

(3)创建对象与数据库表的映射文件 CustomerMapper.xml 也就是在(2)指向的映射文件 :

<?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">
<!-- namespace表示命名空间 -->
<mapper namespace="resources.com.ssm.mapper.CustomerMapper">
    <!--根据客户编号获取客户信息 -->
    <select id="findCustomerById" parameterType="Integer"
            resultType="com.ssm.po.Customer">
        select * from t_customer where id = #{id}
    </select>

    <!--根据客户名模糊查询客户信息列表-->
    <select id="findCustomerByName" parameterType="String"
            resultType="com.ssm.po.Customer">
        <!-- select * from t_customer where username like '%${value}%' -->
        select * from t_customer where username like concat('%',#{value},'%')
    </select>

    <!-- 添加客户信息 -->
    <insert id="addCustomer" parameterType="com.ssm.po.Customer">
        insert into t_customer(username,jobs,phone)
        values(#{username},#{jobs},#{phone})
    </insert>

    <!-- 更新客户信息 -->
    <update id="updateCustomer" parameterType="com.ssm.po.Customer">
        update t_customer set
                              username=#{username},jobs=#{jobs},phone=#{phone}
        where id=#{id}
    </update>

    <!-- 删除客户信息 -->
    <delete id="deleteCustomer" parameterType="Integer">
        delete from t_customer where id=#{id}
    </delete>

</mapper>
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.ssm=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

并在pom.xml文件中,把log4j及其相关依赖引入进来:

3.Mybatis在业务中的使用:

创建单元测试类 mybatisTest :

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;   // 单元测试类 Junit API提供的
import com.ssm.po.Customer;    // 手动创建的 数据库表映射的对象 包含 属性的setter getter 方法

public class mybatisTest {
    @Test
    public void findCustomerByIdTest() throws Exception {
        // 1、读取配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 2、根据配置文件构建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3、通过SqlSessionFactory创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 4、SqlSession执行映射文件中定义的SQL,并返回映射结果
        Customer customer = sqlSession.selectOne("resources.com.ssm.mapper"+ ".CustomerMapper.findCustomerById", 1);
        // 打印输出结果
        System.out.println(customer.toString());
        // 5、关闭SqlSession
        sqlSession.close();
    }
}

4. 一个关于用户增删改查的demo:

显示全文