步骤:
实现步骤:
0.创建学生表(id,name,email,age)
1.新建maven项目
2.修改pom.xml
1)加入依赖mybatis依赖,mysql驱动,junit
2)在加入资源插件
3.创建实体类student。定义属性,属性名和列名保持一致
4.创建DAO接口,定义操作数据库的方法.
5.创建xml文件(mapper文件),写SQL语句。
mybatis框架推荐是把sql语句和java代码分开
Mapper文件:定义和Dao接口在同一目录,一个表一个Mapper文件.
6.创建mybaties的主配置文件(xml文件):有一个,放在Resources目录下
1)定义创建连接实例的数据源(DataSource)对象
2)指定其他映射器文件的位置
7.创建测试的内容
使用main方法,测试mybatis访问数据库
也可以使用junit访问数据库
一、数据库
创建学生表
create database springdb
create table student
(
id int null,
name varchar(80) null,
email varchar(80) null,
age int null,
constraint table_name_pk
primary key (id)
);
赋值:
二、maven配置文件
1、新建一个空的Maven项目,删掉src文件夹(个人习惯),再新建maven模块
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">
<modelVersion>4.0.0</modelVersion>
<!--当前项目的坐标-->
<groupId>com.vvu</groupId>
<artifactId>ch01-first</artifactId>
<version>1.0-SNAPSHOT</version>
<!--依赖列表-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
<!--资源插件: 处理src/main/java目录中的xml文件-->
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
三、Java文件
1、实体类(entity)
Student.class
package com.vvu.entity;
public class Student {
//属性名跟列名一致
private int id;
private String name;
private String email;
private int age;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
public Student() {
}
public Student(int id, String name, String email, int age) {
this.id = id;
this.name = name;
this.email = email;
this.age = age;
}
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2、dao包
接口:StudentDao
package com.vvu.dao;
import com.vvu.entity.Student;
public interface StudentDao {
//查询一个学生
Student selectStudentById(Integer id);
}
mapper文件:StudentDao.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">
<mapper namespace="com.vvu.dao.StudentDao">
<!-- 1.约束文件
Http://mybatis.org/dtd/mybati-3-mapper.dtd
约束文件作用:定义和限制当前文件中可以使用的标签和属性,以及标签出现的顺序.
2.mapper是根标签
namespace:命名空间,必须有值,不能为空。唯一值.
推荐使用DAO接口的全限定名称.
作用:参与识别sql语句的作用.
3.在mapper里面可以写<insert> ,<update>,<delete>,select>等标签。
<insert>里面是insert语句,表示执行的insert操作
<update>里面是 update语句
<DELETE>里面是删除语句
<select>里面是select语句
-->
<!-- <select id="selectBlog" resultType="Blog">-->
<!-- select * from Blog where id = #{id}-->
<!-- </select>-->
<!--查询一个学生student
<select>:表示查询操作,里面是select语句
id:要执行的sql语句的唯一标识,是一个自定义字符串。推荐使用道接口中的方法名称
resultType:告诉mybatis,执行sql语句,把数据赋值给那个类型的java对象。resultType的值现在使用的java对象的全限定名称
-->
<!--查询一个学生student-->
<select id="selectStudentById" resultType="com.vvu.entity.Student">
select id,name,email,age from student where id=1001
</select>
</mapper>
四、MyBatis配置文件
参考:mybatis官网
主配置文件:放在resources包
mybatis.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>
<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/springdb?userUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--
指定其他mapper程序文件的位置:
其他其他mapper程序文件目的是找到其他文件的sql语句
-->
<mappers>
<!--
使用mapper的resource属性指定mapper文件的路径。
这个路径是从target/classes路径开启的
使用注意:
resource=“mapper文件的路径,使用 / 分割路径”
一个mapper resource指定一个mapper文件
-->
<mapper resource="com/vvu/dao/StudentDao.xml"/>
</mappers>
</configuration>
注意:这里本地数据库是MySQL,版本8.0以上,maven添加的依赖也要是8.0以上
所以,这里Driver路径多了"cj",
另外,需要注意时区问题:参考jdbc连接MySQL时区问题
五、测试一下
test包
package com.vvu;
import com.vvu.entity.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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class MyTest {
//测试
@Test
public void testSelectStudentById() throws IOException {
//调用mybatis某个对象的方法,执行mapper文件中的sql语句
//mybatis核心类:SqlSessionFactory
//1、定义mybatis主配置文件的位置,从类路径开始的相对路径
String config = "mybatis.xml";
//2、读取主配置文件。使用mybatis框架中的Resources类
InputStream inputStream = Resources.getResourceAsStream(config);
//3、创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder类
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//4、获得SqlSession对象
SqlSession session = factory.openSession();
//5、指定要执行的sql语句的 id
// sql的id = namespace + "." + select|update|insert|delete标签的id属性值
String sqlId = "com.vuu.dao.StudentDao" + "." + "selectStudentById";
//6、通过SqlSession的方法,执行sql语句
Student student = session.selectOne(sqlId);
System.out.println("使用mybatis查询一个学生:"+student);
//7、关闭SqlSession对象
session.close();
}
}
运行结果: