MyBatis 教程

👉 所有文章
文章列表 准备工作 回顾 JDBC 数据准备 查找id为1的用户信息 自定义连接池 不用MyBatis配置文件 查询密码为123的所有用户 如果Bean中成员变量和表中字段命名不一致 更多查询用户的方式 对查询结果排序 日志 添加、删除、修改数据 事务 动态SQL 一对一和一对多的实现 一对一和一对多的延迟加载 多对多的实现 分页查询 把SQL写在注解中 自动生成Mapper代码和映射XML mybatis generator 生成 select for update mybatis generator 支持数据版本号

MyBaits: 不用MyBatis配置文件


本节示例代码在 mybatis-demo-003

前面的示例中用到了 mybatis-config.xmlmybatis-config-dbcp.xml 这种配置文件。可以不用吗?

可以不用,我们见下面的示例。

项目结构:

示例

在 datasource 包中创建 MyBatisDataSource 类,该类用于获取连接池,内容如下:

package datasource;

import org.apache.ibatis.datasource.pooled.PooledDataSource;

import javax.sql.DataSource;

public class MyBatisDataSource {

    public static DataSource get() {
        PooledDataSource dataSource = new PooledDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/blog_db?useUnicode=true&characterEncoding=utf8");
        dataSource.setDriver("com.mysql.jdbc.Driver");
        dataSource.setPoolMaximumActiveConnections(100);
        dataSource.setPoolMaximumIdleConnections(8);
        return dataSource;
    }

}

在 Main 类中编写业务代码:

@Test
public void test_01() {
    DataSource dataSource = MyBatisDataSource.get();
    TransactionFactory transactionFactory = new JdbcTransactionFactory();
    Environment environment = new Environment("development", transactionFactory, dataSource);
    Configuration configuration = new Configuration(environment);
    configuration.addMapper(UserMapper.class);
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(configuration);

    SqlSession sqlSession = sessionFactory.openSession();
    try {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.findById(1L);
        log.info("{}", user);
    } finally {
        sqlSession.close();
    }
}

很简单,就是将 xml 配置用代码表达了一遍。

注意,UserMapper.xml 映射文件所在目录必须和对应的 UserMapper 接口在相同位置的目录下,且要同名。 比如 UserMapper 接口在 java 目录的 mapper 包下,UserMapper.xml 就必须在 resources 目录下的mapper 目录下。

执行后输出:

 INFO [main] - User(id=1, name=letian, email=letian@111.com, password=123)

其他连接池

上面我们用到了 MyBatis 自带的连接池。我们也可以用其他的连接池。例如:

DBCP连接池:

build.gradle 引入依赖:

compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.5.0'

datasource 包下新增 DBCPDataSource 类:

package datasource;

import org.apache.commons.dbcp2.BasicDataSource;

import javax.sql.DataSource;

public class DBCPDataSource {

    public static DataSource get() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/blog_db?useUnicode=true&characterEncoding=utf8");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setInitialSize(6);
        dataSource.setMaxIdle(8);
        dataSource.setMinIdle(6);
        return dataSource;
    }

}

编写测试代码:

@Test
public void test_02() {
    DataSource dataSource = DBCPDataSource.get();
    TransactionFactory transactionFactory = new JdbcTransactionFactory();
    Environment environment = new Environment("development", transactionFactory, dataSource);
    Configuration configuration = new Configuration(environment);
    configuration.addMapper(UserMapper.class);
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(configuration);

    SqlSession sqlSession = sessionFactory.openSession();
    try {
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.findById(1L);
        log.info("{}", user);
    } finally {
        sqlSession.close();
    }
}

C3P0连接池:

build.gradle 引入依赖:

compile group: 'com.mchange', name: 'c3p0', version: '0.9.5.2'

datasource 包下新增 C3P0DataSource 类:

package datasource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

public class C3P0DataSource {

    public static DataSource get() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser("root");
        dataSource.setPassword("123456");
        dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/blog_db?useUnicode=true&characterEncoding=utf8");
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setInitialPoolSize(6);
        dataSource.setMaxPoolSize(100);
        return dataSource;
    }
}

Tomcat JDBC 连接池:

build.gradle 引入依赖:

compile group: 'org.apache.tomcat', name: 'tomcat-jdbc', version: '9.0.12'

datasource 包下新增 C3P0DataSource 类:

package datasource;

import org.apache.commons.dbcp2.BasicDataSource;

import javax.sql.DataSource;

public class TomcatDataSource {

    public static DataSource get() {
        org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/blog_db?useUnicode=true&characterEncoding=utf8");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setInitialSize(6);
        dataSource.setMaxIdle(8);
        dataSource.setMinIdle(6);
        return dataSource;
    }

}

( 本文完 )

文章目录