在入门指南中找不到要导入的一些MyBatis类

时间:2014-03-19 20:24:46

标签: java mybatis

我是初学者,并且以前没有使用过MyBatis,并决定开始使用官方Github网站上的MyBatis入门指南:http://mybatis.github.io/mybatis-3/getting-started.html

然而,我在早期遇到了一些麻烦,我希望有人可以帮助我这么简单。具体来说,我试图在标题"构建没有XML"的SqlSessionFactory的情况下做例子。示例如下:

  

如果您更喜欢直接从Java构建配置   MyBatis提供了一个,而不是XML,或者创建自己的配置构建器   完整的配置类,提供所有相同的功能   配置选项作为XML文件。

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

然后我查看了JavaDoc中最新的mybatis-3.2.5版本,但无法找到我正在寻找的一些类,比如BlogDataSourceFactory和BlogMapper。此外,当我希望它在org.mybatis下时,一切都在org.apache.ibatis下(显然ibatis是由Apache维护的旧项目名称)。我还检查了预发布的mybatis-3.2.6-SNAPSHOT,但是它有相同的包结构,我仍然找不到那些丢失的类。

很抱歉,如果这是一个非常愚蠢的问题/我错过了一些显而易见的事情,我也没有经验丰富的Java开发人员,我感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我以为我会找到一些BlogDataSourceFactory.getBlogDataSource()的示例代码,但没有。但我设法创建了自己的实现:

package com.zetcode.jconfig;

import org.apache.ibatis.annotations.Select;

public interface MyMapper {

    @Select("SELECT COUNT(*) FROM MyBooks")
    public int getNumberOfBooks();
}

这是一个MyMapper类,它有一个SELECT语句。

package com.zetcode.jconfig;

import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.DataSourceFactory;
import org.apache.ibatis.datasource.pooled.PooledDataSource;

public class MyDataSourceFactory implements DataSourceFactory {

    private Properties prop;

    @Override
    public DataSource getDataSource() {

        PooledDataSource ds = new PooledDataSource();

        ds.setDriver(prop.getProperty("driver"));
        ds.setUrl(prop.getProperty("url"));
        ds.setUsername(prop.getProperty("user"));
        ds.setPassword(prop.getProperty("password"));

        return ds;
    }

    @Override
    public void setProperties(Properties prprts) {

        prop = prprts;
    }
}

MyDataSourceFactory创建PooledDataSource。它实现了MyBatis' DataSourceFactory界面。

package com.zetcode.client;

import com.zetcode.jconfig.MyDataSourceFactory;
import com.zetcode.jconfig.MyMapper;
import java.io.IOException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

public class MyBatisJavaConfClient {

    private static SqlSessionFactory sesFact = null;

    public static void main(String[] args) throws IOException {

        Properties prop = new Properties();
        prop.setProperty("driver", "com.mysql.jdbc.Driver");
        prop.setProperty("url", "jdbc:mysql://localhost:3306/testdb");
        prop.setProperty("user", "testuser");
        prop.setProperty("password", "test623");

        MyDataSourceFactory mdsf = new MyDataSourceFactory();
        mdsf.setProperties(prop);
        DataSource ds = mdsf.getDataSource();

        TransactionFactory trFact = new JdbcTransactionFactory();
        Environment environment = new Environment("development", trFact, ds);
        Configuration config = new Configuration(environment);
        config.addMapper(MyMapper.class);

        sesFact = new SqlSessionFactoryBuilder().build(config);

        try (SqlSession session = sesFact.openSession()) {

            int numOfBooks = session.selectOne("getNumberOfBooks");
            System.out.format("There are %d books", numOfBooks);
        }
    }
}

MyBatisJavaConfClient包含替换XML配置并构建执行SQL代码的会话的代码。 您可以在我的MyBatis tutorial中找到有关MyBatis的更多信息。

答案 1 :(得分:1)

好吧,我不确定是否应该删除这个问题,但基本上来自评论中maba的回答似乎是正确的。我误解了文档意味着BlogMapper是库中提供的实现示例,但似乎并非如此,并且它的实现由读者完成。