框架的概述以及入门案例

三层架构

界面层(controller—springmvc):和用户打交道,接受用户的请求参数,显示处理的结果

业务逻辑层(service—spring):接受页面的数据,计算逻辑,调用数据库,获取数据

访问数据层(dao—mybaits):访问数据库,实现增删改查

mybaits:

sql mapper:sql映射

​ 可以把数据库中一行数据,映射为一个Java对象,一行数据可以看作一个Java对象,操作这个对象,就相当于操作表中的数据。

Data Access Obiects: 数据访问,对数据库实现增删改查

功能:

  1. ​ 提供了创建connection,statement等能力
  2. 提供了执行sql语句的能力
  3. 提供的sql循环,把sql结果转换为Java对象,list集合的能力
  4. 提供了关闭资源的能力

入门案例

数据库建立表

导入jar包

书写student类

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
package com.zss.pojo;

/**
* @author zss
*/
public class Student {
Integer id;
String name;
String email;
Integer age;

public Student() {
}

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;
}
}

添加xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<!--指定约束文件,mybatis-3-mapper.dtd是约束文件的名称,扩展是dtd文件-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--是当前文件的跟标签,namespace叫做空间命名,可以是自定义的,要求使用dao接口的全名称-->

<mapper namespace="com.zss.dao.StudentDAO">
<!--表示执行查询语句,id表示执行sql语句的唯一标识,resultType=""表示该语句执行成功之后转变的Java对象的类-->
<select id="selectStudents" resultType="com.zss.pojo.Student">
select * from student order by id;
</select>
</mapper>

写入数据库链接

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
<?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相似,表示链接哪一个库-->
<environments default="development">
<!--id表示唯一值-->
<environment id="development">
<!--表示事务类型,type="JDBC"表示使用jdbc中的connection的commit,rollback做事务处理-->
<transactionManager type="JDBC"/>
<!--表示数据源-->
<dataSource type="POOLED">
<!--下面的值name是固定的,无法进行更改-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/school"/>
<property name="username" value="root"/>
<property name="password" value="200101"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--指出映射文件的位置-->
<mapper resource="com/zss/dao/Student.xml"/>
</mappers>
</configuration>

dao类添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.zss.dao;

import com.zss.pojo.Student;

import java.util.List;

/**
* @author zss
*/
public interface StudentDAO {

//查询表的所有数据
public List<Student> selectStudents();


}

实现类

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
package com.zss;

import com.zss.pojo.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;
import java.util.List;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws IOException {
//访问mybaits的数据文件
//定义mybaits的主配置文件的名称,从类路径的根开始
String config= "/mybaits.xml";
//读取这个文件
InputStream in= Resources.class.getResourceAsStream(config);
//创建sqlsessionFactory对象
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//创建sqlsessionfactory对象
SqlSessionFactory factory=builder.build(in);
//获取sqlsession对象,从中获取sqlsession
SqlSession session= factory.openSession();
//指定执行语句的表示,sql映射文件的namespace+.+id
String sqlId="com.zss.dao.StudentDAO"+"."+"selectStudents";
//执行sql语句
List<Student> studentList=session.selectList(sqlId);
System.out.println(studentList);
//关闭对象
session.close();

}
}

插入操作实例

1
2
3
4
5
6
7
8
//指定执行语句的表示,sql映射文件的namespace+.+id
String sqlId="com.zss.dao.StudentDAO"+"."+"insertStudent";
//执行sql语句
// List<Student> studentList=session.selectList(sqlId);
int flag=session.insert(sqlId,new Student(1003,"haha","zss@sina.com",25));
System.out.println(flag);
//注意mybaits默认不会自动提交事务
session.commit();

image-20220502093648550