2.2 Mybatis的一些核心配置 Mybatis核心配置的properties、typeAliases、mappers、environments等节点 映射文件的sql include

1.Mybatis框架中设计两个主要对象 SqlSessionFactorySqlSession.

**SqlSessionFactory:**是单个数据库映射关系经过编译后的内存镜像,主要用来创建SqlSession。

SqlSessionFactory一旦被创建,整个应用执行期间都会存在,若多次创建同一个数据库的SqlSessionFactory,有可能增加数据库不必要的资源消耗,所以一般,通常每个数据库都只对应一个SqlSessionFactory,在创建SqlSessionFactory时,一般使用单例模式

SqlSession是应用程序与持久层(模型层)之间执行交互操作的一个单线程对象,主要用来执行 持久化操作。
使用SqlSession对象后,要及时关闭,一般地,放在finally快中关闭。

2.Mybatis 核心配置文件 与 映射文件 常用XML节点总结:

核心配置文件(mybatis-config.xml):
在这里插入图片描述
映射文件:
在这里插入图片描述

3.demo:(具体每个文件在后面)

在这里插入图片描述

4.附件

其中,mybatis-config.xml 是Mybatis框架 的配置文件(一般放在项目默认资源目录下) :

<?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>
    <properties resource="db.properties" />
    <!-- 定义别名 -->
    <typeAliases>
        <!-- <typeAlias alias="user" type="com.ssm.po.User" /> -->
        <package name="com.ssm.po" />
    </typeAliases>

    <!-- 配置自定义工厂 -->
    <objectFactory type="com.ssm.factory.MyObjectFactory">
        <property name="name" value="MyObjectFactory"/>
    </objectFactory>

    <!--1.配置环境 ,默认的环境id为mysql -->
    <environments default="mysql">
        <!--1.2.配置id为mysql的数据库环境 -->
        <environment id="mysql">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC" />
            <!--数据库连接池 -->
            <dataSource type="POOLED">
                <!-- 数据库驱动 -->
                <property name="driver" value="${jdbc.driver}" />
                <!-- 连接数据库的url -->
                <property name="url" value="${jdbc.url}" />
                <!-- 连接数据库的用户名 -->
                <property name="username" value="${jdbc.username}" />
                <!-- 连接数据库的密码 -->
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <!--2.配置Mapper的位置 -->
    <mappers>
        <mapper resource="com.ssm.mapper/CustomerMapper.xml" />
        <mapper resource="com.ssm.mapper/UserMapper.xml" />
    </mappers>
</configuration>

核心配置中,引入的db.properties(数据库配置信息):

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456

