Mybatis学习笔记——1

Mybatis的核心组件

  • SqlSessionFactoryBuild(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建Builder模式。
  • SQLSessionFactory(工厂接口):依靠他来生成SqlSession,使用的是工厂模式。
  • SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是Mybatis提供的SQL Mapper接口编程技术,它能提高代码的可阅性和可维护性。
  • SQL Mapper(映射器):Mybatis新设计存在的组件,它有一个Java接口和XML文件构成(还可以由注解完成,个人用的都是XML),需要给出对应的SQL和映射规则。它赋值发送SQL执行,并返回结果。
  • 运行流程 SqlSessionFactoryBuild(构造器)—>(通过配置或者代码)—>SqlSessionFactory(工厂接口)—>SqlSession(会话)---->(发送SQL语句)—>SQL Mapper(映射器)----->数据库

这里附上代码,来自于书《Java EE互联网轻量型级框架整合开发》
链接:https://pan.baidu.com/s/1X6-NlcybWaXTA0Gl0jVJlw
提取码:zswh

SqlSessionFactory(工厂接口)

在Mybatis中,可以通过xml文件生成SqlSession,也可以通过Java代码形式去生成SqlSessionFactory。推荐使用XML的形式去生成。
XMl构建SqlSessionFactory

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">
<configuration>
  <typeAliases><!-- 别名 -->
      <typeAlias alias="role" type="com.learn.ssm.chapter3.pojo.Role"/>
  </typeAliases>
  <!-- 数据库环境 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/chapter3"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 映射文件 -->
  <mappers>
    <mapper resource="com/learn/ssm/chapter3/mapper/RoleMapper.xml"/>
    <mapper class="com.learn.ssm.chapter3.mapper.RoleMapper2"/> 
  </mappers>
</configuration>

Mybatis基础配置文件:

  • < typeAlias>元素定义了一个别名role,它代表着com.learn.ssm.chapter3.pojo.Role这个类。定义完以后,可以在Mybatis的上下文使用别名去替代全限定名了。
  • < environment>元素的定义,这里描述的是数据库。它里面的元素是配置事务管理器.
    dataSource元素配置数据库,其中属性type=“POOLED”代表采用Mybatis内部提供了连接池方式。最后定义了一些JDBC的属性信息。
  • < mapper> 元素代表引入的那些映射器

通过读取配置文件mybatis-config.xml然后通过SqLSessionFactoryBuilder的Builder方法去创建SqlSessionFactory。在Mybatis中,采用Builder模式为开发者隐藏了这部分细节,只需重点SqlSessionFactory被创建出来,就好了。

SqlSession

在使用XML配置免去了我们创建SQLSessionFactory,下一步我们去创建SqlSession。我们先去了解一下SqLSession
在Mybatis中,SqlSession是其中核心接口。在Mybatis中有两个实现类,DefaultSqlSession和SqlSessionManager。DefaultSqlSession是单线程使用的,而SqlSessionManager在多线程环境下使用。SqlSession的作用类似于一个JDBC中的Connection对象,代表着一个连接资源的启用,具体功能有3个:

  • 获取Mapper接口
  • 发送SQL给数据库
  • 控制数据库事务

映射器

映射器是Mybatis中最重要、最复杂的组件,它由一个接口对应的XML文件或注解组成。提供以下功能

  • 描述映射规则
  • 提供SQL语句,并可以配置SQL参数类型、返回类型、缓存刷新等信息
  • 配置缓存
  • 提供动态SQL

写一个例子来实现,pojo类 Role

public class Role{
	private Long id;
	private String roleName;
	private String note;
}

使用XML实现映射器

映射器接口:RoleMapper

public interface RoleMaper{
	public int insertRole(Role role);
public int deleteRole(Long id);
public int updateRole(Role role);
public Role getRole(Long id);
public List<Role> findRoles(String roleName);
}

配置XML

<mapper resource="com.sx.Mapper.UserMapper.xml">

实现UserMapper接口,UserMapper.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.learn.ssm.chapter3.mapper.RoleMapper">

	<insert id="insertRole" parameterType="role">
		insert into t_role(role_name, note) values(#{roleName}, #{note})
	</insert>

	<delete id="deleteRole" parameterType="long">
		delete from t_role where id= #{id}
	</delete>

	<update id="updateRole" parameterType="role">
		update t_role set role_name = #{roleName}, note = #{note} where id= #{id}
	</update>

	<select id="getRole" parameterType="long" resultType="role">
		select id,
		role_name as roleName, note from t_role where id = #{id}
	</select>

</mapper>

这样就完成了一个映射器,先看XML属性

  • < mapper >元素中的属性namespace所对应的是一个接口的全限定名,于是Mybatis上下文就可以通它找到相对应的接口。
  • < select >元素表名这是一条查询语句,而属性id标识了这条SQL,属性parameterType="long"说明传递给SQL的是一个long型参数,而resultType=“role”表示了返回的是Role类的对象。而role是之前配置文件mybatis-config.xml配置的别名。
  • 这条SQL语句中的#{id}表示传递进去的参数。

猜你喜欢

转载自blog.csdn.net/Richard331/article/details/84728677