Mybatis初级---浅析配置文件、对数据库进行简单的增删改查

本文详细解析了Mybatis的全局配置文件,包括environments、transactionManager、dataSource和mappers部分,阐述了数据源类型和事务管理。此外,介绍了Mapper配置文件的使用,如select、insert、update和delete标签,以及如何实现对数据库的增删改查操作,包括全查和模糊查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、全局配置文件

1.1 environments

定义开发环境,可以写很多个环境,但每一个SqlSessionFactory 实例只能选择一种环境,
environments下会有很多个environment标签用于配置环境,比如说一个名叫p1的环境:
在这里插入图片描述

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

1.2 transactionManager

事务管理器,分两类

  • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。

1.3 dataSource

数据源,使用标准的JDBC 数据源接口来配置 JDBC 连接对象的资源。

大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。

有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

  • UNPOOLED– 没有使用连接池,这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
  • POOLED– 使用连接池,这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
  • JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。

1.4 mappers

映射器,用于注册映射,或者说给个路径去找XxxMapper.xml配置文件

我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。


二、XxxMapper.xml配置文件

XxxMapper.xml对应的是XxxMapper接口
比如我这里PersonMapper接口对应的是PersonMapper.xml配置文件

2.1 mapper

mapper是根标签,里面有一个很重要的属性namepace

namespace:和哪个接口有映射关系

在这里插入图片描述

2.2 select、insert、update、delete

这些标签其实分别对应的就是数据库的查、增、改、删,里面最常用的属性有:

  • id:对应接口的方法名
  • parameterType:对应方法参数类型
  • resultType/resultMap:对应方法返回值类型
  • useGeneratedKeys:是否获取主键值
  • keyColumn:表中哪个字段为主键
  • keyProperty:获取得的主键值存到当前对象中的哪个属性

XxxMapper.xml和dao(即Mapper)接口的文件名一样;
XxxMapper.xml的命名空间namespace等于dao接口的全限定名(类路径)
XxxMapper.xml的id等于接口的方法名
XxxMapper.xml的parameterType等于方法的参数类型
XxxMapper.xml的resultType/resultMap等于方法的返回值类型

更多详细的对于配置文件的解析,可以前往mybatis中文文档:(https://mybatis.org/mybatis-3/zh/configuration.html#environments)


三、对数据库的增删改查

使用mybatis查询数据库非常的简单,看一下目录结构你就明白了
在这里插入图片描述

全局配置文件mybatis-config.xml

<?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>
    <!-- environments  多环境配置
         environment   配置数据源
         transactionManager     事务管理器
         dataSource     数据源
     -->
    <environments default="p1">
        <environment id="p1">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 注册映射  -->
    <mappers>
        <mapper resource="PersonMapper.xml"/>
    </mappers>
</configuration>

Person实体类

package entity;

public class Person {
    private Integer id;
    private String name;
    private Integer age;

    public Person() {
    }

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

PersonMapper接口

package mapper;

import entity.Person;
import java.util.List;

public interface PersonMapper {

    //增
    public int addPerson(Person person);

    //改
    public int updatePerson(Person person);

    //删
    public int delPerson(int id);

    //查询所有数据
    public List<Person> getPerson();

    //模糊查询
    public List<Person> listForName(String name);


}

PersonMapper.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="mapper.PersonMapper">
    <!--
        select标签中的语句 需要和接口中哪个方法有映射关系
        id         : 接口中的方法名
        resultType:  方法的返回类型
     -->

    <!-- 查询所有 -->
    <select id="getPerson" resultType="entity.Person" >
        select * from person
    </select>

    <!-- 添加 -->
    <insert id="addPerson">
        insert into person values (null,#{name},#{age})
    </insert>

    <!-- 修改 -->
    <update id="updatePerson">
        update Person set name=#{name} ,age=#{age} where id=#{id}
    </update>

    <!-- 删除 -->
    <delete id="delPerson">
        deete from person where id=#{id}
    </delete>


    <!-- 模糊查询 -->
    <select id="listForName" resultType="entity.Person" parameterType="">
        select * from person where name like concat('%',#{name},'%')
    </select>

</mapper>

1、增

在接口添加方法

//增
    public int addPerson(Person person);

在配置文件PersonMapper中<Mapper>标签下添加sql语句映射

<!-- 添加 -->
    <insert id="addPerson">
        insert into person values (null,#{name},#{age})
    </insert>

2、改

在接口添加方法

 //改
    public int updatePerson(Person person);

在配置文件PersonMapper中<Mapper>标签下添加sql语句映射

<!-- 修改 -->
    <update id="updatePerson">
        update Person set name=#{name} ,age=#{age} where id=#{id}
    </update>

3、删

在接口添加方法

//删
    public int delPerson(int id);

在配置文件PersonMapper中<Mapper>标签下添加sql语句映射

<!-- 删除 -->
    <delete id="delPerson">
        deete from person where id=#{id}
    </delete>

4、查

4.1全查

在接口添加方法

//查询所有数据
    public List<Person> getPerson();

在配置文件PersonMapper中<Mapper>标签下添加sql语句映射

<!-- 查询所有 -->
    <select id="getPerson" resultType="entity.Person" >
        select * from person
    </select>

4.2模糊查询

在接口添加方法

//模糊查询
    public List<Person> listForName(String name);

在配置文件PersonMapper中<Mapper>标签下添加sql语句映射

<!-- 模糊查询 -->
    <select id="listForName" resultType="entity.Person" parameterType="">
        select * from person where name like concat('%',#{name},'%')
    </select>
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lichaohua!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值