第一个程序环境描述
- jdk 8 +
- MySQL 8
- maven 3
- IDEA 2021
- JDBC
- MySQL
- Java 基础
- Maven
- Junit
- MyBatis 这是一个优秀的持久框架
- MyBatis 几乎所有的东西都被避免了 JDBC 代码和手动设置参数以及获取结果集的过程
- MyBatis 可使用简单的 XML 或注释配置和映射原始信息 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象]映射成数据库中的记录。
- MyBatis ibatis是apache的开源项目, apachee2010年这个项目 迁移到google code,改名为MyBatiss 。
- 2013年11月迁移到Githubbub .
- Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
- GitHub : https://github.com/mybatis/mybatis-3
持久性是在持久状态和瞬时状态之间转换程序数据的机制。
- 也就是说,将数据(如内存中的对象)存储在可永久存储的存储设备中(如磁盘)。持久性的主要应用程序是将内存中的对象存储在数据库中,或存储在磁盘文件中,XML数据文件中等。
- JDBC是一种持久机制。文件IO也是一种持久机制。
- 在生活中 : 冷藏鲜肉,吃的时候解冻。罐装水果的方法也是如此。
持久性是在持久状态和瞬时状态之间转换程序数据的机制。
- 也就是说,将数据(如内存中的对象)存储在可永久存储的存储设备中(如磁盘)。持久性的主要应用程序是将内存中的对象存储在数据库中,或存储在磁盘文件中,XML数据文件中等。
- JDBC是一种持久机制。文件IO也是一种持久机制。
- 在生活中 : 冷藏鲜肉,吃的时候解冻。罐装水果的方法也是如此。
什么是持久层?
- 完成持久工作的代码块 . ----> dao层 【DAO (Data Access Object) 数据访问对象]
- 在大多数情况下,特别是企业应用程序中,数据持久性往往意味着将内存中的数据保存到磁盘上进行固化,而持久性的实现过程主要是通过各种关系数据库完成的。
- 然而,这里有一个词需要特别强调,即所谓的“层”。对于应用系统来说,数据持久功能大多是必不可少的组成部分。也就是说,在我们的系统中,“持久层”的概念自然存在?也许是,但也许实际情况并非如此。“持久层”的概念是独立的,而不是“持久模块”和“持久单元”,这意味着我们的系统架构应该有一个相对独立的逻辑层面,专注于实现数据持久逻辑.
- 与系统的其他部分相比,这个层面应该有一个相对清晰和严格的逻辑边界。【说白了就是用来操作数据库存的!】
- Mybatis是帮助程序猿将数据存储在数据库中 , 并从数据库中提取数据 .
- 传统的jdbc操作 , 重复代码块很多 .比如 : 数据取出时的包装 , 建立连接数据库等... , 通过框架可以减少重复代码,提高开发效率 .
- MyBatis ORM框架为半自动化 (Object Relationship Mapping) -->对象关系映射
- 一切都可以在没有Mybatis的情况下完成,但是如果你使用它,所有的实现都会更简单!技术没有高低之分,只有使用这种技术的人有高低之分
- MyBatis的优势
- 简单易学:很小很简单。没有第三方依赖,最简单的安装只需要两个jar文件+几个sql映射文件,易于学习和使用。通过文档和源代码,可以充分掌握其设计思路和实现。
- 灵活性:mybatis不会对应用程序或数据库的现有设计产生任何影响。sql写在xml中,便于统一管理和优化。操作数据库的所有需求都可以通过sql语句来满足。
- 解除SQL与程序代码的耦合:通过提供DAO层,将业务逻辑与数据访问逻辑分离,使系统设计更加清晰、维护和单元测试。SQL与代码的分离提高了可维护性。
- 提供xml标签,支持动态sql的编写。
- ...
- 最重要的是,有很多人使用它!公司需要它!
思维过程:营造环境-->导入Mybatis--->编写代码--->测试
1、构建实验数据库代码演示
CREATE DATABASE `mybatis`;USE `mybatis`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(20) NOT NULL,`name` varchar(30) DEFAULT NULL,`pwd` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `user`(`id`,`name`,`pwd`) values (1,狂神,123456),(二,张三',abcdef(3,李四,987654);
2、导入MyBatis相关的MyBatis jar 包
- 在GitHub上找到
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version></dependency>
3、编制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="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/kuang/dao/userMapper.xml"/> </mappers></configuration>
4、编写MyBatis工具类
- 查看帮助文档
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 java.io.IOException;import java.io.InputStream;public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //获得SqlSession连接 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); }}
5、创建实体类
public class User { private int id; //id private String name; //姓名 private String pwd; //密码 //结构,有参,无参 //set/get //toString() }
6、编写Mapper接口类
import com.kuang.pojo.User;import java.util.List;public interface UserMapper { List<User> selectUser();}
7、编写Mapper.xml配置文件
- namespace 很重要,不能写错!
<?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.kuang.dao.UserMapper"> <select id="selectUser" resultType="com.kuang.pojo.User"> select * from user </select></mapper>
8、编写测试类
- Junit 包测试
public class MyTest { @Test public void selectUser() { SqlSession session = MybatisUtils.getSession(); //方法1: //List<User> users = session.selectList("com.kuang.mapper.UserMapper.selectUser"); 方法二://方法二: UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectUser(); for (User user: users){ System.out.println(user); } session.close(); }}
9、运行测试,成功查询我们的数据,ok!
问题说明
问题说明:Maven静态资源过滤问题
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource></resources>