今天开始SSM框架的学习,首先我们先来了解下到底什么是框架。
-
什么是框架:
它是我们软件开发过程中的一套解决方案,不同的框架解决不同的问题。
-
使用框架的好处:
框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。
其中三层架构就是一种典型的架构
- 表现层:对应的有SpringMVC框架
- 业务层: Spring
- 持久层:和数据库进行交互的,对用的有Mybatis框架
与数据库交互的传统技术就是JDBC,但JDBC太过于步骤过于繁琐且具有大量重复性的代码,我们曾经使用过一些工具类对它就行简单的封装。
-
比如Apache的DBUtils
但它也仅仅是简单的封装,是一种工具类,算不上框架。
1.Mybatis的概述
ORM(Object Relational Mapping)对象关系映射。简单地说,就是把数据库表和实体类及实体类的属性对应起来,让我们可以通过操作实体类来操作数据库表。
2.Mybatis的环境搭建
- 2.1建立数据库和表
Mybatis框架是和数据库进行交互的,我们先创建数据库和表方便一会进行测试。
-- 创建数据库
CREATE DATABASE IF NOT EXISTS db_mybatis CHARACTER SET utf8;
-- 创建数据表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 添加记录
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
- 2.2创建Maven工程,导入Mybatis的所需依赖(pom.xml)。
<dependencies>
<!-- Mybatis所需要的jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- 连接数据库所需要的jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!-- 进行单元测试所需要的jar包,这里可以徐泽不导入 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
- 2.3编写User实体类 (实体类的属性要和数据中的列名保持一致)
/**
* 用户实体类
*/
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
//以下get和set、toString方法还需自己添加上,这里不过多叙述,自动生成即可
- 2.4编写持久层接口IUserDao
/**
* 持久层的接口
*/
public interface IUserDao {
/**
* 查找所有的用户
*/
List<User> findAllUser();
}
- 2.5 编写持久层接口的映射文件IUserDao.xml
创建位置:必须和持久层接口在相同的包中
名称:必须以持久层接口命名文件名,扩展名为.xml
<?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.zut.dao.IUserDao">
<!-- 配置查询所有 -->
<!-- 这里的id必须和接口中的方法名一致 -->
<select id="findAllUser" resultType="com.zut.damain.User">
select * from user
</select>
</mapper>
- 2.6编写主配置文件SqlMapConfig.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">
<!-- Mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置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/db_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="ljt074517"/>
</dataSource>
</environment>
</environments>
<!-- 一些注意事项:
1.mybatis的映射配置文件必须和dao接口的包结构相同
2.映射配置文件的mapper标签的namespace属性的取值必须是dao接口的全限定类名
3.映射配置文件的操作配置,id的属性取值必须是dao接口的方法名
-->
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/zut/dao/IUserDao.xml"></mapper>
</mappers>
</configuration>
- 2.7编写测试类
/**
* mybatis入门案例
*/
public class MybatisTest {
public static void main(String[] args) throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao iUserDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> us