1、什么是框架:
是软件开发中的一套解决方案,不同的框架解决的是不同的问题
使用框架的好处:
框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率
2、三层架构
表现层:用于展示数据
业务层:处理业务需求
持久层:和数据库交互
3、持久层技术解决方案
JDBC技术:
Connection
PreparedStatement
Result
Spring的JdbcTemplate
Spring中对Jdbc的简单封装,只是工具类
Apache的DBUtils
其也是工具类
4、mybatis的概述
1) mybatis使一个持久层框架,用Java编写的
2)它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动、创建连接等操作
3)它使用了ORM思想实现了结果集的封装
ORM:Object Relation Mapping 对象关系映射
就是把数据库表和实体类及实体类属性对应起来
让我们可以操作实体类就实现操作数据库表
5、mybatis的环境搭建
1)创建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>org.example</groupId>
<artifactId>mybatis_test1</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>jar</packaging>
<!-- 添加依赖 -->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
2)创建实体类和Dao的接口
public class Student {
private String name;
private String id;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", age=" + age +
'}';
}
}
public interface IStudentDao {
List<Student> findAll();
int saveStudent(Student student);
int updateStudent(Student student);
int deleteStudent(String id);
Student selectStudentById(String id);
}
3)创建Mybatis的主配置文件config约束
<?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">
<!-- mybatis的配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql环境 -->
<environment id="mysql">
<!-- 配置事务类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,使用连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/lxb?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<!-- 如果使用注释来配置的话,此处应该使用class属性指定被注解的dao全限定类名<mapper class="dao的全限定类名"/> -->
<mappers>
<mapper resource="com/lxb/dao/IStudentDao.xml"/>
</mappers>
</configuration>
4)创建映射配置文件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="com.lxb.dao.IStudentDao">
<select id="findAll" resultType="com.lxb.domain.Student">
select * from student;
</select>
<insert id="saveStudent" parameterType="com.lxb.domain.Student">
insert into student(id,name,age) values(#{id},#{name},#{age});
</insert>
<update id="updateStudent" parameterType="com.lxb.domain.Student">
update Student set age=#{age} where id=#{id};
</update>
<delete id="deleteStudent" parameterType="java.lang.String">
delete from Student where id=#{id};
</delete>
<select id="selectStudentById" resultType="com.lxb.domain.Student" parameterType="java.lang.String">
select * from Student where id=#{id};
</select>
</mapper>
5)搭建环境的注意事项
1)在mybatis中把持久层的操作接口名称和映射文件也叫做Mapper
2)在创建目录的时候,和包不一样
包:com.xxx.xxx 是三级结构
目录:com.xxx.xxx 是一级目录
3)mybatis的映射配置文件位置必须和dao接口的包结构相同
4)映射配置文件的mapper标签namespace属性取值必须是dao接口的全限定类名
5)映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
注:满足3、4、5点之后,则无需再写dao的实现类