MyBatis数据库连接配置示例

本文详细介绍了MyBatis框架及其与Spring框架的整合方法,包括数据库连接配置、依赖管理、Mapper文件设置、实体类定义、工具类创建及单元测试等步骤。

一、Mybatis 和 Spring Mybatis 的关系

1、什么是 MyBatis?

​ MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2、什么是 MyBatis-Spring?

​ MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

开始学习时,要注意这两者的关系和区别:

3、MyBatis数据库连接配置示例

1)、POM依赖
    <properties>
        <mysql.version>5.1.38</mysql.version>
        <mybatis.version>3.5.2</mybatis.version>
        <junit.version>4.12</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
    </dependencies>

    <build>
        <!--资源文件管理-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
    </build>
2)、数据连接配置
<!--文件:mybatis-config.xml-->
<configuration>
    <properties resource="./db.properties">
        <property name="jdbc-driver" value=""/>
        <property name="jdbc-url" value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
    </properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc-driver}"/>
                <property name="url" value="${jdbc-url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/tonghua/dao/UserInfoMapper.xml"/>
    </mappers>
</configuration>
#文件:db.properties
jdbc-driver=com.mysql.jdbc.Driver
jdbc-url=jdbc:mysql://localhost/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=usertest
password=123456
3)、Mapper文件:

UserInfoMapper.java

package com.tonghua.dao;

import com.tonghua.pojo.UserInfo;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserInfoMapper {

    List<UserInfo> selectUserList();
}

UserInfoMapper.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">
<mapper namespace="com.tonghua.dao.UserInfoMapper">
    <select id="selectUserList" resultType="com.tonghua.pojo.UserInfo">
    select * from userinfo;
  </select>
</mapper>
4)、实体类
package com.tonghua.pojo;

public class UserInfo {

    private int id;
    private String username;
    private String gender;

    public UserInfo(int id, String username, String gender) {
        this.id = id;
        this.username = username;
        this.gender = gender;
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
            "id=" + id +
            ", username='" + username + '\'' +
            ", gender='" + gender + '\'' +
            '}';
    }
}
5)、工具类(创建SqlSession)
package com.tonghua.utils;

import java.io.IOException;
import java.io.InputStream;
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;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}
6)、单元测试

UserInfoDaoTest.java

package com.tonghua.dao;

import com.tonghua.pojo.UserInfo;
import com.tonghua.utils.MybatisUtils;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class UserInfoDaoTest {

    @Test
    public void test() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class);
        List<UserInfo> userList = userInfoMapper.selectUserList();

        for (UserInfo userInfo : userList) {
            System.out.println(userInfo);
        }

        sqlSession.close();
    }

}
7)、目录结构图

在这里插入图片描述
这是mybatis的一种连接方式,测试通过

### MyBatis 数据库连接配置教程与示例 #### 1. 添加依赖 在使用 MyBatis 进行数据库操作前,需先引入必要的 Maven 或 Gradle 依赖。以下是基于 Spring Boot 的 `pom.xml` 配置文件中的依赖项: ```xml <dependencies> <!-- MyBatis-Spring-Boot-Starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.0</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` 以上代码展示了如何通过 Maven 引入 MyBatisMySQL 的驱动程序[^1]。 --- #### 2. 配置数据源 Spring Boot 提供了一种简单的方式来配置数据源。可以在项目的 `application.properties` 文件中完成如下设置: ```properties # 数据库连接信息 spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # MyBatis SQL 执行日志打印 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl logging.level.com.example.demo=debug ``` 上述配置包含了数据库 URL、用户名、密码以及驱动类名的信息。同时启用了 MyBatis 日志功能以便调试 SQL 语句[^3]。 --- #### 3. 数据库连接配置 为了提高性能并减少频繁创建和销毁数据库连接的成本,通常会使用数据库连接池技术。以下是一些常见的连接池实现及其配置方式: ##### HikariCP (默认) HikariCP 是 Spring Boot 默认使用的连接池。可以通过修改 `application.properties` 来调整其参数: ```properties spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.idle-timeout=300000 spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.connection-timeout=20000 ``` 这些属性分别控制最大连接数、最小空闲连接数、空闲超时时间等[^2]。 ##### Druid Druid 是另一种流行的 Java 数据库连接池解决方案。如果希望切换到 Druid,则需要额外添加依赖并在配置文件中启用它: ```xml <!-- Druid Starter --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency> ``` 对应的配置如下所示: ```properties spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.initial-size=5 spring.datasource.druid.min-idle=5 spring.datasource.druid.max-active=20 spring.datasource.druid.max-wait=60000 ``` --- #### 4. 使用 MyBatis 编写 Mapper 接口 定义一个简单的 Mapper 接口用于访问数据库表。例如,假设有一个名为 `User` 的实体类和对应的数据表结构: ```java public class User { private Long id; private String name; private Integer age; // Getters and Setters... } ``` Mapper 接口可以这样设计: ```java @Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User findById(Long id); @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") int insert(User user); @Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}") int update(User user); @Delete("DELETE FROM user WHERE id=#{id}") int deleteById(Long id); } ``` 此接口利用了 MyBatis 注解来映射 SQL 查询语句[^4]。 --- #### 5. 测试运行 最后,在测试类或控制器中调用 Mapper 方法验证功能是否正常工作。例如: ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) { User user = userMapper.findById(id); return ResponseEntity.ok(user); } } ``` --- ### 总结 本节介绍了 MyBatis 数据库连接的基础配置方法,包括添加依赖、配置数据源、优化连接池参数以及编写 Mapper 接口等内容。通过合理配置和实践,能够显著提升应用的开发效率和运行性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值