总结48 Mybatis的理论概念与基础理论应用

概念

在这里插入图片描述
Mybatis是一个用于替代DAO层(实现类)的框架
有了Mybatis层后,Dao层只需要接口,而不需要实现类.
这是因为Mybatis的配置文件带来的功能替代了实现类.
同样的,以后也不会用到JdbcTemplate了

准备

导入Jar包

一.导入数据库的驱动Jar包,此处我以Mysql数据库举例.

  <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.26</version>
        </dependency>

二.导入Mybatis的Jar包

      <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

二.创建核心配置文件

创建一个xml文件,用于Mybatis的核心配置.
文件名任意,但业内规范文件名为’sqlMapConfig.xml’
注意:文件头部的命名空间也要一并导入
具体配置参数详解可以参考如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于数据库连接池:
注意:当处于Mybatis模式下,那么默认的数据库连接池为Mybatis公司自己的连接池
名字为POOLED DataSource,即:’<dataSource type="POOLED">
但是Pooled DataSource连接池性能不如druid和c3p0.
如果我们要修改数据库连接池为duird或者c3p0,那么需要修改核心配置,但这么做非常麻烦.
所以,如果你在学习Mybatis阶段,可以用默认的Pooled DataSource连接池.
但在日常开发中,要更改连接池为druid或c3P0.
格式:

<?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>
    <environments default="从以下的环境ID中选一个,用于耦合到Mybatis">
	<!-- 你可以在配置多个数据库环境,并通过数据库环境的id选出其中一个当作来同Mybatis耦合.'default'的属性值为你所设置的某个数据库环境id -->

        <environment id="自定义第一个数据库环境的ID">
        
					<!-- 指定事务管理类型,如果指定为jdbc的事务管理类型,需要手动用commit方法来提交事务,以更新数据库的增删改 -->
            <transactionManager type="指定事务管理类型,多数为'JDBC'"></transactionManager>
            		
            		<!-- 指定要用哪种数据库连接池 可以直接用Mybatis自带的'POOLED'连接池
            			但性能不及c3p0和druid,如果想要使用后两者,则会相当麻烦,本篇幅先不介绍用法.默认格式
            			以POOLED连接池为准 -->		
            <dataSource type="指定当前数据源的连接池,学习时建议为Mybatis自带的连接池'POOLED'">
            
            	<!-- 为该数据池指定连接参数 -->
                <property name="driver" value="该连接池的驱动包地址"/>
                <property name="url" value="该数据库的链接地址:端口/数据库名称"/>
                <property name="username" value="该数据库的账号"/>
                <property name="password" value="该数据库密码"/>
            </dataSource>
        </environment>

     <environment id="自定义第二个数据库环境的ID">
            <transactionManager type="指定事务管理类型,多数为'JDBC'"></transactionManager>
            <dataSource type="指定当前数据源的连接池,多数为Mybatis自带的连接池'POOLED'">
                <property name="driver" value="该连接池的驱动包地址"/>
                <property name="url" value="该数据库的链接地址:端口/数据库名称"/>
                <property name="username" value="该数据库的账号"/>
                <property name="password" value="该数据库密码"/>
            </dataSource>
     </environment>
    </environments>


<!-- 加载用于替代Dao实现类的SQL配置文件 -->
    <mappers>
        <mapper resource="配置文件在resource目录下的相对路径"></mapper>
    </mappers>

</configuration>

列如:

<?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>
    <environments default="jdbcId">
        <environment id="jdbcId">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/tarveltest"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

    </environments>


<!-- 加载用于替代Dao实现类的SQL配置文件 -->
    <mappers>
        <mapper resource="cn/mybatistest/dao/UserDao.xml"></mapper>
    </mappers>

</configuration>

三.创建SQL操作配置文件

步骤一:创建
SQL语句配置文件用于耦合Dao层的接口,并根据接口中的方法去进行对应的sql操作.
配置文件的格式为xml,配置文件的路径和名称必须同Dao层的实现类完全一致.
在这里插入图片描述
步骤二:耦合目标Dao层的接口
mapper围堵标签用于对指定的Dao接口耦合,并将指定的SQL语句应用到起接口中的指定方法上.
其中namespace属性用于通过Dao接口的路径来耦合Dao接口.
你通过定义多个mapper围堵标签来耦合多个不同的接口.
格式:

<?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="要耦合的第一个Dao接口之路径">
//SQL语句操作的代码体
</mapper>

<mapper namespace="要耦合的第二个Dao接口之路径">
//SQL语句操作的代码体
</mapper>

<mapper namespace="要耦合的第三个Dao接口之路径">
//SQL语句操作的代码体
</mapper>





应用步骤一:SQL操作配置

注意:本篇章介绍的配置方式存在问题,因为实际上未完全应用到Dao接口.
比如无法实际应用到接口方法中的参数.所以当作参考即可.
真正的实际应用方法在Mybatis下一篇文章.

我们可以分别通过select,insert,update,delete这四个围堵标签来耦合指定Dao接口中的指定方法,并通过在其中定义对应的SQL语句来完成增删改查.
这四个围堵标签必须要被在mapper围堵标签内定义.

应用于查询数据

在这里插入图片描述格式:

