转载: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,配置资源过滤
-
编写测试类
-
执行测试,得到运行成功
来源:oschina
链接:https://my.oschina.net/u/4255948/blog/3220149