MyBatis作用于持久层,属于数据持久化框架。
简单来说框架可以理解为一个半成品项目,已经有人完成好了一部分功能,我们只需要在其基础上完成我们需要做的业务逻辑即可,将重复的代码抽取出来,让程序员把精力专注于业务逻辑之上。
Java的世界中存在着无数的框架,每个框架都为了解决某一领域的问题而存在的。
目前市面上流行的框架组合:SSM(Spring | SpringMVC | MyBatis),早年曾经流行SSH(Spring | Strusts2 | Hiberbate),SSH已经过时了。
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
特点:
ORM是能够完全面向对象操作数据库的框架,因为SQL语句完全由Hibernate负责生成,我们只需要负责面向对象的调用API操作数据库即可,不需要写SQL;
MyBatis是半自动的ORM框架,因为SQL语句还是由开发人员手写,MyBatis负责封装结果到对象中,以及从对象中提取参数。
Hibernate与MyBatis:
Hibernate缺点:
MyBatis优点:
CREATE TABLE t_user(
id INT PRIMARY KEY,
NAME VARCHAR(255) NOT NULL,
PASSWORD VARCHAR(255) NOT NULL
)
INSERT INTO t_user VALUE
(1,'Tom','1234'),(2,'Jerry','1234'),
(3,'Jack','1234'),(4,'Rose','1234')
引入依赖
<dependencies>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.0.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.21version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="hanjuechen"/>
dataSource>
environment>
environments>
<mappers>
mappers>
configuration>
public class User {
private Integer id;
private String name;
private String password;
public User() {
}
public User(Integer id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
public interface UserMapper {
//查询所有用户
List<User> findAll();
}
<mapper namespace="com.leo.mapper.UserMapper">
<select id="findAll" resultType="com.leo.domain.User">
select * from t_user
select>
mapper>
在mybatis-config.xml配置文件末尾注册:
<mappers>
<mapper resource="com/leo/mapper/UserMapper.xml"/>
mappers>
为了让src/main/java目录中的xml文件能够作为资源文件编译输出,在pom.xml中加入如下配置:
<build>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.*include>
includes>
<filtering>falsefiltering>
resource>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.*include>
includes>
<excludes>
<exclude>**/*.javaexclude>
excludes>
<filtering>falsefiltering>
resource>
resources>
build>
public class UserMapperTest {
@Test
public void testFindAll(){
//定义配置文件路径
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
//加载配置文件
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
//根据配置文件创建SessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获得SqlSession
SqlSession session = sqlSessionFactory.openSession();
//获得UserMapper接口的实现类
UserMapper mapper = session.getMapper(UserMapper.class);
//调用UserMapper方法,执行xml中定义的SQL语句
List<User> list = mapper.findAll();
//打印list: list.sout
System.out.println(list);
}
}