<mapper namespace="指定要耦合的Dao接口之路径">

    <select id="指定Dao接口中要耦合的方法名" resultType="指定一个实体类的路径,用于以List集合对象的形式存放查询结果">
        此处定义SQL查询语句
    </select>
</mapper>    

列如:

<mapper namespace="cn.mybatistest.dao.UserDao">
            <!-- id属性值必须为Dao接口类中的方法名    resultType属性值必须为实体类的文件路径 它用来让Mybatis作为Dao实现类,自动设置返回值类型,并进行数据封装 -->
    <select id="findInfo" resultType="cn.mybatistest.domain.User">
        SELECT * FROM userinfo
    </select>
</mapper> 

应用于数据添加操作

在这里插入图片描述
格式:

<mapper namespace="指定要耦合的Dao接口之路径">

   <insert id="指定Dao接口中要耦合的方法名" parameterType="指定一个实体类的路径,用来将其成员变量的数值和列名耦合">
        INSERT INTO 表名 VALUES(#{实体类成员变量名})
    </insert>
</mapper>    

列如:

<mapper namespace="cn.mybatistest.dao.UserDao">
 <insert id="userAdd" parameterType="cn.mybatistest.domain.User">
        INSERT INTO userinfo VALUES(#{id},#{username},#{password})
    </insert>

</mapper> 

应用于数据修改操作

在这里插入图片描述
格式:

<mapper namespace="指定要耦合的Dao接口之路径">


<update id="指定Dao接口中要耦合的方法名" parameterType="指定一个实体类的路径,用来将其成员变量的数值和列名耦合">
        UPDATE 表名 SET 列名=#{实体类成员变量名} WHERE 列名=#{实体类成员变量名}
    </update>
</mapper>    

列如:

<mapper namespace="cn.mybatistest.dao.UserDao">
<update id="userSet" parameterType="cn.mybatistest.domain.User">
        UPDATE userinfo SET username=#{username} WHERE id=#{id}
    </update>

</mapper> 

应用于数据删除操作

注意:当只有一个参数,而且参数是简单(基本)类型的时候, #{}里边无论写啥, 都是获取参数本身
在这里插入图片描述
格式:

<mapper namespace="指定要耦合的Dao接口之路径">


 <delete id="指定Dao接口中要耦合的方法名" parameterType="java.lang.Integer">
        DELETE FROM 表名 WHERE 列名=#{实体类成员变量名}
    </delete>
</mapper>    

列如:

<mapper namespace="cn.mybatistest.dao.UserDao">
 <delete id="userDelete" parameterType="java.lang.Integer">
        DELETE FROM userinfo WHERE 列名=#{实体类成员变量名}
    </delete>

</mapper> 

应用步骤二:执行SQL命令

在这里插入图片描述
我们既然在SQL操作配置的文件中配置好了SQL命令
但是我们还未执行,既然要执行,就必须要创建一个类,该类用于充当Service层.

一.创建实体类对象并通过set方法赋值

之所以这么做,是为了通过实体类对象的set方法,将我们欲充填的sql语句参数赋值到实体类对象中.然后把实体类对象作为一个参数,用于执行sql语句.
这一点,同传统的dao实现类的操作方法一样.
列如:

 User userObj = new User();

        userObj.setUsername("nihao");
        userObj.setPassword("testpassword");

二.加载核心配置文件,并返回一个io流对象

格式:InputStream 自定义配置文件IO流对象名 = Resources.getResourceAsStream("核心配置文件名.xml");
列如:

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

三.通过io流对象,获得sqlSession工厂对象

格式:SqlSessionFactory 自定义sqlSeesion工厂对象名 = new SqlSessionFactoryBuilder().build(自定义配置文件IO流对象名);
列如:

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

四.通过sqlSession工厂对象,获得sqlSession对象

格式:SqlSession 自定义sqlSession对象名 = 自定义sqlSession工厂对象名.openSession();
列如:

SqlSession sqlSession = sqlSessionFactory.openSession();

五.执行sql语句,同时将实体类对象作为sql语句的充填参数来传入

1.执行查询语句之格式:
List<实体类名> 自定义查询结果接收名 = 自定义sqlSession对象名.selectList("Dao接口的路径.对应的方法名");
列如:

List<User> userList = sqlSession.selectList("userMapper.findAll");

2.执行数据添加语句之格式:
自定义sqlSession对象名.insert("Dao接口的路径.对应的方法名",实体类对象名);
列如:

sqlSession.insert("cn.mybatistest.dao.UserDao.userAdd",userObj );

3.执行数据修改语句之格式:
自定义sqlSession对象名.update("Dao接口的路径.对应的方法名",实体类对象名);
列如:

  sqlSession.update("cn.mybatistest.dao.UserDao.userSet",userObj );

4.执行数据删除语句之格式:
自定义sqlSession对象名.delete("Dao接口的路径.对应的方法名",基本数据类型的数据);
列如:

sqlSession.delete("cn.mybatistest.dao.UserDao.userDelete",2 );

六.提交事务,让其操作生效

如果我们使用JDBC来当作事务管理器,那么JDBC就默认开启了事务,
因此在进行增删改操作后,需要通过’commit’方法来提交事务,完成数据表的更新.
格式: 自定义sqlSession对象名.commit();

七.释放资源

格式:自定义sqlSession对象名.close();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值