mybatis的使用总共分成部分,可依次进行
1.mysql的安装
可以在网上搜索mysql的相关教程即可,安装完mysql之后再往下进行。需要记住自己安装过程中设置的mysql数据库的登录用户名以及密码。
2.创建数据库以及数据表
首先是打开终端进行登录mysql数据库
操作指令:mysql -uroot -p12345678
root:mysql的用户名
12345678:mysql密码
创建test_db数据库(已经创建过不再演示)
操作指令:create database test_db;
创建完之后可以执行:show databases;进行查看是否创建成功;
进入test_db数据库
操作指令:use test_db;
创建student数据表
操作指令:
CREATE TABLE student
(
id
int NOT NULL AUTO_INCREMENT,
name
varchar(20) DEFAULT NULL,
age
int DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
创建完数据库后进行插入数据,可以自行多插入几条
操作指令:insert into student (name,age) values(“xiaoqu”,16);
3.代码编写
直接创建的maven工程即可,不会可直接进行百度
工程架构如下图所示
首先在pom.xm中引入mysql和mybatis的依赖
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--(mysql连接类)jdbc依赖,mybatis仍然需要用到jdbc,只是不需要我们手动配置jdbc-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--可以通过注解@data自动生成get和set方法-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
在resource目录下新建一个mybatis的核心配置文件,我这里即mybatisconfig.xml这个配置文件,代码如下, mybatis的官网都有
<?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>
<properties resource="my.properties">
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</dataSource>
</environment>
</environments>
<!--注册mapper(映射器)-->
<mappers>
<mapper resource="config/Studentconfig.xml"/>
</mappers>
</configuration>
需要注意的地方
到这里mybatis的核心配置类已经写完,那有了这个核心配置类,我们就可以去得到sql语句的执行对象,怎么得到我马上讲,接下来的操作可以类比JDBC中的connection和statement
以下这个类用于生成执行sql的对象
package MybatisUtils;
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 GetSqlsession {
private static InputStream inputStream;
//这个方法生成一个生产Sqlsession的工厂,即SqlSessionFactory
public static SqlSessionFactory createfactory() {
{
try {
inputStream = Resources.getResourceAsStream("mybatisconfig.xml");
} catch (IOException e) {
e.printStackTrace();
}
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过把这个工厂return出来,以便后续通过这个工厂获得SqlSession对象
return sqlSessionFactory;
}
//这个方法获得SqlSession对象
public static SqlSession getsqlsession(){
return createfactory().openSession();
}
}
接下我们肯定要去使用这个SqlSession,那么我们先来创建一个实体类,@data注解的使用需要引入依赖,在前面已经引入了
package Do;
import lombok.Data;
@Data
public class StudentDo {
int id;
String name;
int age;
}
实体类写完后,我们来写接口
package Dao;
import Do.StudentDo;
import java.util.List;
public interface StudentDao {
List<StudentDo> selectStudent();
}
定义好接口后,接下来开始写接口对应的.xml文件(这里即Studentconfig.xml),mybatis就是通过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">
<!--NameSpace 任意起名字,就是这个Mapper.xml的身份标签-->
<mapper namespace="Dao.StudentDao">
<!--sql语句是select类型,标签用select,
id随便起,是这条sql语句的身份标签,一个xml文件里可以有多个sql语句,但是id不能重复
resultType是执行sql的结果,mybatis底层会把statement执行sql的结果集解析出来。用set方法封装到User对象里,因为User的变量名和数据库列名一样,所以通过反射setXx可以封装成功
-->
<select id="selectStudent" resultType="Do.StudentDo">
select * from student
</select>
</mapper>
到此接口对应的mapper配置完毕
在父pom中配置一下build标签,因为如果不配置,在项目build后接口对应的mapper文件(即上面的Studentconfig.xml)不会被放入target文件夹,那mybatis就扫描不到这个文件就报错了,所以在父pom中加入一下代码
<!--使打包时能一起打包配置文件-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
开始进行测试
package Main;
import Dao.StudentDao;
import Do.StudentDo;
import MybatisUtils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class Main {
public static void main(String[] args) {
test();
}
private static void test(){
//通过GetSqlsession直接.getsqlsession这个静态方法获得SqlSession对象
SqlSession sqlsession = GetSqlsession.getsqlsession();
//通过SqlSession的.getMapper方法,传入你接口的class获得接口,这里是java的反射机制
StudentDao studentdao = sqlsession.getMapper(StudentDao.class);
//通过接口类反射得到的接口对象studentdao直接调用其内部的方法
List<StudentDo> students = studentdao.selectStudent();
//遍历输出这个List
for (StudentDo student : students) {
System.out.println(student);
}
//切记!!!用完一定要把sqlsession对象关闭,不然会造成资源占用
sqlsession.close();
}
}
查看日志打印结果
数据库直接查询结果
到此,已经成功的使用mybatis进行查询数据库了,其它的删除、修改,增加的操作基本都是一样的。
4.踩坑记录
Communications link failure错误
需要查看mybatisconfig.xml配置文件中连接url中的useSSL是否等于false
备注:
useSSL=false和true的区别:
SSL(Secure Sockets Layer 安全套接字协议),在mysql进行连接的时候,如果mysql的版本是5.7之后的版本必须要加上useSSL=false,mysql5.7以及之前的版本则不用进行添加useSSL=false,会默认为false,一般情况下都是使用useSSL=false,尤其是在将项目部署到linux上时,一定要使用useSSL=false!!!,useSSL=true是进行安全验证,一般通过证书或者令牌什么的,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false!!!
Unknown database 'test_dlb’错误
需要查看mybatisconfig.xml配置文件中的数据库名是否正确。