Mybatis精华笔记1(ORM,过程详解)

1.理解框架:

半成品、组件、我们软件开发中的一套解决方案。

使用好处:框架封装了很多细节,使开发者可以使用极简方式实现功能,大大提高开发效率。

2.三层架构:

变现层

业务层

持久层:与数据层交互进行增删改查

 

Mybatis精华笔记1(ORM,过程详解)

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();

 Mybatis精华笔记1(ORM,过程详解)

 Mybatis精华笔记1(ORM,过程详解)