1.MyBatis入门
转载:https://blog.kuangstudy.com/index.php/archives/490/
一.准备
1.环境说明:
-
jdk 8 +
-
MySQL 5.7.19
-
maven-3.6.0
-
IDEA
2.学习前需要掌握:
-
JDBC
-
MySQL
-
Java 基础
-
Maven
-
Junit
二.MyBatis简介
1.什么是Mybatis
-
MyBatis 是一款优秀的持久层框架
-
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程
-
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
-
MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。
-
2013年11月迁移到Github .
-
Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
-
GitHub : https://github.com/mybatis/mybatis-3
-
Maven:
1 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> 2 <dependency> 3 <groupId>org.mybatis</groupId> 4 <artifactId>mybatis</artifactId> 5 <version>3.5.2</version> 6 </dependency>
2.什么是持久化
-
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
-
即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
-
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
-
在生活中 : 将鲜肉冷藏,吃的时候再解冻的方法也是。将水果做成罐头的方法也是。
-
-
为什么需要持久化服务呢?那是由于内存本身的缺陷引起的
-
内存断电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号等,遗憾的是,人们还无法保证内存永不掉电。
-
内存过于昂贵,与硬盘、光盘等外存相比,内存的价格要高2~3个数量级,而且维持成本也高,至少需要一直供电吧。所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。
-
3.持久层
-
什么是持久层?
-
完成持久化工作的代码块 . ----> dao层 【DAO (Data Access Object) 数据访问对象】
-
大多数情况下特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。
-
不过这里有一个字需要特别强调,也就是所谓的“层”。对于应用系统而言,数据持久功能大多是必不可少的组成部分。也就是说,我们的系统中,已经天然的具备了“持久层”概念?也许是,但也许实际情况并非如此。之所以要独立出一个“持久层”的概念,而不是“持久模块”,“持久单元”,也就意味着,我们的系统架构中,应该有一个相对独立的逻辑层面,专著于数据持久化逻辑的实现.
-
与系统其他部分相对而言,这个层面应该具有一个较为清晰和严格的逻辑边界。 【说白了就是用来操作数据库存在的!】
-
4.为什么需要Mybatis
-
Mybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据 .
-
传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等... , 通过框架可以减少重复代码,提高开发效率 .
-
MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射
-
所有的事情,不用Mybatis依旧可以做到,只是用了它,所有实现会更加简单!技术没有高低之分,只有使用这个技术的人有高低之别
-
MyBatis的优点
-
简单易学
-
灵活
-
解除sql与程序代码的耦合,sql和代码的分离,提高了可维护性。
-
提供xml标签,支持编写动态sql。
-
最重要的一点,使用的人多!公司需要!
-
三.第一个Mybatis程序
思路:搭建环境-->导入Mybatis--->编写代码--->测试
1.搭建环境
(1)搭建实验数据库
在SQLyog中建立数据库
1 CREATE DATABASE `mybatis`; 2 3 USE `mybatis`; 4 5 DROP TABLE IF EXISTS `user`; 6 7 CREATE TABLE `user` ( 8 `id` int(20) NOT NULL, 9 `name` varchar(30) DEFAULT NULL, 10 `pwd` varchar(30) DEFAULT NULL, 11 PRIMARY KEY (`id`) 12 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 13 14 insert into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');
(2)新建项目
1.新建一个普通的maven项目:Mybatis-Study
2.删除src目录:让Mybatis-Study项目作为父项目
3.导入maven依赖
1 <!--父工程--> 2 <groupId>edu.ustc.wzh</groupId> 3 <artifactId>Mybatis-Study</artifactId> 4 <version>1.0-SNAPSHOT</version> 5 6 <!--导入依赖--> 7 <dependencies> 8 <!--mybatis--> 9 <dependency> 10 <groupId>org.mybatis</groupId> 11 <artifactId>mybatis</artifactId> 12 <version>3.5.2</version> 13 </dependency> 14 <!--mysql驱动--> 15 <dependency> 16 <groupId>mysql</groupId> 17 <artifactId>mysql-connector-java</artifactId> 18 <version>5.1.47</version> 19 </dependency> 20 <!--junit--> 21 <dependency> 22 <groupId>junit</groupId> 23 <artifactId>junit</artifactId> 24 <version>4.12</version> 25 </dependency> 26 </dependencies>
(3)创建一个子模块
(3.1)配置数据库连接
(3.2)编写Mybatis的核心配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!--configuration核心配置文件--> 6 <configuration> 7 8 <environments default="development"> 9 <environment id="development"> 10 <transactionManager type="JDBC"/> 11 <dataSource type="POOLED"> 12 <property name="driver" value="com.mysql.jdbc.Driver"/> 13 <property name="url" 14 value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/> 15 <property name="username" value="root"/> 16 <property name="password" value="123456"/> 17 </dataSource> 18 </environment> 19 </environments> 20 21 22 </configuration>
(3.3)编写Mybatis工具类
1 import org.apache.ibatis.io.Resources; 2 import org.apache.ibatis.session.SqlSession; 3 import org.apache.ibatis.session.SqlSessionFactory; 4 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 5 import java.io.IOException; 6 import java.io.InputStream; 7 8 //sqlSessionFactory --> sqlSession 9 public class MybatisUtils { 10 11 private static SqlSessionFactory sqlSessionFactory; 12 13 static { 14 try { 15 //使用Mybatis第一步:获取sqlSessionFactory对象 16 String resource = "mybatis-config.xml"; 17 InputStream inputStream = Resources.getResourceAsStream(resource); 18 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22 } 23 24 //第二步:从 SqlSessionFactory中获取SqlSession连接 25 public static SqlSession getSession(){ 26 return sqlSessionFactory.openSession(); 27 } 28 }
(3.4)创建实体类
1 //实体类 2 public class User { 3 private int id; //id 4 private String name; //姓名 5 private String pwd; //密码 6 7 //构造,有参,无参,toString 8 public User() { 9 } 10 11 public User(int id, String name, String pwd) { 12 this.id = id; 13 this.name = name; 14 this.pwd = pwd; 15 } 16 17 public int getId() { 18 return id; 19 } 20 21 public void setId(int id) { 22 this.id = id; 23 } 24 25 public String getName() { 26 return name; 27 } 28 29 public void setName(String name) { 30 this.name = name; 31 } 32 33 public String getPwd() { 34 return pwd; 35 } 36 37 public void setPwd(String pwd) { 38 this.pwd = pwd; 39 } 40 41 @Override 42 public String toString() { 43 return "User{" + 44 "id=" + id + 45 ", name='" + name + '\'' + 46 ", pwd='" + pwd + '\'' + 47 '}'; 48 } 49 }
(3.5)编写Mapper接口文件
1 import edu.ustc.wzh.pojo.User; 2 3 import java.util.List; 4 5 public interface UserMapper { 6 List<User> getUserList(); 7 }
(3.6)编写Mapper.xml文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <!--namespace用于绑定一个对应的Dao/Mapper接口--> 7 <mapper namespace="edu.ustc.wzh.dao.UserMapper"> 8 9 <!--select查询语句 id绑定函数名 resultType绑定返回类型--> 10 <select id="getUserList" resultType="edu.ustc.wzh.pojo.User"> 11 select * from user 12 </select> 13 </mapper>
(3.7)修改核心配置文件
1 <!--每一个Mapper.XML都需要在Mybatis核心配置文件中注册--> 2 <mappers> 3 <mapper resource="edu/ustc/wzh/dao/UserMapper.xml"/> 4 </mappers>
(3.8)设置Maven资源过滤问题,修改父子pom.xml文件
1 <!--在build中配置resources,来防止我们的资源文件导出失败的问题--> 2 <build> 3 <resources> 4 <resource> 5 <directory>src/main/java</directory> 6 <includes> 7 <include>**/*.properties</include> 8 <include>**/*.xml</include> 9 </includes> 10 <filtering>false</filtering> 11 </resource> 12 <resource> 13 <directory>src/main/resources</directory> 14 <includes> 15 <include>**/*.properties</include> 16 <include>**/*.xml</include> 17 </includes> 18 <filtering>false</filtering> 19 </resource> 20 </resources> 21 </build>
(3.9)编写测试类
1 public class UserMapperTest { 2 3 @Test 4 public void selectUser() { 5 6 //第一步:获取SqlSession对象 7 SqlSession session = MybatisUtils.getSession(); 8 9 //第二步:执行SQL 10 11 //方法一:使用selectList方法 12 //List<User> users = session.selectList("edu.ustc.wzh.dao.UserMapper.getUserList"); 13 14 //方法二:使用getMapper方法 15 UserMapper mapper = session.getMapper(UserMapper.class); 16 List<User> users = mapper.getUserList(); 17 18 for (User user: users){ 19 System.out.println(user); 20 } 21 session.close(); 22 } 23 }
(3.10)运行
四.总结创建Mybatis项目的流程
-
使用SQLyog创建数据库
-
建立一个普通的Maven父项目,删除src目录,修改pom.xml导入mysql,mybatis,junit的jar包
-
在父项目中简历子模块,同样是普通Maven项目
-
配置数据库连接
-
编写Mybatis核心配置文件
-
编写Mybatis工具类
-
创建实体类
-
编写Mapper接口
-
编写Mapper.xml文件
-
修改Mybatis核心配置文件
-
修改父pom.xml和子pom.xml,配置资源过滤
-
编写测试类
-
执行测试,得到运行成功