mybatis3 简单入门

官网文档:http://mybatis.github.io/mybatis-3/zh/index.html

源码:https://github.com/mybatis/mybatis-3

maven依赖:


            org.mybatis
            mybatis
            3.2.6

不管使用哪种持久层框架都先得有POJO和DAO

package me.poplaris.mybatis.bean;

/**
 * User: poplar
 * Date: 14-7-4 下午5:56
 */
public class User {
  private int id;
  private String name;

  public int getId() {
    return id;
  }

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

  public String getName() {
    return name;
  }

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

package me.poplaris.mybatis.dao;

import me.poplaris.mybatis.bean.User;

/**
 * User: poplar
 * Date: 14-7-4 下午5:59
 */
public interface UserDao {
  public User getUserId(int id);
}

建立好POJO和DAO后我们开始使用MyBatis

每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。 SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得,我们先介绍使用XML来构建

  @Test
  public void buildUseXml() throws IOException {
//    String resource = "org/mybatis/example/mybatis-config.xml";
    String resource = "mybatis-config.xml";
    //从 XML 中构建 SqlSessionFactory
    Reader reader = Resources.getResourceAsReader(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    //从 SqlSessionFactory 中获取 SqlSession
    SqlSession session = sqlSessionFactory.openSession();
    try {
      User user = session.selectOne("me.poplaris.mybatis.dao.UserDao.getUserId",1);
    } finally {
      session.close();
    }
  }
一个简单的XML配置文件最主要的是配置 数据源和事务管理器




    
        
            
            
                
                
                
                
            
        
    

有时候你可能想从properties来读取数据源配置,而不是写死在XML中。在mybatis-config中添加properties配置

config.properties文件如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true
username=root
password=root

修改过后的mybatis-config:




    

    
        
            
            
                
                
                
                
            
        
    

执行buildUseXml测试,出现异常

java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for me.poplaris.mybatis.dao.UserDao.getUserId
这是因为Mapped中没有实现UserDao,在 mybatis-config.xml中添加POJO别名和mappers 配置




    

    
        
    

    
        
            
            
                
                
                
                
            
        
    

    
        
    

并实现UserDao,新增XML配置文件User.xml





    
User.xml中mapper的namespace对应我们定义的DAO接口类UserDao,id为getUserId的select操作对应UserDao里的getUserId(int id)方法

再次执行buildUseXml测试,打印出了正常数据,一个简单的使用XML配置来读取数据成功实现。

buildUseXml

session.selectOne("me.poplaris.mybatis.dao.UserDao.getUserId",1);
因为我们在mapper中已经配置了这个namespace,所以这行代码有更简单安全的方式来代替

UserDao userDao = session.getMapper(UserDao.class);
User user = userDao.getUserId(1);
所以整个 buildUseXml测试变成了这样:

  @Test
  public void buildUseXml() throws IOException {
//    String resource = "org/mybatis/example/mybatis-config.xml";
    String resource = "mybatis-config.xml";
    //从 XML 中构建 SqlSessionFactory
    Reader reader = Resources.getResourceAsReader(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    //从 SqlSessionFactory 中获取 SqlSession
    SqlSession session = sqlSessionFactory.openSession();
    try {
//      User user = session.selectOne("me.poplaris.mybatis.dao.UserDao.getUserId",1);
      UserDao userDao = session.getMapper(UserDao.class);
      User user = userDao.getUserId(1);
      System.out.println(user);
    } finally {
      session.close();
    }
  }

使用XML配置实现mybatis操作已经简单的介绍完毕,更多详细的XML配置,动态SQL等可以参看官方文档

下面介绍不依赖XML配置来实现mybatis操作,下面的测试方法是使用JAVA程序来创建一个简单的配置实例

  @Test
  public void buildUseAnno(){
    String url = "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true";
    String userName = "root";
    String password = "root";
    //数据源
    DataSource dataSource = new MyDefaultDataSource(url,userName,password);
    //事务工厂
    TransactionFactory transactionFactory = new JdbcTransactionFactory();
    Environment environment = new Environment("development", transactionFactory, dataSource);
    Configuration configuration = new Configuration(environment);
    //绑定DAO mapper
    configuration.addMapper(UserDaoWithAnno.class);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
    SqlSession session = sqlSessionFactory.openSession();
    try {
      UserDaoWithAnno userDao = session.getMapper(UserDaoWithAnno.class);
      User user = userDao.getUserId(1);
      System.out.println(user);
      List userList = userDao.getUsers();
      System.out.println(userList);
    } finally {
      session.close();
    }
  }
首先需要自己实现DataSource,MyDefaultDataSource核心的代码片段如下:

  @Override
  public Connection getConnection(String username, String password) throws SQLException {
    return DriverManager.getConnection(url,username,password);
  }

运行buildUseAnno测试,出现异常

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): me.poplaris.mybatis.dao.UserDaoWithAnno.getUserId
这是因为mapper绑定未完成,我们需要对具体的SQL操作做绑定

使用这 种方式配置主要是添加映射类。

configuration.addMapper(UserDaoWithAnno.class);

映射类是 Java 类,这些类包含 SQL 映射语句的注解从而避免了XML文件的依赖

package me.poplaris.mybatis.dao;

import me.poplaris.mybatis.bean.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * User: poplar
 * Date: 14-7-4 下午5:59
 */
public interface UserDaoWithAnno {

  @Select("select * from user where id= #{id}")
  public User getUserId(int id);

  @Select("select * from user")
  public List getUsers();
}
使用Select注解完成注册mapper,再次执行 buildUseAnno测试,成功。

OK,简单的使用注解方式来完成mybatis操作也已经介绍完毕,更多的注解方案请参看官方文档,实例代码请点击这里












你可能感兴趣的:(mybatis,SQL)