First-Mybatis
什么是Mybatis
MyBatis
是一款优秀的持久层框架- 它支持定制化
SQL
、存储过程
以及高级映射
。 MyBatis
避免了几乎所有的JDBC
代码和手动设置参数
以及获取结果集
。MyBatis
可以使用简单的XML
或注解来配置和映射原生类型
、接口
和Java
的POJO
(Plain OldJava Objects
,普通老式 Java 对象)为数据库中的记录。MyBatis
本是[apache](https://baike.baidu.com/item/apache/6265)
的一个开源项目[iBatis](https://baike.baidu.com/item/iBatis), 2010年这个项目由
apache software foundation迁移到了
google code,并且改名为
MyBatis `。- 2013年11月迁移到
Github
。
如何获得Mybatis?
-
maven仓库:
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency>
1.2、持久化
数据持久化:
- 持久化就是将程序的数据在持久状态和瞬时状态转化的过程。
- 内存:断电即失。
- 数据库(Jdbc),io文件持久化。
- 联系于生活:冷藏、罐头。
为什么需要需要持久化?
- 有一些硬盘里的对象,不能让他丢掉!!!
- 内存太贵了。
1.3、持久层
Dao层,Service层,Controller层….
- 完成持久化工作的代码块
- 层界限十分明显。
1.4 为什么需要Mybatis?
- 帮助程序猿将数据存入到数据库中。
- 方便
- 传统的JDBC代码太复杂了。简化。框架。自动化。
- 不用Mybatis也可以,更容易上手。
- 优点:
- 简单易学。
- 灵活。
- sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射。
- 提供对象关系映射标签,支持对象关系组建维护。
- 提供xml标签,支持编写动态sql。
第一个Mybatis程序
- 思路:搭建环境–>导入Mybatis–>编写代码–>测试!
代码结构
2.1、搭建环境
搭建数据库
在IDEA
中可以直接链接数据库,创建数据库以及创建表,可视化操作数据等,还是很方便的
CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE USER (
id INT ( 20 ) NOT NULL PRIMARY KEY,
name VARCHAR ( 30 ) DEFAULT NULL,
age INT( 20 ) ,
phone varchar( 30 )
ENGINE = INNODB DEFAULT charset = utf8;
INSERT INTO USER ( id, name, age, phone )
VALUES
( 1, '张三', '10', "023-1234" ),
( 2, '李四', '12', "023-1237" ),
( 3, '王五', '15', "023-1236" );
新建项目
-
新建一个普通的maven项目
-
删除
src
目录 -
导入maven的mybatis依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency>
其他依赖-测试依赖
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
其他依赖-slf4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.0-alpha6</version>
<scope>test</scope>
</dependency>
2.2、创建一个模块
-
编写mybatis的核心配置文件——mybatis.xml
注意不要写中文注释,否则会报编码错误。
注意每一个Mapper文件需要在核心配置文件上注册,路下面的mappers中所示,注意我们这里使用的是路径,而不是包名,使用**
/
**分隔。<?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.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false& serverTimezone=Hongkong& characterEncoding=utf-8& autoReconnect=true"/> <property name="username" value="root"/> <property name="password" value="crushonHS@7797"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/tan/mybatis/mapper/UserMapper.xml"/> </mappers> </configuration>
-
编写mybatis工具类
package com.tan.mybatis.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; public class MybatisUntils { //提权 private static SqlSessionFactory sqlSessionFactory; static{ try { // 使用Mybatis第一步:获取sqlSessionFactory对象 String resource = "mybatis.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } // 既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。 // SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
2.3、编写代码
-
实体类
package com.tan.mybatis.pojo; public class User { private int id; private String name; private int age; private String phone; public User() { } public User(int id, String name, int age, String phone) { this.id = id; this.name = name; this.age = age; this.phone = phone; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } public String getPhone() { return phone; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age='" + getAge() + '\'' + '}'; } }
-
Mapper接口
package com.tan.mybatis.mapper; import com.tan.mybatis.pojo.User; import java.util.List; public interface UserMapper { List<User> getUserList(); }
-
接口实现类由原来的UserDaoImpl转变为一个 Mapper配置文件.
namespace
:接口路径id
:方法名resultType
:返回类型,只需要写具体类型,如果实现返回List<>,也只需要写泛型里面的具体类型
<?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.tan.mybatis.mapper.UserMapper"> <select id="getUserList" resultType="com.tan.mybatis.pojo.User">select * from mybatis.user;</select> </mapper>
2.4、测试
测试的文件应该和java文件路径一致,虽然不影响,但是应该遵循规范。
-
junit测试
package com.tan.mybatis; import com.tan.mybatis.mapper.UserMapper; import com.tan.mybatis.pojo.User; import com.tan.mybatis.utils.MybatisUntils; import org.apache.ibatis.session.SqlSession; import org.junit.jupiter.api.Test; import java.util.List; public class TestgetUser { @Test public void testGetUserList(){ SqlSession sqlSession = MybatisUntils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> list = mapper.getUserList(); System.out.println(list.toString()); } }
当你敲完所有的代码后,你可能还是不能运行起来,从数据库取出数据。如果抛出的异常指的是XML文件找不到的话,就是Maven导出资源问题,解决问题的方法也很简单。在pom.xml加入以下代码就可以了。之间。
<!-- 资源导出问题-->
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--设置这个目录下的指定文件也会被导出-->
<includes>
<include>**/*.properties</include><!--自己指定的文件类型-->
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<!--系统会自动导出resources中的文件,这个一般不写,如果你的resources中资源也不无法导出,可以试一下把这个加上-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
Congratulations:
当出现这个结果时就代表你从数据库取出了所有的数据,并在控制台上输出了。