Update Time:2019-3-6 Author:要你命三千又三千 type:学习笔记
文章目录
Mybatis核心组件
四部分组成
- sqlSessionFactoryBuilder(构造器)
根据代码来生成SqlSessionFactory(builder模式的应用) - SqlSessionFactory(工厂接口)
生成SqlSession
3.SqlSession会话
一个既可以发送SQL执行返回结果,又可以获取Mapper接口。
在使用情形中:一般使用SQL Mapper接口技术,提高代码的可读性和可维护行。 - SQL Mapper(映射器)
组成 java接口和xml 文件(注解)构成。需要给出对应的SQL和映射规则,负责发送SQL并且执行返回结果。
详解
sqlSessioonFactory(工厂接口)
第一步:mybatis使用配置或者代码生成SqlSessionFactory.
mybatis提拱SqlSessionFactoryBuilder来生成。
一是可以通过XML配置文件的方式来构建SqlSessionFactory,
二是可以通过Java API的方式来构建。但不管通过什么方式都有一个Configuration贯穿始终,各种配置正是通过Configuration对象来完成实现
推荐使用xml 文件的形式来生成SqlSessionFactory.
原因:易于修改。
mybatis形成了以SqlSessionFactory为中心。
补充点:SqlSessionFactory作用是,生成SqlSession对象。
使用xml 构建SqlSessionFactory
Mybatis的配置文件分为两类
- 基础配置文件
作用:配置映射关系、SQL、参数等信息
常用名:mybatis-config.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>
<!-- 注意此配置文件内的元素的 -->
<!-- 引入database.properties文件 -->
<properties resource="database.properties"/>
<!--配置mybatis的log实现为LOG4J -->
<!-- 配置后,后台就会有sql语句的输出 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 设置类的别名 -->
<typeAliases>
<!-- <typeAlias alias="User" type="com.wu.pojo.User"/> -->
<!-- 根据包取别名,把包下面的所有类都按类名来取别名,类的全名会转化为类的别名。 -->
<!-- 这用可以简化代码量 -->
<package name="com.wu.pojo"/><!--为当前包以及下面所有的后代包的每一个类都起一个默认别名-->
</typeAliases>
<!--数据库环境-->
<environments default="development">
<environment id="development">
<!-- 配置事务管理 ,采用mybatis的JDBC管理事务-->
<transactionManager type="JDBC"/>
<!-- POOLED是mybatis的数据源 -->
<!-- JNDI是基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- pojo的映射文件UserMapper引入到配入到配置文件中 -->
<mappers>
<!-- resource要写成路径 --><!--映射器-->
<mapper resource="com/wu/dao/UserMapper.xml"/>
<mapper resource="com/wu/dao/RoleMapper.xml"/>
<package name=""/>
</mappers>
</configuration>
SqlSession
SqlSession是核心接口。
有来个实现类DefaultSqlSession和SqlSessionManageer.
作用:
- 获取Mapper接口
- 发送SQL给数据库
- 控制数据库事务
创建方式
SqlSession sqlsession=SqlSessionFactory.openSession();
事务控制
SqlSession sqlsessin=null;
try{
//打开SqlSession会话
sqlSession=SqlSesssionFactory.openSession();
//someCode
sqlSession.commit();
}catch(Exception ex){
sqlSession.rollback();
}finally{
if(sqlSession!=null)
sqlSession.close();
}
映射器的使用
组成
- 接口
- xml文件(注解)
xml配置文件的功能
- 描述映射规则
- 提供Sql语句,并且配置Sql参数类型,返回类型。缓存刷新
- 配置缓存
- 提供动态SQL
映射器的主要作用就是将:SQL查询到的结果映射为一个POJO,或者反向POJO插入到数据库中。并且定义了一些关于缓存等内容。
实现映射器
步骤一:定义接口
package com.learn.ssm.chapter.mapper;
public interface RoleMapper{
public Role getRole(Long id);
}
步骤二:在创建SqlSession的配置文件中添加如下代码
<!--作用:引入一个XML文件,用XML方式创建映射器-->
<mapper resource="com/learn/ssm//chapter3/mapper/RoleMapper.xml"/>
步骤三:创建xml文件
<? version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybaits.org//DTD Mapper 3.0 //EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace是接口的全名-->
<mapper namespace="com.learn.ssm.chapter3.mapper.RoleMapper">
<!--select查询语句 id 标识SQL,long传递long参数,返回一个role类型值-->
<select id="getRole" parameterType="long" resultType="role">
select id, role_name as roleName , note form t_role where id=#{id}
</select>
<mapper>
类别名resultType的role的由来,是下列类的别名。
使用注解实现映射器(不推荐)
import com.learn.ssm.chapter3.pojo.Role;
public interface RoleMapper2{
@Select("slect id ,role_name as roleName,note from t_role where id=#{ id}")
public Role getRole(Long id);
}
说明:完全等同于XML方式创建映射器。
但是推荐使用xml创建Mapper为主。大部分企业都是以xml为主。
SqlSession发送sql
在有了映射器就就可以通过sqlSession 发送sql
Role role=(Role)sqlSession.selectOne("com.learn.ssm.chatper3.mapper.RoleMapper.getRole",1L);
selectOne()方法:使用查询并且返回一个对象,参数是一个String,和Object(long参数)
string 对象是一个命令空间加上SQL id组合而成,定位了一个SQL;
也就是sqlMapper 中的id
<select id="getRole" parameterType="long" resultType="role">
使用mapper接口发送SQL
RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class);
Role role=roleMapper.getRole(1L);
先获取Mapper接口,然后调用方法。