目录
第一个Mybatis程序:Mybatis-HelloWorld
Mybatis简介
• MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
• MyBatis 避免了几乎所有的 JDBC 代码和手动设 置参数以及获取结果集。
• MyBatis可以使用简单的XML或注解用于配置和原 始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
Mybatis历史
为什么使用Mybatis
Mybatis下载


第一个Mybatis程序:Mybatis-HelloWorld
第一步 创建表
DROP DATABASE IF EXISTS mybatis;
CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8;
use mybatis;
CREATE TABLE tbl_employee (
id int NOT NULL AUTO_INCREMENT,
last_name varchar(255),
gender char(1),
email varchar(255),
PRIMARY KEY (id))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tbl_employee (last_name, gender, email) VALUES ('Tom', '1', 'Tom@qq.com');
第二步 创建工程
在IDEA中新建个普通工程,并引入必需的包。
注: 我的mysql版本是6.0.3 。有可能和你的mysql版本不一致。你需要换成你的mysql版本对应的jar包和数据库连接。
第三步 创建实体类,mybatis配置文件
实体类:
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender + "]";
}
}
mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="EmployeeMapper.xml" />
</mappers>
</configuration>
mybatis映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.EmployeeMapper">
<!--
namespace:名称空间;
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);
-->
<select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>
</mapper>
注:tbl_employee表中last_name和java实体类lastName 是不对应的。此处如果不写别名的话,最后查询结果中 lastName的值就会为null。
第四步 编写测试类
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
* 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
* 3、将sql映射文件注册在全局配置文件中
* 4、写代码:
* 1)、根据全局配置文件得到SqlSessionFactory;
* 2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
* 一个sqlSession就是代表和数据库的一次会话,用完关闭
* 3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
*
* @throws IOException
*/
@Test
public void test() throws IOException {
// 获取sqlSession实例,能直接执行已经映射的sql语句
// selectOne方法的两个参数 :
// sql的唯一标识:statement Unique identifier matching the statement to use.
// 执行sql要用的参数:parameter A parameter object to pass to the statement.
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
Employee employee = openSession.selectOne(
"com.atguigu.mybatis.EmployeeMapper.selectEmp", 1);
System.out.println(employee);
} finally {
openSession.close();
}
}
}
运行测试方法:
工程目录
学习中遇到的问题
1. 文中所说的mysql版本不一致问题。
2. conf文件没有配置为源文件,导致加载SqlSessionFactory时找不到mybatis全局配置文件。
conf文件右击-->最后选择Resource Root (因为我已经是源文件,所以没有该选项)
总结
后续增加
参考资料
重新学习的尚硅谷Mybatis视频。
其他补充
Hibernate :sql自己不编写,sql不能优化。一些复杂查询不能定制sql。HQL可以定制sql,但是增加学习负担。 Hibernate是全字段映射。比如有100个字段,如果想查询单个字段,需要用HQL或者其他解决办法。
Mybatis:Sql与java代码分离。 只需要关注SQL编写即可,学习代价比较低。半自动,轻量级框架。