mybatis-config.xml 关联的映射文件 (CustomerMapper.xml、UserMapper.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">
<!-- 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>-->

    <!--定义表的前缀名 -->
    <sql id="tablename">
        ${prefix}customer
    </sql>
    <!--定义要查询的表 -->
    <sql id="someinclude">
        from
        <include refid="${include_target}" />
    </sql>
    <!--定义查询列 -->
    <sql id="customerColumns">
        id,username,jobs,phone
    </sql>
    <!--根据id查询客户信息 -->
    <select id="findCustomerById" parameterType="Integer"
            resultType="com.ssm.po.Customer">
        select
        <include refid="customerColumns"/>
        <include refid="someinclude">
            <property name="prefix" value="t_" />
            <property name="include_target" value="tablename" />
        </include>
        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>

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

</mapper>
<?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="resources.com.ssm.mapper.UserMapper">
    <resultMap type="com.ssm.po.User" id="resultMap">
        <id property="id" column="t_id"/>
        <result property="name" column="t_name"/>
        <result property="age" column="t_age"/>
    </resultMap>
    <select id="findAllUser" resultMap="resultMap">
        select * from t_user
    </select>
</mapper>

测试类(程序入口):

package com.ssm.test;

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

import com.ssm.po.User;
import com.ssm.utils.MybatisUtils;
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;
import com.ssm.po.Customer;
/**
 * 入门程序测试类
 */
public class MybatisTest {
    /**
     * 根据客户编号查询客户信息
     */
    @Test
    public void findCustomerByIdTest() throws Exception {
        // 通过工具类生成SqlSession对象
        SqlSession sqlSession= MybatisUtils.getSession();
       
        // 4、SqlSession执行映射文件中定义的SQL,并返回映射结果
        Customer customer = sqlSession.selectOne("resources.com.ssm.mapper"
                + ".CustomerMapper.findCustomerById", 1);
        // 打印输出结果
        System.out.println(customer.toString());
        // 5、关闭SqlSession
        sqlSession.close();
    }

    /**
     * 根据用户名称来模糊查询用户信息列表
     */
    @Test
    public void findCustomerByNameTest() throws Exception{
         // 通过工具类生成SqlSession对象
        SqlSession sqlSession= MybatisUtils.getSession();
        // 4、SqlSession执行映射文件中定义的SQL,并返回映射结果
        List<Customer> customers = sqlSession.selectList("resources.com.ssm.mapper"
                + ".CustomerMapper.findCustomerByName", "j");
        for (Customer customer : customers) {
            //打印输出结果集
            System.out.println(customer);
        }
        // 5、关闭SqlSession
        sqlSession.close();
    }
    /**
     * 3.添加客户
     */
    @Test
    public void addCustomerTest(){
        // 获取SqlSession
        SqlSession sqlSession = MybatisUtils.getSession();
        Customer customer = new Customer();
        customer.setUsername("rose");
        customer.setJobs("student");
        customer.setPhone("13333533092");
        // 使用主键自助增长的添加方法
        int rows = sqlSession.insert("resources.com.ssm.mapper"
                + ".CustomerMapper.addCustomer", customer);

        // 输出插入数据的主键id值
        System.out.println(customer.getId());
        if(rows > 0){
            System.out.println("您成功插入了"+rows+"条数据!");
        }else{
            System.out.println("执行插入操作失败!!!");
        }
        sqlSession.commit();
        sqlSession.close();
    }


    /**
     * 更新客户
     */
    @Test
    public void updateCustomerTest() throws Exception{
        // 通过工具类生成SqlSession对象
        SqlSession sqlSession= MybatisUtils.getSession();
        // 4、SqlSession执行更新操作
        // 4.1创建Customer对象,对对象中的数据进行模拟更新
        Customer customer = new Customer();
        customer.setId(4);
        customer.setUsername("rose");
        customer.setJobs("programmer");
        customer.setPhone("13311111111");
        // 4.2执行SqlSession的更新方法,返回的是SQL语句影响的行数
        int rows = sqlSession.update("resources.com.ssm.mapper"
                + ".CustomerMapper.updateCustomer", customer);
        // 4.3通过返回结果判断更新操作是否执行成功
        if(rows > 0){
            System.out.println("您成功修改了"+rows+"条数据!");
        }else{
            System.out.println("执行修改操作失败!!!");
        }
        // 4.4提交事务
        sqlSession.commit();
        // 5、关闭SqlSession
        sqlSession.close();
    }
    /**
     * 删除客户
     */
    @Test
    public void deleteCustomerTest() throws Exception{
        // 通过工具类生成SqlSession对象
        SqlSession sqlSession= MybatisUtils.getSession();
        // 4、SqlSession执行删除操作
        // 4.1执行SqlSession的删除方法,返回的是SQL语句影响的行数
        int rows = sqlSession.delete("resources.com.ssm.mapper"
                + ".CustomerMapper.deleteCustomer", 4);
        // 4.2通过返回结果判断删除操作是否执行成功
        if(rows > 0){
            System.out.println("您成功删除了"+rows+"条数据!");
        }else{
            System.out.println("执行删除操作失败!!!");
        }
        // 4.3提交事务
        sqlSession.commit();
        // 5、关闭SqlSession
        sqlSession.close();
    }

    @Test
    public void findAllUserTest() {
        // 获取SqlSession
        SqlSession sqlSession = MybatisUtils.getSession();
        // SqlSession执行映射文件中定义的SQL,并返回映射结果
        List<User> list = sqlSession.selectList("resources.com.ssm.mapper.UserMapper.findAllUser");
        for (User user : list) {
            System.out.println(user);
        }
        // 关闭SqlSession
        sqlSession.close();
    }
}

其中,涉及的获取SqlSession 实例的 工具类(一般为了简化开发,会使用工具类(将前边初始化SqlSessionFactory的部分封装为一个工具)来创建SqlSession):

package com.ssm.utils;

import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * 工具类
 */
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory = null;
    // 初始化SqlSessionFactory对象
    static {
        try {
            // 使用MyBatis提供的Resources类加载MyBatis的配置文件
            Reader reader =
                    Resources.getResourceAsReader("mybatis-config.xml");
            // 构建SqlSessionFactory工厂
            sqlSessionFactory =
                    new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 获取SqlSession对象的静态方法
    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}

写在最后,闲着没事看看体会一下

SqlSession 对象的一些方法(好了,写不动了,贴图吧 Orz…………):
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值