MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
1、个人感觉还是跟着官方文档走稍微稳妥一些
1.1、准备maven库,Mysql5.7,和IDEA
准备maven库:
<dependencies> <!--Mysql驱动--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> </dependency> <!--mybatis--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <!--junit--> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided</scope> </dependency> </dependencies>
还有资源过滤:
<!--maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被处理或生效问题,解决方案--> <build> <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> </build>
2、开始搭建:
先去Mysql里创建一个user表:
查看表里的东西等一下要核对:
新建maven项目
在pom里面导入所需要的库:
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>MybatisTest02</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--导入MySQL包/核心--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> </dependency> <!--导入Mybatis包/核心--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <!--导入junit测试包--> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> </dependencies> <!--maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被处理或生效问题,解决方案--> <build> <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> </build> </project>
根据官方文档所需要一个xml核心配置文件和一个java核心配置类:
在resources新建一个xml文件起名为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"> <!--Mybatis核心配置类--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库jdbc包--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!--数据库的url地址,serverTimezone=UTC设置时区,UseUnicode=true&characterEncoding=UTF-8设置编码格式不然会乱码--> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&UseUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/> <!--数据库的账号--> <property name="username" value="root"/> <!--数据库的密码--> <property name="password" value="root"/> </dataSource> </environment> </environments> </configuration>
再把SqlSessionFactory,封装成一个工具类这样就可以方便调用
package com.hdlf.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 Mybatisconfig { private static SqlSessionFactory sqlSessionFactory; static{ try { //使用Mybatis第一步,获取sqlSessionFactory对象 String resource = "mybatis-config.xml";//这个文件是可以直接读的。 InputStream inputStream = Resources.getResourceAsStream(resource);//获取配置文件,就是在resource下的文件 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了sqlSessionFactory,顾名思义,我们就可以从中获得SqlSession //SqlSession完全包含了面向数据库执行SQL命令所需的所有方法 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
数据库表创建好之后,使用IDEA连接:
然后在新建一个实体类命名为User,里面的变量名字必须和mysql里创建表里面的键值名一样:
package com.hdlf.pojo; public class User { private int id; private String name; private String pwe; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwe='" + pwe + '\'' + '}'; } public User() { } public User(int id, String name, String pwe) { this.id = id; this.name = name; this.pwe = pwe; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwe() { return pwe; } public void setPwe(String pwe) { this.pwe = pwe; } }
新建一个dao层Mapper接口命名为UserMaper:
package com.hdlf.dao; import com.hdlf.pojo.User; import java.util.List; public interface UserMapper { List<User> getUser(); }
然后再新建一个UserMapper.xml的配置文件:
这个可以去官网上复制
<?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"> <!--绑定UserMapper接口,大白话就是实现UserMapper这个接口的功能--> <mapper namespace="com.hdlf.dao.UserMapper"> <!--id就是UserMapper里的方法名字,里面写执行MySQL的命令 resultType返回的类型--> <select id="getUser" resultType="com.hdlf.pojo.User"> SELECT * FROM mybatis.user </select> </mapper>
在Test文件里新建一个测试类:
package com.hdlf.dao; import com.hdlf.pojo.User; import com.hdlf.utils.Mybatisconfig; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserMapperTest { @Test public void test(){ //第一步,获得sqlsession对象 SqlSession sqlSession = Mybatisconfig.getSqlSession(); //执行sql UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> s = mapper.getUser(); for (User user:s){ System.out.println(user); } //关闭sqlSession sqlSession.close(); } }
目录是这样的:
运行之后会报错:
显示绑定异常
原因是没有把UserMapper.xml注解到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"> <!--Mybatis核心配置类--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库jdbc包--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!--数据库的url地址,serverTimezone=UTC设置时区,UseUnicode=true&characterEncoding=UTF-8设置编码格式不然会乱码--> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&UseUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/> <!--数据库的账号--> <property name="username" value="root"/> <!--数据库的密码--> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--注册UserMapper文件!!!--> <mappers> <mapper resource="com/hdlf/dao/UserMapper.xml"/> </mappers> </configuration>
在运行一下:
学起来很是复杂不过环境搭建好之后就非常轻松,一定要有耐心哦