Mybatis学习
框架概述
什么是框架
- 应用方面来说,框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法
- 目的方面来说,框架是可被应用开发者定制的应用骨架。
- 简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别 人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
框架要解决的问题
- 框架要解决的最重要的一个问题是技术整合的问题,在 J2EE 的 框架中,有着各种各样的技术,不同的 软件企业需要从 J2EE 中选择不同的技术,这就使得软件企业最终的应用依赖于这些技术,技术自身的复杂性和技 术的风险性将会直接对应用造成冲击。而应用是软件企业的核心,是竞争力的关键所在,因此应该将应用自身的设计和具体的实现技术解耦。
- 这样,软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应 用的底层支撑,它不应该直接对应用产生影响。
软件开发的分层重要性
- 框架的重要性在于它实现了部分功能,并且能够很好的将底层应用平台和高层业务逻辑进行了缓和。为了实现软件工程中的“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。我们常见的 MVC 软件设计思想就是很好的分层思想。
分层开发下的常见框架
- MyBatis:基于Java的持久层框架。
- SpringMVC:提供了构建Web应用程序的全功能MVC模块。
- Spirng框架:基于JavaBean实现的一个轻量级控制反转(Ioc)和面向切面(AOP)的容器框架。
Mybatis框架概述
- mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
- mybatis通过xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
- 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc进行了封装,屏蔽了 jdbc api 底层访问细节,使我 们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
Mybatis框架快速入门
Mybatis框架开发的准备
官网下载Mybatis框架
- 从百度中“mybatis download”可以下载最新的 Mybatis 开发包。
- 进入选择语言的界面,进入中文版本的开发文档
- 下载相关jar包或maven开发的坐标
搭建Mybatis开发环境
-
创建maven工程
-
添加Mybatis的坐标
-
在pom.xml文件中添加Mybatis3.4.5的坐标
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>day04_eesy_03annotation_mybatis</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
-
-
编写User实体类
package com.seafy.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable{ private Integer id; private String username; private String address; private String sex; private Date birthday; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", address='" + address + '\'' + ", sex='" + sex + '\'' + ", birthday=" + birthday + '}'; } }
-
编写持久层接口IUserDao
package com.seafy.dao; import com.seafy.domain.User; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; public interface IUserDao { /** * 查询所有用户 * @return */ @Select("select * from user") List<User> findAll(); }
-
编写持久层接口的映射文件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.seafy.dao.IUserDao"> <!--配置查询所有--> <select id="findAll" resultType="com.seafy.domain.User"> select * from user </select> </mapper>
-
编写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"> <!--配置连接数据库的4个基本信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件--> <mappers> <mapper resource="com/seafy/dao/IUserDao.xml"></mapper> </mappers> </configuration>
-
编写测试类
package com.seafy; import com.seafy.dao.IUserDao; import com.seafy.domain.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * mybatis入门案例 */ public class MybatisTest { /** * 入门案例 * @param args */ 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 userDao = session.getMapper(IUserDao.class); //5. 使用代理对象执行方法 List<User> users = userDao.findAll(); for (User user : users) { System.out.println(user); } //6. 释放资源 session.close(); in.close(); } }
-
运行结果:
小结
- 我这里只是学习了Mybatis的基础使用,具体的实现原理并没有深入学习。
- 这里面包含很多细节,比如如为什么会有工厂对象(SqlSessionFactory),为什么有了工厂之后还 要有构建者对象(SqlSessionFactoryBuilder),为什么 IUserDao.xml 在创建时有位置和文件名的要求等等。
- 如想继续深入学习请阅读大佬博客:
- Mybatis教程-实战看这一篇就够了----https://blog.csdn.net/hellozpc/article/details/80878563
69198260)]
小结
- 我这里只是学习了Mybatis的基础使用,具体的实现原理并没有深入学习。
- 这里面包含很多细节,比如如为什么会有工厂对象(SqlSessionFactory),为什么有了工厂之后还 要有构建者对象(SqlSessionFactoryBuilder),为什么 IUserDao.xml 在创建时有位置和文件名的要求等等。
- 如想继续深入学习请阅读大佬博客:
- Mybatis教程-实战看这一篇就够了----https://blog.csdn.net/hellozpc/article/details/80878563