mybatis入门
目录1. 什么是框架?
它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。
使用框架的好处:
- 框架封装了很多细节,使开发者可以使用极简的方式实现功能,大大提高开发效率
2. 三层架构
- 表现层:用于展示数据的
- 业务层:用于处理业务需求的
- 持久层:和数据库交互的
3. 持久层技术解决方案
-
JDBC技术(最基础),使用如下些对象
- Connection
- PreparedStatement
- ResultSet
-
spring的JDBCTemplate
- 是对jdbc的简单封装
-
Apache的DBUtils
- 他和spring的JDBCTemplate很像,也是对jdbc的简单封装
-
以上这些都不是框架
- jdbc是规范
- spring的JDBCTemplate和Apache的DBUtils都只是工具类
4. mybatis的概述
- mybatis是一个用java编写的持久层框架
- 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而不用关注注册驱动,创建连接等繁杂的过程
- 它使用了ORM思想实现了结果集的封装
-
ORM:Object Relation Mapping 对象关系映射
-
就是把数据库表的字段和实体类的属性对应起来(即有映射关系),一条记录对应一个实体类的实例化对象
-
user表 User类 id userId name userName
-
5. mybatis的入门
环境搭建
第一步:创建maven过程并导入坐标
<dependencies>
<!--这2个必要-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.1</version>
</dependency>
<!--方便单元测试用-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
第二步:创建实体类和dao接口
实体类User:
package com.chajiu.pojo;
public class User {
Integer id;
String name;
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
IUserDao接口:
package com.chajiu.dao;
import com.chajiu.pojo.User;
import java.util.List;
public interface IUserDao {
List<User> findAll();
}
第三步:创建Mybatis的主配置文件 SqlMapConfig.xml
首先导入命名空间,此段可以mybatis官网找到:
<?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">
全部:
<?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">
<!--配置数据库连接的4个基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/chajiu_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
</configuration>
第四步:创建映射配置文件 IUserDao.xml,对应于IUserDao这个dao。
目录是: image.png在resources下建文件夹,一个个建。
命名空间可以复制这个,也可以去mybatis官网找到
<?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">
<!--namespace 为dao 的全限定类名-->
<mapper namespace="com.chajiu.dao.IUserDao">
<!--select 的 id 必须和方法名一致-->
<!--为了让查询能够放入实体类中,需要配置-->
<select id="findAll" resultType="com.chajiu.pojo.User">
select * from user
</select>
</mapper>
第五步:完善主配置文件,添加和映射配置文件的关系
配置文件关系.png
加在configuration
中间
<!--和每个dao的配置文件配置映射关系-->
<mappers>
<mapper resource="com/chajiu/dao/IUserDao.xml"/>
</mappers>
全部:
<?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">
<!--配置数据库连接的4个基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/chajiu_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/chajiu/dao/IUserDao.xml"/>
</mappers>
</configuration>
环境搭建注意事项
-
mybatis的映射配置文件位置必须和dao接口的包结构相同
-
映射配置文件的mapper标签中namespace属性取值必须是dao接口的全限定类名
-
映射配置文件的操作配置(select),id属性必须是dao接口的方法名
满足以上几点后,我们在开发中无需手动编写dao接口的实现类,只要用代理对象代理即可实现dao功能。
6. mybatis入门案例
main中:
//1. 读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
//2. 创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
//3. 使用工厂生产SqlSession对象
SqlSession session=factory.openSession();
//4. 使用SqlSession创建Dao接口的代理对象
IUserDao userDao=session.getMapper(IUserDao.class);
//5. 使用代理对象执行方法
List<User> users=userDao.findAll();
for (User user:users) {
System.out.println(user);
}
//6. 释放资源
session.close();
in.close();
注意:不要忘记在映射配置文件中告知mybatis要封装到哪个实体类中。使用resultType
告知
结果:
image-20200131144049196.png7. 使用注解配置mybatis
-
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并制定sql语句
-
同时在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名
public interface IUserDao { @Select("select * from user") List<User> findAll(); } <mappers> <mapper class="com.chajiu.dao.IUserDao"/> </mappers>
8. 自定义mybatis的分析
mybatis在使用代理实现dao的增删改查时做了什么事呢?
- 只有两件事
- 第一:创建代理对象
- 第二:在代理对象中调用selectList方法
网友评论