MyBatis示例
基本示例
- 环境准备
- jdk : 1.8.0
- MyEclipse
- MySQL
- MyBatis-3.4.6.jar
- 新建JavaWeb Project
- 命名:mybatis
- 新建source folder
- src/main/java
- src/main/resource
- 导入JAR包或添加POM.xml中添加依赖
MyBatis_config.xml(放置在src/main/resource包内)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTO Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/study/mapper/RoleMapper.xml"></mapper>
</mappers>
</configuration>
- src/main/resource 需选择source folder,或通过选择文件夹右键–>build path–>use as source folder,否则运营时会出现如下提示:
Could not find resource MyBatis_config.xml
source folder 相当于 build path 。eclipse中,在build path下的类可以被编译运行,在build path下的配置文件可以被类以相对路径直接读写
配置说明:
?useSSL=false 作用防止程序运行时提示:
MyBatis Mon Sep 10 23:27:09 CST 2018 WARN: Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option
mapper resource=”” 路径使用斜杆(正反斜杆均可),此处是URI路径,不可使用java中的路径表示方法,com.mybatis.study.mapper.RoleMapper.xml 表示,会提示,不方便排查问题
org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in
Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException: Content is not allowed in prolog.:org.ap
此处异常调试很久,完全被搜索的答案误导,报此处异常时还没有执行到Mapper.xml 文件中的SQL语句,所以错误和Mapper.xml无关,而是MyBatis_config.xml配置文件中路径配置错误,导致解析失败
Role.java
package com.mybatis.study.po;
import java.io.Serializable;
public class Role implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1471441474213999763L;
private Long id ;
private String roleName ;
private String note ;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
- RoleMapper.java
package com.mybatis.study.mapper;
import com.mybatis.study.po.Role;
public interface RoleMapper {
public Role getRole(Long id);
}
- RoleMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTO Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.study.mapper.RoleMapper">
<select id="getRole" parameterType="long" resultType="com.mybatis.study.po.Role">
select id,role_name as roleName,note from t_role where id = #{id}
</select>
</mapper>
- MyBatisUtil.java
package com.mybatis.study.util;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* 单例模式
*/
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory = null ;
private MyBatisUtil(){
}
public static SqlSessionFactory getSqlSessionFactory(){
InputStream inputStream = null ;
if(null == sqlSessionFactory){
String resource = "MyBatis_config.xml";
try {
// Reader reader=Resources.getResourceAsReader(resource); // 可以用Reader替换inputStream
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory ;
} catch (Exception e) {
System.err.println(e);
e.getStackTrace();
}
}
return sqlSessionFactory ;
}
}
MyBatisExample.java
package com.mybatis.study.example;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.mybatis.study.mapper.RoleMapper;
import com.mybatis.study.po.Role;
import com.mybatis.study.util.MyBatisUtil;
public class MyBatisExample {
/**
* @param args
*/
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Role role = roleMapper.getRole(1L);
System.out.println(role.getId()+":"+role.getRoleName());
sqlSession.close();
}
}