1 框架基础
1.1 介绍 MyBatis
他就是一个ORM框架,简单说就是一个半成品,可以完成项目的通用操作,并且减少程序员的开发时间以及减少程序员的代码量,从而简化开发步骤,提高开发效率;
1.2 常用框架
MVC 框架 : 简化了Servlet的开发步骤 : Struts2 SrpingMVC
持久化框架 : 完成数据库操作 : apache DBUtils Hibernate Spring JPA MyBatis
胶水框架 : Spring
SSM 就是指 Spring,SpringMVC,MyBatis 这是现主流框架
SSH 就是指 Spring,Struts2,Hibernate 这是之前主流的框架
更久之前还要一个叫 Struts 它不是Struts2的前身,只是一个根,然后Struts2取名是为了将Struts的流量抢过来,当然他肯定比Struts更多功能一点;
1.3 Mybatis介绍
1.3.1 基础介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。他的前身是iBatis,再10年到了Google code 改名为MyBatis;
简单说就是一个半自动的ORM框架
ORM就是指(Object,Relational,Mapping)对象关系映射 就是对数据库进行操作的,实现对象持久化
1.3.2 特点
- 支持自定义Sql,存储过程
- 对原有的JDBC 进行封装,几乎消除所有JDBC的代码,让开发人员只需要关注SQL本身就好了
- 支持XML和注解配置方式自定义完成ORM的操作,实现结果映射
2 框架部署
2.1 创建项目
选择一个Maven项目就好了;
2.2 添加依赖与配置
就是再pom.xml中添加MyBatis的依赖,以及他是对数据库操作所以我们也需要添加数据库的依赖:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.17</version>
</dependency>
</dependencies>
然后因为连接数据库肯定要有连接原所以我们再配置包(resources),去创建一个Mybatis-config.xml,去做连接数据库的功能:
代码如下:
<?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配置数据连接信息-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/表名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
</configuration>
2.3 创建数据库
然后我们打开数据库去创建一个库和一个表:
CREATE DATABASE `ssm_db`
USE `ssm_db`;
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`stu_num` char(5) NOT NULL,
`stu_name` varchar(20) NOT NULL,
`stu_gender` char(2) NOT NULL,
`stu_age` int(11) NOT NULL,
PRIMARY KEY (`sid`),
UNIQUE KEY `stu_num` (`stu_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.4 编写实体类
先创建一个pojo的实体类的包然后创建类,类名和表名一样就可以了:
public class Students{
private Integer sid;
private String stuNum;
private String stuName;
private String stuGender;
private Integer stuAge;
}
然后再添加一个依赖可以让我们少写一些代码:
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
再对实体类进行修改:
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Students {
private Integer sid;
private String stuNum;
private String stuName;
private String stuGender;
private Integer stuAge;
}
2.5 编写Mapper
紧接着就添加一个Mapper 的包是实体类的抽象方法用来和数据库的接口,先写一个添加方法,里面是他的实体类,传给数据库然后执行添加;
public interface StudentsMapper {
int insert(Students students);
}
随后我们再配置中也写一个Mapper的包然后创建名字一样的就可以了然后再写上SQL就好了
<?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.onlooker.mapper.StudentsMapper">
<insert id="insert">
insert into students(stu_num,stu_name,stu_gender,stu_age)
values(#{stuNum},#{stuName},#{stuGender},#{stuAge})
</insert>
</mapper>
这是他的格式
再配置的Mapper中他有标签 select update delete insert 这4个让我们再数据库进行操作,然后以及他还有<where>里面包含<if>做条件的让我们更好的编写SQL;
2.6 添加配置
再mybatis-config.xml 的底部再添加一段让他可以找到你的Mapper
<mappers>
<mapper resource="mapper/*.xml"></mapper>
</mappers>
3 测试
先导入依赖然后再Test包中创建一个测试类:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
然后我们就可以开始编写测试类了,再一个我们使用他接口时,不能直接使用还需要使用到SqlSession 这个类才可以给我们使用;但是他又是通过工厂生成出来的,然后我们还要编写一个 SQL工厂 SqlSessionFactory 通过他的 .openSession来获取的,但是y, SqlSessionFactory又是通过SqlSessionFactoryBuilder来获得的,然后使用 sqlSessionFactoryBuilder.build(???);这里面又需要一个流来完成.最后就是再写一个:
InputStream resource = Resources.getResourceAsStream("mybatis-config.xml");
完整代码:
@Test
public void testStudents() {
try {
InputStream resource = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(resource);
SqlSession session=factory.openSession();
StudentsMapper mapper=session.getMapper(StudentsMapper.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
这个时候可以测试一下输出 mapper 然后看是否报错;正确:
然后我们可以开始实现接口中的方法:
Students students=new Students(); //给予对象信息
students.setStuNum("001");
students.setStuName("张三");
students.setStuGender("男");
students.setStuAge(18);
int insert = mapper.insert(students); //执行方法
System.out.println(insert>0?"添加成功!":"添加失败!");
session.commit(); //提交事务
运行结果:
再打开数据库刷新一下: