1. Springmvc 操作流程分析:
1. 入口是: DispatcherServlet 这个在web.xml中配置,用来拦截请求;同时在 DispatcherServlet 中设置初始化参数:
contextConfigLocation 用来指定它的核心配置文件的路径:classpath:spring/springmvc.xml;
2. 在核心配置文件中配置有: 处理器映射器, 处理器适配器, 视图解析器(在视图解析器中配置前后缀,这样我们就可以在
controller的返回视图中 简化逻辑视图的编写;)
3. 通过
2. JDBC 操作流程分析:
1.加载驱动:
Class.forName("com.mysql.jdbc.Driver");
2.获得连接:
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123");
3.编写sql语句 ?表示占位符 :
String sql = "select * from user where username = ?";
4.获取预处理statement:
preparedStatement = connection.prepareStatement(sql);
5.设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
preparedStatement.setString(1, "王五");
6.向数据库发出sql执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
3. mybatis 传统方式 操作流程分析:
1.第一步:创建一个SQLSessionFactoryBuilder对象。
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
2.第二步:加载配置文件。
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
3.第三步:创建SQLSessionFactory对象
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
4.第四步:创建SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
5.第五步:使用SqlSession对象执行查询,得到User对象。
//第一个参数:执行查询的statementId ,这个地方使用了 mapper.xml中sql映射;
User user = sqlSession.selectOne("getUserById", 10);
6.第六步:打印结果
System.out.println(user);
7.第七步:释放资源
sqlSession.close();
简单总结:mybatis单独使用时,是直接使用 sqlSession 调用方法完成:CRUD操作;
mapper.xml中的sql映射的使用是通过sqlSession调方法时的第一个参数来实现的;
4. mybatis mapper代理方式 操作流程分析:
1.第一步:创建一个SQLSessionFactoryBuilder对象。
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
2.第二步:加载配置文件。
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
3.第三步:创建SQLSessionFactory对象
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
4.第四步:创建SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
5.获得代理对象 (这个地方使用了mapper.xml中的sql映射生成了代理对象)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
6.使用代理对象: userMapper 进行操作,其实这个 userMapper 就是mapper.xml中sql映射的java代码形式;
5. mybatis单独使用终极总结: mybatis要解决的核心问题是,如何将mapper.xml中的sql映射利用起来;
不论是"传统方式" 还是"mapper代理方式" 核心问题是获得:sqlSessionFactory ---> sqlSession---->
---->1.传统方式:
User user = sqlSession.selectOne("getUserById", 10);
List<User> list = sqlSession.selectList("getUserByName", "张");
sqlSession直接调用方法:在方法中通过statementID 来找到指定 sql语句映射,这样
就使用了映射配置文件中的sql映射配置;
---->2.mapper代理方式:
<!-- mapper代理的开发规则:
1、namespace必须时候接口的全限定名
2、Statementid必须和接口的方法名称一致
3、接口方法的参数类型要和parameterType要一致
4、接口方法的返回值类型要和resultType一致
-->
sqlSession.getMapper(UserMapper.class);
6. spring与mybatis整合:
思路分析: 将mybatis核心配置文件 SqlMapConfig.xml 中配置,迁移到applicationContext.xml中:
我们先来看看SqlMapConfig.xml中配置了什么?
SqlMapConfig.xml中配置的内容和顺序如下:
properties(属性) --------->我们会配置一些连接参数,整合时放入db.properties文件中;
settings(全局配置参数)
typeAliases(类型别名)-------->别名主要用在输入输出映射时,映射类型简写;这个不迁移;
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理) -------->迁移到applicationContext.xml中
dataSource(数据源) -------->迁移到applicationContext.xml中
mappers(映射器) -------->迁移到applicationContext.xml中
注意: 顺序不能颠倒!!!
applicationContext.xml 中的配置:
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- sqlSessonFactory的配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置数据库连接池 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 加载配置文件 -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
</bean>
<!-- 配置包扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置要扫描的包 ,如果扫描多个包使用半角逗号分隔-->
<!-- <property name="basePackage" value="cn.itheima.mybatis.mapper,com.itheima.mybatis.mapper"/> -->
<property name="basePackage" value="com.itheima.mybatis.mapper"/>
</bean>
上边配置中: <!-- 加载配置文件 --> ,<!-- 数据库连接池 -->,<!-- sqlSessonFactory的配置 -->这几个都是基本配置,
最关键的配置是: <!-- 配置包扫描器 --> 因为这个配置用有一个 <!-- 加载配置文件 --> 这个配置文件下有连两个东西:
1. mapper接口
2. mapper映射文件 (用来生成mapper接口的代理实现;)
利用这两个东西,生成了mapper接口的代理实现,这其实已经解决了mybatis的核心问题: 使外置sql语句生效;
这个代理对象是由spring创建的,所以我们可以注入到servcie中;这样就实现了 spring与mybatis整合;