1.MyBatis Demo

 

实现学生信息的插入

  1. 安装Mybatis

将相关开发包引入项目中

  1. 定义实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.node.domain;

public class Student {
private Long id;
private String name;
private Integer age;

public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
  1. 定义Dao接口以及接口的实现类,并在接口中定义添加学生的方法
1
2
3
4
public interface StudentDao {

public void insertStudent(Student student);
}
  1. 创建配置文件mybatis.xml

在src目录下创建MyBatis的核心配置文件mybatis.xml

为主配置文件添加头文件约束

在主配置文件中定义MyBatis的运行环境(数据库连接)

在主配置文件中引入SQL映射文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?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>
<!-- 配置Mybatis的运行环境
属性
default 用于指定MyBatis使用哪个运行环境,取值为某个environment的id值
-->
<environments default="mysql">
<!-- 配置Mybatis某个运行环境,可以同时拥有多个environment
属性
type 运行环境的唯一表示,不能与其他的environment相同,内容任意填写
-->
<environment id="mysql">
<!-- 使用事务管理方案
属性
type 使用JDBC管理事务
-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源用于连接数据库
属性
type用于执行连接数据的方式POOLED,使用数据库连接池技术连接数据库
-->
<dataSource type="POOLED">
<!-- 配置数据库连接的四要素 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 引入某个sql映射文件,可以同时拥有多个mapper
属性
resource 用于指定某个SQL映射文件的全限定名
-->
<mapper resource="com/node/dao/StudentDao.xml"/>
</mappers>
</configuration>
  1. 编写SQL映射文件StudentDao.xml

在Dao接口的同级别目录中创建SQL映射文件:StudentDao.xml

为SQL映射文件添加头文件约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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="test">
<!-- 用于执行数据库插入的标签
属性
id 必选属性,是SQL映射的唯一标识,不能与其他SQL映射相同
-->
<insert id="insertStudent">
<!--
#{}使用预编译形式执行SQL语句,#{name}中的name为执行这条语句的参数对象中的属性名,
如果参数对象是一个实体类,那么MyBatis会利用反射调用名为name所对应属性的get方法将数据设置到预编译中
-->
insert into student(name,age) values(#{name},#{age})
</insert>
</mapper>
  1. 接口的实现类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class StudentDaoImpl implements StudentDao{

@Override
public void insertStudent(Student student) {
// 1. 通过I/O流加载主配置文件
InputStream is=null;
/**
读取主配置文件到输入流,参数为主配置文件的路径,
由于主配置文件在src目录,因此直接填写文件名,否则填写全限定名,例如:包名/文件名
*/
try {
is = Resources.getResourceAsStream("mybatis.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// 2. 创建SessionFactory对象
// 加载主配置文件,启动MyBatis运行环境
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);

// 3. 创建SQLSession对象
// SqlSession类似Connection对象,创建一个事务为手动提交的SqlSession对象
SqlSession session = sf.openSession();

// 4. 通过SQLSession对象调用相关的SQL映射执行数据库操作
/**
执行数据的插入,
参数1:某个SQL映射的id值,<insert id="insertStudent"></insert>
参数2:执行这个语句所需要的参数对象,MyBatis通过#{属性名}获取这个对象中的数据并设置到预编译中
*/
session.insert("insertStudent", student);

// 5. 提交事务(增删改操作必须提交事务)
session.commit();

// 6. 关闭SQLSession对象
//如果当前的session没有执行过事务提交或者事务回滚,那么关闭时会自动进行事务的回滚
session.close();
}
}
  1. 测试类
1
2
3
4
5
6
7
8
9
10
11
public class RunMain {
public static void main(String[] args) {
StudentDao dao=new StudentDaoImpl();

Student student=new Student();
student.setAge(23);
student.setName("aa");

dao.insertStudent(student);
}
}