MyBatis框架基本原理

本文详细介绍了MyBatis框架的核心构件,包括SqlMapConfig.xml配置文件、映射文件、SqlSessionFactory、SqlSession、Executor和Mapped Statement。还讲述了如何创建数据库、表、实体类以及对应的映射文件,并提供了SqlMapConfig.xml文件的内容示例。在测试环节,通过单体测试展示了如何使用SqlSession查询数据。
摘要由CSDN通过智能技术生成

3.5 MyBatis框架的核心构件

框架的核心构件这个图要看懂

1).SqlMapConfig.xml配置文件:它是MyBatis的全局配置文件(名称是不固定的),其中配置了数据源、事务等MyBatis的运行环境。

2).映射文件(mapper.xml):配置sql语句。

3).SqlSessionFactory(会话工厂):根据配置文件创建工厂,作用是为了创建SqlSession对象

4).SqlSession(会话对象):是面向程序员的接口,作用是向数据库发出sql语句(增、删、改、查)。

5).Executor(执行器):它是一个接口,是SqlSession内部真正操作数据库的对象。

6).mapped Statement(底层封装对象):对操作数据库存储封装,包括sql语句、输入参数、输出结果类型等。输入参数包括:java数据类型、hashmap和自定义pojo类型。输出结果类型包括:java数据类型、hashmap和自定义pojo类型。

?  ?  ?PreparededStatement对象里面用的占位符, #{}  

ResultSet 里面的每一行的每一个列的值要和每一个java对象中的每一个属性要对应起来。

下载MyBatis框架(Mybatis 3.5)其中:mybatis-3.5.0.jar是核心包,pdf是操作手册,lib目录下的是依赖包。

(1) 在Eclipse(Java EE版本的Eclipse)下创建一个动态web工程。

(2) 导入核心包 mybatis-3.5.0.jar和lib目录下的所有jar文件。

(3) 导入MySQL数据库的驱动包。

(4) 选中工程,创建一个config目录(Source Folder),在其中创建log4j.properties配置文件,内容如下:log4j.rootLogger = debug,stdout

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

  1. 在config目录下,创建SqlMapConfig.xml文件
  2. 在config目录下创建一个sqlmap目录,其中存放映射文件。

4.4 创建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">

<configuration>

<!-- 和spring整合后 environments将废除 -->

    <environments default="development">

        <environment id="development">

        <!-- 使用JDBC事务管理,事务控制由mybatis -->

            <transactionManager type="JDBC"/>

            <!-- 数据库连接池,由mybatis -->

            <dataSource type="POOLED">

                <property name="driver" value="com.mysql.jdbc.Driver"/>

                <property name="url" 

value="jdbc:mysql://localhost:3306/db_mybatis?characterEncoding=utf-8"/>

                <property name="username" value="root"/>

                <property name="password" value="oyhj"/>

            </dataSource>

        </environment>

    </environments>

</configuration>

4.5 创建数据库、表以及对应的实体类

 在MySQL中创建一个名为db_mybatis的数据库。

 在该数据库中创建一个t_user表,表中内容如下,并自行输入若干条记录。

 创建对应的实体类UserInfo,代码略。

4.6创建实体类对应的映射文件(查询单一实体)

映射文件命名:

  1. 原始的MyBatis的命名方式:例如User.xml。
  2. Mapper代理的命名方式:XXXMapper.xml,例如UserMapper.xml

创建User.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" >

<!-- namespace是命名空间, 作用是对sql进行分类化管理-->

<!-- 如果使用mapper代理的方式进行开发,namespace会有特殊的作用-->

<mapper namespace="test">

  <!-- 在映射文件中会配置很多sql语句,通过select标签执行数据库的查询,id:标识映射文件中的sql语句

   由于将sql语句封装到mappedStatement对象中,所以id也称作statement的id

     parameterType:输入参数的类型   #{}表示一个占位符

     .#{id}:其中id表示接收参数的名称,如果参数类型是基本数据类型,名称可以随意

     resultType:指定sql查询结果所输出的java对象类型

   -->

  <select id="findUserById" parameterType="int" resultType="cn.xync.pro.entity.UserInfo">

     select * from userinfo where id=#{id}

  </select>

</mapper>  

在SqlMapConfig.xml文件中加载映射文件:

 <mappers>

    <mapper resource="sqlmap/User.xml"/>

 </mappers>

5.7 单体测试

   @Test

   public void findUserById() throws IOException

   {    //MyBatis主配置文件

   String resource="SqlMapConfig.xml";

   //得到配置文件流

   InputStream input=Resources.getResourceAsStream(resource);

//创建会话工厂对象,传入MyBatis配置文件信息

SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(input);

//通过工厂对象得到会话对象

SqlSession sqlSession=sqlSessionFactory.openSession();

/*通过sqlSession操作数据库

  selectOne方法的第一个参数是映射文件中的statement的id值:spacename+"."+id值

  selectOne方法的第二个参数是和parameterType类型对应的值

  selectOne方法的返回值和ResultType类型对应*/

UserInfo user=sqlSession.selectOne("test.findUserById", 1);

System.out.println(user);

//关闭sqlSession对象

sqlSession.close();

   }

我在创建对象的时候没有在数据库和session对象里面把所有属性一一对应导致在查询的时刻始终查不到对象,最后在检查过后修改了mysql的表里的属性,让元素一一对应起来,最后成功查询到,正确代码如上.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值