![9c580df7dc109be777e5f61d70d52153.png](https://i-blog.csdnimg.cn/blog_migrate/2c93bfb06e17b5bbea3198e81338c033.jpeg)
首先MyBatis会利用配置或者代码来生成SqlSessionFactory(工厂接口)
SqlSessionFactory的生成方式有2种:
1、XML方式(强烈推荐这种)
2、代码方式
为什么要说推荐XML方式了,因为代码方式修改很麻烦
重点介绍XML方式实现:
MyBatis的基础配置文件
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE configuration
3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4 "http://mybatis.org//dtd/mybatis-3-config.dtd">
5 <configuration>
6 <typeAliases><!--别名-->
7 <typeAlias alias="role" type="com.learn.ssm.chapter3.pojo.Role"/>
8 </typeAliases>
9 <!--数据库环境-->
10 <environments default="development">
11 <environment id="development">
12 <!--事务管理器-->
13 <transactionManager type="JDBC"/>
14 <dataSource type="POOLED">
15 <property name="driver" value="com.mysql.jdbc.Driver"/>
16 <property name="url" value"jdbc:mysql://localhost:3306/ssm"/>
17 <property name="username" value="root"/>
18 <property name="password" value="123456"/>
19 </dataSource>
20 </environment>
21 </environments>
22
23 <!--映射文件-->
24 <mappers>
25 <mapper resource="com/learn/ssm/chapter3/mapper/RoleMapper.xml"/>
26 </mappers>
27 </configuration>
看基础配置文件,我们会它被分为俩部分
前面的是基础配置文件
下面的是映射文件
基础配置文件中的
<typeAlias>就是把后面type定义的l类的全路径名称转换为Role来记
<dataSource> POOLED表示的MyBatis自带的数据池
它当中的<property>就像是变量,后面的给前面赋值,内容主要是数据库的(这个建议你去学习jdbc)
<mappers>这个是引入映射文件,这个我后面会讲
然后我们怎么通过xml文件构建SqlSessionFactory
SqlSessionFactory SqlSessionFactory = null;String resource="mybatis-config.xml";InputStream inputStream;try{inputStream = Resource.getResourceAsStream(resource);SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}catch(IOException e){ e.printStackTrace();
}
首先我们导入 mybatis-config.xml(就是上上面写的配置文件名字)
然后通过SqlSessionFactoryBuilder的builder的方法创建
下面是组件SqlSesssionFactory
SqlSession是MyBatis的核心接口
就好像jdbc的connection
它只是门面,真正做事情的不是它
它主要的功能有:
1、获取Mapper接口
2、发送SQL语句到数据库
3、实现事务的管理
实现代码:
1 //定义SqlSession变量
2 SqlSession sqlSession = null;
3 try{
4 //开启SqlSession会话
5 sqlSession = SqlSessionFactory.openSession();
6 // some code(中间----业务的实现)
7 //提交业务
8 sqlSession.commit();
9 }catch(Exception ex){
10 //如果无法提交,就回滚,重新开始
11 sqlSession.rollback();
12 }finally{
13 //确保sqlSession关闭成功
14 if(sqlSession!=null){
15 sqlSession.close();
16 }
17 }
关与SqlSession代码中为什么要关闭sqlsession:
因为如果不关闭,系统会崩溃掉
问题:
我开始的时候就介绍MaBytis四个组件间的图,我们知道
SqlSession的获取Mapper接口和发送SQL语句都需要先实现映射器的功能,
但时映射器也可以发送SQL语句,那么我们该怎么选择,或者是最好用什么了???
这个问题,我后面介绍完映射器,我会给答案(p-1)
映射器(最重要和最复杂的组件)
(先来三问)
问题:
1、映射器的定义
2、映射器的组成
3、映射器的作用
我的回答:
1、映射器(SQL Mapper):它是MaBytis新设计的组件,主要是由一个java接口和XML文件组成的,需要给出对应的SQL和映射规则
2、java接口 + XML文件
3、(01)描述映射关系
(02)提供SQL语句,并可以配置SQL参数类型、返回类型、缓存刷新等信息
(03) 提供动态SQL
(04)配置缓存
然后我又有问题:
1、我们怎么实现它,有几种实现方式?
我的回答:
1、它的实现有两种:XML实现和注解实现,
这些方法我们需要先有一个实体类(我直接创建Role)
代码:
public class Role{ private Long id; private String rollName; private String note; //下面就是get和set自动生成的方法,我就不写了 }
我们先看 XML实现映射器
先来一个接口(必要的)
代码:
public interface RoleMapper{ //这个方法就是通过id获取Role对象 public Role getRole(Long id); }
然后开始写它的XML文件(这个重要是发送SQL语句)
<?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">
<mapper namespace="com.learn.ssm.chapter3.mapper.RoleMapper">
`<select id="getRole" parameterType="long" resultType="role">
select id ,role_name as roleName, note from t_note where id = #{id}
</select>
</mapper>
然后我看见这代码我就又有问题:
1、namespace是什么
2、id做什么的,parameter做什么,resultType做什么的
3、#{id}什么意思
我的答案:
1、namespace里面放的是接口的全限定名
2、id没什么意思,就是标记sql语句
parameter是传递给sql语句long类型的参数
resultType是返回值的类型,例子中是Role类型
3、表示传递进去的参数
上面就是完成了,XML方法实现映射器
然后下面我们进行第二种 注解实现映射器的方法
我又想到问题:
1、它跟上面的方法有什么不一样
2、怎么实现
3、优先级对比上面的方法,怎么样
我的回答:
1、注解这个方法,只需要一个接口就好了
2、怎么实现,我直接给代码;
public interface RoleMapper2{
@select(“select id ,role_name as roleName, note from t_note where id = #{id}”);
public Role getRole(Long id);
}
3、XML方法更加优先级
尼姆,终于写完了
我们这个随笔,主要是四个组件的介绍和实现
谢谢大家
看不明白,给个建议。