存在问题:
1、使用JDBC操作数据库前进行连接,操作完成后关闭连接,并发量大的情况下影响性能解决:连接池
2、SQL语句硬编码在Java代码中,需求改变需要更改java代码本身解决:将SQL语句放在配置文件中(xml形式),需求发送给变只需要修改配置文件即可
3、返回结果集存在硬编码将数据库中的数据集映射为Java对象
介绍:
中文网址:https://mybatis.org/mybatis-3/zh/index.html
1、MyBatis 是一款优秀的持久层框架,前身是ibatis,apchche旗下的数据库持久层框架
2、它支持自定义 SQL、存储过程以及高级映射。
3、MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
4、MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。
框架原理:
1、通过maven管理依赖
org.mybatis
mybatis
3.4.1
2、全局配置文件(mybatis-config.xml)
3、pojo类(Student)
public class Student {
private Integer SID;
private String Sname;
private String Ssex;
private Integer Sage;
//getter和setter方法省略
}
4、mapper的接口文件(studentmapper.java)
public interface StudentMapper {
//通过id来查询某一个学生信息
public Student selectStudentById(Integer id);
}
5、mapper的配置文件(studentmapper.xml)
6、修改全局配置文件,映射表映射文件
7、mybatis接口调用编码
//指定全局配置文件路径
String resource = "mybatis-config.xml";
//通过mybatis提供的Resource读取文件
InputStream stream = Resources.getResourceAsStream(resource);
//通过SQLSessionFactoryBuilder创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
//获取会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过接口获取对象实例
StudentMapper213 studentMapper213 = sqlSession.getMapper(StudentMapper213.class);
Student213 student213 = studentMapper213.selectStudentById(1);
mybatis使用流程:
1、创建全局配置文件(数据源等、引入映射文件)
2、表的pojo类、mapper接口文件、mapper配置文件
3、通过SqlSessionFactoryBuilder读取配置创建SqlSessionFactory,继而创建SQLSession,再调用方法。
目录结构如下:
全部配置如下:
properties:读取外部资源
例如:
读取配置位置:
setting:全局的参数配置
例如:
typeAliases:类型别名类型别名
是给设定一个较短的名字,他是和XML配置有关,存在的意义是减少全限定名的冗余
mappers:映射器
定义的SQL语句的配置文件,需要告诉mybatis如何找到这些SQL
主要提供了三种形式
mapper.xml配置文件解析
resultMap和resultType的异同点
相同点:指定返回结果的
不同点:
resultType:给定映射的java对象,完成自动映射,如果数据库字段名和java字段一致建议选用resultType
resultMap:需要显性的指定映射关系,如果数据库字段名和java字段不一致必须选用resultMap显性指定映射关系
delete from student where SID = #{id}
编程详解
/**
- SqlSessionFactoryBuilder
- 用来创建sqlSessionFactory会话工厂
- SqlSessionFactory:会话工厂
- 通过读取配置文件创建、配置参数,对文件读取一次即可,可以将SqlSessionFactory设置为单例模式
- 通过SqlSessionFactory创建会话
- sqlSession:会话:
- 对数据库的CRUD操作哦都是通过会话操作,sqlSession是线程不安全的,将会话设置为局部变量
- 一级缓存机制就是sqlSession会话级别的缓存,mybatis默认是开启一级缓存
关于自增id的问题?
如果是设置数据库自增id,建议在插入数据时不用给定id字段插入操作,数据库会自动生成id可以自行插入,插入的id值在数据库没有的情况下可以插入成功
id 1 2 3 4 5 9 10 11
insert 5 X
insert 9 自动插入9是可以插入,再新增id是在9的基础上进行新增



