官网文档: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);
}
@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
执行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操作,下面的测试方法是使用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操作也已经介绍完毕,更多的注解方案请参看官方文档,实例代码请点击这里