文章目录
一.mybatis提供的功能
1.创建Connection,Statement,ResultSet的能力
2.执行sql语句的能力
3.将sql结果转为Java对象,List集合的能力,操作该对象,就相当于操作数据库表中数据
4.关闭资源的能力
开发人员只需提供sql语句
二.第一个mybatis例子
1.新建student表
2.在pom.xml中加入maven的mybatis坐标和mysql驱动坐标
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
3.创建实体类Student(用来保存表中的一行数据)
package com.xhy.eneity;
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
4.创建持久层的dao接口,定义操作数据库的方法
package com.xhy.dao;
import com.xhy.eneity.Student;
import java.util.List;
public interface StudentDao {
public List<Student> selectStudents();
}
5.创建sql映射文件(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.xhy.dao.StudentDao">
<select id="selectStudents" resultType="com.xhy.eneity.Student">
select id,name,email,age from student order by id;
</select>
</mapper>
sql映射文件说明:
sql映射文件(sql mapper):写sql语句,mybatis会执行这些sql语句
1.指定约束文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mybatis-3-mapper.dtd是约束文件的名称
约束文件的作用是:限制检查当前文件出现的标签,必须符合mybatis的要求
2.mapper是当前文件的根标签
namespace:命名空间,唯一值的。要求使用dao接口的全限定名称。也就是(com.xhy.dao.StudentDao)
3.在当前文件中,可以使用特定的标签来执行数据库的操作
<select> <update> <insert>
例:
<select id="selectStudents" resultType="com.xhy.eneity.Student">
select id,name,email,age from student order by id;
</select>
id:是这条sql语句的唯一标识,mybatis通过id来找到要执行的sql语句,要求使用接口中的方法名称
resultType:要求返回的类型,是遍历resultset得到Java对象的类型,值为类型的全限定名称。也就是(com.xhy.eneity.Student)
6.创建mybatis的主配置文件(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>
<!--环境配置:数据库的连接信息
default:必须和某个environment的id值一致,它告诉mybatis要访问哪个数据库
-->
<environments default="mydev">
<!--environment:一个数据库信息的配置,环境
id:一个唯一值,自定义,表示环境的名称
-->
<environment id="mydev">
<!--transactionManager:mybatis的事务类型
type:JDBC(表示使用jdbc中Connection对象的commit和rollback做事务处理)
-->
<transactionManager type="JDBC"/>
<!--dataSource:数据源,连接数据库的
type:表示数据源的类型,POOLED表示使用连接池
-->
<dataSource type="POOLED">
<!--数据库连接信息driver,url,username,password,都是固定值-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!--sql mapper(sql映射文件的位置)-->
<mappers>
<!--一个mapper标签指定一个文件的位置
要写从类路径开始的路径信息
-->
<mapper resource="com/xhy/dao/StudentDao.xml"/>
</mappers>
</configuration>
主配置文件说明:
mybatis的主配置文件:定义了数据库的配置信息和sql映射文件的位置
1.<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
约束文件,mybatis-3-config.dtd是约束文件的名称
2.<configuration>是配置信息
7.通过mybatis访问数据库
public class MyApp {
public static void main(String[] args) throws Exception {
//访问mybatis读取student数据
//1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes)
String config = "mybatis.xml";
//2.读取这个config表示的文件
InputStream in = Resources.getResourceAsStream(config);
//3.创建了SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4.创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(in);
//(重要)5.获取SqlSession对象,从SqlSessionFactory中获取sqlSession
SqlSession sqlSession = factory.openSession();
//(重要)6.指定要执行sql语句的标识,sql映射文件中的namespace+"."+标签的id值
String sqlId = "com.xhy.dao.StudentDao"+"."+"selectStudents";
//7.执行sql语句,通过sqlId找到语句
List<Student> studentList = sqlSession.selectList(sqlId);
//8.输出结果
for (Student stu:studentList){
System.out.println(stu);
}
//9.关闭sqlSession
sqlSession.close();
}
}
8.运行结果
Student{id=111, name='查斗', email='查斗@111', age=80}
Student{id=222, name='魏召庆', email='魏召庆@222', age=85}