今天开始学了mybatis,之前就听说这个框架,所以这次就来尝试一下。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
这篇文章主要讲述一个最最最基本的mybatis程序,然后再一步步的修改。
主要内容如下:
1、创建maven工程,导入jar包
2、创建数据文件
3、创建实体类
4、创建dao接口
5、创建mapper文件
6、创建mybatis主配置文件
7、创建接口的实现类
8、进行测试
一晚上花了2个小时就从网上找了个教程,写了一个demo文件,遇到了一些小错误,但是都解决了!从上面一步一步的介绍:
第一步:创建maven工程,导入jar包
这个步骤还是非常简单的,再IEDA中建立一个webapp的工程即可,然后建立响应的文件夹,再pom文件中导入相应的jar:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
这里面有的jar在这个项目中能用到,有的用不了,反正这些jar包都是常用的多导入些也没关系,在我的电脑上,maven不能用,自己搞了好久才能用。
第二步:创建数据库
这一步需要也是很简单,老生常谈的问题。
create database learnmybatis;
CREATE TABLE `t_student` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NULL,
`age` INT NULL,
`score` DOUBLE NULL,
PRIMARY KEY (`id`));
第三步:创建实体类
package domain;
public class Student {
private int id;
private String name;
private int age;
private double score;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
//省略getter和setter
}
第四步:创建dao接口
这个步骤和之前创建的dao接口一直,就是定义查询数据的方法
package dao;
import domain.Student;
public interface StudentDao {
public void insertStudent(Student student);
}
第五步:创建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="zhiguo98">
<!--parameterType可省略-->
<insert id="insertStudent" parameterType="domain.Student">
INSERT INTO t_student(name,age,score) VALUES (#{name},#{age},#{score})
</insert>
</mapper>
注意点:
namespace:命名空间,可以随便命名
insert 对应的是个插入的数据库语句
id是这个插入语句的唯一代号,不能重复
parameterType是参数类型,可加可不加
下面就是插入语句 注意每个参数的一致性,最好是数据库和实体类保持一致,要不然指不定哪会出错
第六步:创建主配置文件
这个文件是非常重要的,是连接数据库的一些参数和mapper文件的位置
<?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://127.0.0.1:3306/learnmybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="yanzhiguo140710"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--注册映射文件-->
<mapper resource="dao/StudentMapper.xml"/>
</mappers>
</configuration>
<mappers>
<!--注册映射文件-->
<mapper resource="dao/StudentMapper.xml"/>
</mappers>
在主配置文件中配置mapper文件的位置!!!
第七步:创建接口的实现类
实现之前写的dao接口,实现里面的方法
package dao.impl;
import dao.StudentDao;
import domain.Student;
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 StudentDaoImpl implements StudentDao {
private SqlSession sqlSession;
@Override
public void insertStudent(Student student) {
try {
//读取主配置文件
InputStream input = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(input);
//创建SqlSession对象
sqlSession = sessionFactory.openSession();
//新增数据操作
sqlSession.insert("insertStudent", student);
//提交SqlSession
sqlSession.commit();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
上面代码的注释部分是mybatis基础的下层代码查询流程。。。
第八步:进行测试
这一步需要导入junit的jar,实现测试
package test;
import dao.StudentDao;
import dao.impl.StudentDaoImpl;
import domain.Student;
import org.junit.jupiter.api.Test;
public class StudentTest01 {
@Test
public void insertStudent(){
StudentDao studentDao = new StudentDaoImpl();
Student student = new Student();
student.setName("aaa");
student.setAge(12);
student.setScore(99.0);
studentDao.insertStudent(student);
}
}
结果:
我主要在数据库的连接中出了一点点小小的问题,版本问题,把驱动改了就行了,还有一个时区的问题 。总体来说还算顺利,明天接着学!!!