Mybatis01--MyBatis入门简单案例
什么是框架?
框架就是软件的半成品,已经实现了很多功能,但是这些功能可以解决大部份软件的共性问题,现有的框架和你的产品业务无关,但是可以快速的帮你完成软件框架搭建,功能实现,部署。
好处:开发速度快,周期短,稳定(一个非常初级的工程师都可以使用框架开发出非常稳定,可靠的应用),给了开发者很大的灵活性。
常见的框架有:mybatis,spring,srpingmvc,springboot,springcloud,dubbo,mycat
目的:为了实现高可靠、高并发。
ORM框架
ORM:对象关系映射。简单来说就是数据库中一条数据对应软件中的一个对象。
ORM框架:解决如何将数据库中的数据读取出来,直接转换为对象,将Java中的对象直接保存到数据库中,有时候也会成为持久层框架,数据落地到数据库中,掉电不丢失。
java中常用的ORM
mybatis:非常常用,可以定制化sql语句。
hibernate:逐步淘汰。不需要写sql语句,但是性能相对较差。
jdbcTemplate:底层封装了hibernate
使用JDBC完成ORM的缺点
1.存在大量冗余的代码。
2.需要自己创建Connection、Statement
3.手动封装结果集为实体对象
4.查询效率低,没有对数据访问进行优化
所以mybatis出现,解决这些问题
Mybatis
简单来说,Mybatis就是一款持久层的框架,它可以定制SQL语句、存储过程以及高级映射。MyBatis避免了几乎所有JDBC的代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java对象映射成数据库中的记录。
创建一个简单的mybatis工程
1.创建Mybatis Java工程
2.引入依赖
<dependencies>
<!--
mybatis jar 依赖
-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--
mysql驱动
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
3.创建一个实体类(在数据库中创建student_tb表并与之相对应)
/**
* 学生 与 student_tb 对应
*/
public class Student implements Serializable {
private int id;
private String name;
private int age;
private String sex;
private float height;
public Student() {
}
public Student(int id, String name, int age, String sex, float height) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.height = height;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", height=" + height +
'}';
}
}
4.创建一个接口以及对应的映射
/**
* 通过这个接口可以是实现相应的增删改查
* 现在 不用自己实现这个接口 StudentDao
* 只要需要通过配置xml,告诉mybatis 要实现这个接口
* 还要告诉实现的接口中的方法执行 哪个sql
*
*/
public interface StudentDao {
/**
* 查找所有学生
* select * from student_tb;
* @return
*/
List<Student> findAllStudent();
}
<?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 就是 映射 sql 和 接口的映射
表中列名 和实体类 属性的映射
namespace 命名空间 和mybatis 二级缓存相关
-->
<mapper namespace="com.qfedu.dao.StudentDao">
<!--
select 代表执行 查询sql
id="findAllStudent" 对应namespace="com.qfedu.dao.StudentDao" 的那个方法
resultType="com.qfedu.entity.Student" 返回值类型 类 Student 并且存放到List 中
将每一行结果转化为 student 放到list
-->
<select id="findAllStudent" resultType="com.qfedu.entity.Student">
select id,name,age,sex,height from student_tb
</select>
</mapper>
5.配置mybatis 配置文件
在resources 下创建 mybatisConfig.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">
<!--
mybatis主配置
-->
<configuration >
<!--配置mybatis环境
default="mysql" 选择哪一个环境
-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源
POOLED 连接池形式
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/java2102"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--
<mappers> 配置
-->
<mappers>
<!--
告诉mybatis 要根据配置文件StudentDao.xml 的配置 生成 对应的接口实现类
-->
<mapper resource="com/qfedu/dao/StudentDao.xml"></mapper>
</mappers>
</configuration>
6.创建测试类
public class TestMyBatis01 {
private SqlSession sqlSession;
@Before // 初始化 sqlSession
public void init() throws IOException {
// 读取mybatis "mybatisConfig.xml"
InputStream inputStream = Resources.getResourceAsStream("mybatisConfig.xml");
// 工厂辅助类,帮助初始化 工厂 SqlSessionFactoryBuilder 建造者模式
SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();
//SqlSessionFactory SqlSession 工厂,工厂设计模式
SqlSessionFactory sqlSessionFactory = sessionFactoryBuilder.build(inputStream);
// 创建sql 连接 相当于 jdbc connection
sqlSession = sqlSessionFactory.openSession();
}
@Test
public void finsAllStudentTest(){
//第一种: 调用方法全限定名 不回用
// List<Student> studentList = sqlSession.selectList("com.qfedu.dao.StudentDao.findAllStudent");
// 第二种
// 获取mapper 就是获取 接口StudentDao.class 对应的实现 对象
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
List<Student> studentList = studentDao.findAllStudent();
for (Student student:studentList){
System.out.println("student:"+student);
}
}
@After // 释放连接
public void destroy(){
sqlSession.close();
}
}