前身 iBATIS,2010 年遷移至 Google Code 並更名。支持 SQL、存儲過程、高級映射,消除手動 JDBC 代碼,通過 XML 或註解將 POJO 映射至數據庫記錄。
mybatis-3.4.1.jarsqljdbc4.jar for SQL Server)conf.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="userMapper.xml"/>
</mappers>
</configuration>
jdbc.propertiesdriver=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver://127.0.0.1;databaseName=test username=sa password=123456
userMapper.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hw.com.ser.IUser">
<select id="queryUsers" resultType="hw.com.pojo.User">
select * from MS_User
</select>
<select id="queryUserById" resultType="hw.com.pojo.User" parameterType="int">
Select * From Ms_User Where id=#{id}
</select>
</mapper>
關鍵:namespace 必須等於映射接口全限定名。
IUser.javapublic interface IUser {
List<User> queryUsers();
User queryUserById(int id);
}
User.java標準 JavaBean,包含所有表字段及 getter/setter/toString。
SqlSessionFactoryUtilpublic class SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory;
private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
public static SqlSessionFactory initSqlSessionFactory() {
String resource = "conf.xml";
try (InputStream is = Resources.getResourceAsStream(resource)) {
synchronized (CLASS_LOCK) {
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}
}
} catch (IOException e) { throw new RuntimeException(e); }
return sqlSessionFactory;
}
public static SqlSession openSqlSession() {
if (sqlSessionFactory == null) initSqlSessionFactory();
return sqlSessionFactory.openSession();
}
}
public class UserTest {
public static void main(String[] args) {
try (SqlSession session = SqlSessionFactoryUtil.openSqlSession()) {
IUser mapper = session.getMapper(IUser.class);
List<User> users = mapper.queryUsers();
users.forEach(System.out::println);
}
}
}
namespace 與接口路徑不一致 → BindingException<resultMap> 顯式映射