Mybatis精华笔记1(ORM,过程详解)
1.理解框架:
半成品、组件、我们软件开发中的一套解决方案。
使用好处:框架封装了很多细节,使开发者可以使用极简方式实现功能,大大提高开发效率。
2.三层架构:
变现层
业务层
持久层:与数据层交互进行增删改查
3.持久层解决方案:
注意:
JDBC技术:规范(不是框架,只是封装,没有提供解决方案)
Connection/prepareStatement/ResultSet
4.Mymatis框架
(1)Mybatis
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
它使用ORM思想,实现了结果集封装。
(2)ORM:Object Relational Mapping(对象关系映射)
简单理解ORM:把数据库表和实体类及实体类的属性对应起来。让我们可以通过操作实体类就实现操作数据库。
(3)环境搭建:
①创建maven工程并导入坐标
②创建实体类和dao的接口
③创建Mybatis的主配置文件 SqlMapConfig.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>
<!-- 配置环境 -->
<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/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>
④创建映射的配置文件.IuserDao.xml
<?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.itheima.dao.IUserDao">//定位作用,哪个Dao里面的哪条SQL语句
<!--配置查询所有-->
<select id="findAll" resultType="com.itheima.domain.User">//告诉mybatis最后查询出来的结果封装到哪里去
select * from user
</select>
</mapper>
注意事项:
①映射配置文件mapper标签namespace必须使dao接口的全限定类名/
②映射配置文件的操作配置(select),id属性的取值必须使dao接口的方法名
③mabatis的映射配置文件位置必须和dao接口的包结构相同
//当我们遵循了以上三点,我们在开发中就无需写dao的实现类
5.Mymatis框架基于xml过程
public static void main(String[] args)throws Exception {
//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最后查询出来的结果封装到哪个实体类中。具体做法就是指定实体类全限定类名。
6.Mymatis框架基于注解
把IUserDao.xml移除,在dao接口的方法上使用@select注解,括号里指定SQL语句。
public interface IUserDao {
/**
* 查询所有操作
* @return
*/
@Select("select * from user")
List<User> findAll();
}
同时在SqlMapConfig.xml文件中,mapper配置时,使用class属性指定dao接口的全限定类名
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件
如果是用注解来配置的话,此处应该使用class属性指定被注解的dao全限定类名
-->
<mappers>
<mapper class="com.itheima.dao.IUserDao"/>
</mappers>
7.Mymatis详解过程
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");//读取类路径下的文件
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//工厂并不是直接创建,而是使用了构建者模式——构建者模式:把工厂对象的创建细节隐藏掉,直接让使用者调用方法就可以拿到工厂对象。
SqlSessionFactory factory = builder.build(in); //builder就是构建者
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession(); //生产SqlSession使用了工厂模式。没有直接new,优势:解耦(降低类之间的依赖关系)。(而不是你今天new session1.明天new session2,程序要不停的重复部署和修改代码。)
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);//创建dao使用了代理模式 代理优势:在不修改源码的基础上对已有方法进行加强。
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();