第一个MyBatis程序
Mybatis
环境:
- JDK 1.8
- MySql 5.7
- Maven3.6.1
- IDEA
准备知识:
- jdbc
- mysql
- java
- Maven
- Junit
1、简介
1.1、什么是MyBatis

-
MyBatis 是一款优秀的持久层框架。
-
它支持自定义 SQL、存储过程以及高级映射。
-
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
-
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
-
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
-
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
1.2、获得MyBatis
-
maven仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency>
1.2、 持久化
数据持久化
- 持久化是将程序数据在持久状态和瞬时状态间转换的机制。
- 内存中数据断电及失。
- 持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
- JDBC就是一种持久化机制。文件IO也是一种持久化机制。
为什么要持久化?
- 数据不能丢失
- 内存容量有限
1.3、持久层
三层架构:Controller层、Service层、Dao层
- 完成持久化工作的代码块
- 层界限十分明显,Dao层级
1.4、为什么需要Mybatis?
-
帮助开发将数据存入数据库中。
-
方便,减少开发工作量
-
特点
- 简单易学
- 灵活
- 解除sql与程序代码的耦合
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql
-
使用的人多,而且技术较新
2、第一个Mybatis程序
2.1、搭建环境
2.1.1、Mysql创建数据库
-
创建数据库
CREATE DATABASE myBatis; -
使用myBatis数据库
USE myBatis; -
创建一个user表
CREATE TABLE `user`( id INT(20) NOT NULL, `name` VARCHAR(30), `pwd` VARCHAR(30) )ENGINE=INNODB DEFAULT CHARSET=utf8; -
插入一些数据
INSERT INTO USER(id,NAME,pwd) VALUES (1,'张三','123456'), (2,'李四','123456'), (3,'王五','123456')
2.1.2、在IDEA创建一个Maven项目
-
Project SDK选择1.8
-
删除src目录
-
maven导入依赖
<!--导入依赖包--> <dependencies> <!--mysql驱动--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> <!--mybatis--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!--junit--> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
2.1.3、创建一个子模块
-
右键项目点击新建模块 名称叫mybatis-01
-
编写mybatis的核心配置文件 官网入门
- 在mybatis-01下的src/main/resources里面新建
mybatis-config.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"> <!--configuration核心配置文件--> <configuration> <!--环境--> <environments default="development"> <environment id="development"> <!--默认使用jdbc事务管理--> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--使用mysql的驱动--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--你的数据库地址 useSSL是否使用安全连接 &=& useUnicode是否使用Unicode字符集 characterEncoding 当useUnicode设置为true时,指定字符编码--> <property name="url" value="jdbc:mysql://192.168.4.108:3306/myBatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/> <!--用户名--> <property name="username" value="root"/> <!--密码--> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--<mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers>--> </configuration> - 在mybatis-01下的src/main/resources里面新建
-
编写mybatis工具类
package com.jiutong.utils; 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; //sqlSessionFactory --> sqlSession public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static{ //alt+shitf+上下 选中行上下移动 try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
2.2、编写代码
-
实体类
package com.jiutong.pojo; //User实体类 public class User { private int id; private String name; private String pwd; //alt+insert @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } } -
Mapper接口
package com.jiutong.dao; import com.jiutong.pojo.User; import java.util.List; public interface UserMapper { List<User> getUserList(); } -
接口实现类(Mapper.xml) ,由原来的daoimpl转换成一个Mapper配置文件
<?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.jiutong.dao.UserDao"> <select id="getUserList" resultType="com.jiutong.pojo.User"> select * from user; </select> </mapper> -
在configuration核心配置文件中注册Mapper.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"> <!--configuration核心配置文件--> <configuration> <!--环境--> <environments default="development"> <environment id="development"> <!--默认使用jdbc事务管理--> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--使用mysql的驱动--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--你的数据库地址 useSSL是否使用安全连接 &=& useUnicode是否使用Unicode字符集 characterEncoding 当useUnicode设置为true时,指定字符编码--> <property name="url" value="jdbc:mysql://192.168.4.108:3306/myBatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/> <!--用户名--> <property name="username" value="root"/> <!--密码--> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--------------------以下是新加的----------------------> <mappers> <mapper resource="com/jiutong/dao/UserMapper.xml"/> </mappers> <!-------------------以上是新加的----------------------> </configuration> -
在mybatis-01子项目下的pom.xml加入对构建包的配置
<?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"> <parent> <artifactId>MybatisStudy</artifactId> <groupId>com.jiutong</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mybatis-01</artifactId> <!------------以下是新加的---------------> <build> <!-- 资源目录 --> <resources> <resource> <!-- 设定主资源目录 --> <!-- 包含的文件资源类型--> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <!-- 剔除的资源类型--> <excludes> <!--<exclude>**/*.yaml</exclude>--> </excludes> <!--是否对主资源目录开启资源过滤 --> <filtering>true</filtering> </resource> </resources> </build> <!-------------以上是新加的--------------> </project>
2.3、测试
package com.jiutong.dao;
import com.jiutong.pojo.User;
import com.jiutong.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test
public void test(){
//获取Session
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行sql
//方式一
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
//方法二(不建议)
/*List<User> objects = sqlSession.selectList("com.jiutong.dao.UserMapper.getUserList");;
for (User object : objects) {
System.out.println(object);
}*/
//关闭session
sqlSession.close();
}
}
输出:
User{id=1, name='张三', pwd='123456'}
User{id=2, name='李四', pwd='123456'}
User{id=3, name='王五', pwd='123456'}
进程已结束,退出代码 0
可能会遇到的问题:
- 在maven中 main下面的*.xml文件不会被导出 ,需要手动配置pom.xml下面的
。 - resources下面的文件在导出的时候算作在程序的根目录所以utils类下面的 String resource = "mybatis-config.xml"。
- mapper.xml创建之后需要去 configuration(mybatis-config.xml)下面注册。


浙公网安备 33010602011771号