框架mybatis属性配置说明

Posted 念奕玥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架mybatis属性配置说明相关的知识,希望对你有一定的参考价值。

mybatis入门实例中,有关于mybatis的设置,这里做一下具体的说明记录。

mybatis-config.xml

在下载mybatis包时,压缩包里也会有相应的说明文档。文档里有给属性xml文件的一个简单例子:

这个例子里给出了配置的最主要部分。注意 XML 文档所需的 XML 标头。 environment 元素的主体包含事务管理和连接池的环境配置。 mappers 元素包含一个映射器列表——包含 SQL 代码和映射定义的 XML 文件和/或带注释的 Java 接口类。
另外,官网文档中也给出了配置文档的顶层结构:

各个属性的前后顺序在配置时不能乱。

mybatis入门实例中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>
    <properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--连接数据库的四个基本信息-->
            <dataSource type="POOLED">
                <property name="driver" value="$jdbc.driver"/>
                <property name="url" value="$jdbc.url"/>
                <property name="username" value="$jdbc.user"/>
                <property name="password" value="$jdbc.password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/stuMapper.xml"/>
    </mappers>
</configuration>

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。从 XML 文件中构建 SqlSessionFactory 的实例可以使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

具体说明,更详细的可以查看这里

  • property:dataSource中的property元素就是数据库相关的配置信息。
  • environments:配置当前的环境,default属性有development和work两种选择,默认是development开发模式,work是工作模式。
  • environment:配置每个environment定义的环境,可以配置多个运行环境,但是每个SqlSessionFactory实例只能选择一个运行环境。如果想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推。总结起来就是每个数据库对应一个 SqlSessionFactory 实例。其id属性也有development和work两种选择,并且必须和上面的default属性一致。如果配置了两个相同的environment,Mybatis会用后面的覆盖掉前面的。
  • transactionManager:配置事务管理器类型,type属性中有JDBC和MANAGED两种,一次只能配置一个。
    JDBC使用JdbcTransactionFactory工厂生成的JdbcTransaction对象实现,以JDBC的方式进行数据库的提交、回滚等操作,它依赖于从数据源得到的连接来管理事务范围。
    MANAGED使用ManagedTransactionFactory工厂生成的ManagedTransaction对象实现,它的提交和回滚不需要任何操作,而是把事务交给容器进行处理,默认情况下会关闭连接,如果不希望默认关闭,只要将其中的closeConnection属性设置为false即可。
  • dataSource:配置数据源类型,type属性有UNPOOLED、POOLED和JNDI三种选择:
    UNPOOLED(UnpooledDataSourceFactory):采用非数据库池的管理方式,每次请求都会新建一个连接,并用完后关闭它,所以性能不是很高。该方式适用于只有小规模数量并发用户的简单应用程序上。
    POOLED(PooledDataSourceFactory):采用连接池的概念将数据库链接对象Connection组织起来,可以在初始化时创建多个连接,使用时直接从连接池获取,避免了重复创建连接所需的初始化和认证时间,从而提升了效率,所以这种方式比较适合对性能要求高的应用中。在开发或测试环境中经常用到此方式。
    JNDI(JndiDataSourceFactory):数据源JNDI的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。在生产环境中优先考虑这种方式。

SQL映射

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。
mybatis入门实例中的sql映射如下:

<?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属性:表示命名空间,用来设定当前Mapper配置文件的唯一标识,将来在Java程序中通过namespace属性的值来定位到这个配置文件 -->
<!-- namespace属性值设置的方式:名字可随便取,但推荐以相对应的Mapper接口的全类名,例如com.thr.mapper
.StudentMapper -->
<mapper  namespace="com.gy.mapper.StuMapper">
<!--    查询所有学生的信息-->
    <select id="selectAllStu" resultType="com.gy.entity.Student">
        select * from stuinfo;
    </select>
<!--    通过id来查询一个学生-->
    <select id="selectStuById" parameterType="int"
            resultType="com.gy.entity.Student">
        select * from stuinfo where id=#id;
    </select>
    <!-- 模糊查询,根据stuName字段查询用户-->
    <select id="selectStuByName" parameterType="string"
            resultType="com.gy.entity.Student">
        select * from stuinfo where stuName like '%$value%';
    </select>
    <!-- 添加学生-->
    <insert id="insertStu" parameterType="com.gy.entity.Student">
        insert into stuinfo(stuName,age) values (#stuName,#age);
    </insert>
    <!-- 根据Id更新学生信息 -->
    <update id="updateStu" parameterType="com.gy.entity.Student">
        update stuinfo set stuName = #stuName,age=#age where id = #id;
    </update>
    <!-- 根据Id删除学生 -->
    <delete id="deleteStu" parameterType="int">
        delete from stuinfo where id = #id
    </delete>
</mapper>
相关属性 描述
namespace命名空间,用来设定当前Mapper配置文件的唯一标识,将来在Java程序通过namespace属性的值来定位到这个配置文件,namespace属性值的名字可以随便取,但是推荐以相对应的Mapper接口的全类名,例如com.xxx.mapper.StuMapper
idSQL映射语句的唯一标识,称为statement的id,将SQL语句封装到mappedStatement对象中,所以将id称为statement的id
parameterType指定输入参数的类型
resultType指定输出结果类型。Mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到List容器中,推荐使用resultMap
#value#value表示SQL语句的占位符,相当于JDBC中的”?”它会自动进行java类型和jdbc类型转换, #value里面参数写啥都可以,但是不能空着,如#Id#name#value可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#括号中可以是value或其它名称。#value可以有效防止SQL注入
$value$value表示拼接SQL字符串,将接收到的参数在不进行jdbc类型转换的情况下拼接在SQL语句中,$value里面必须要写参数,不然会报错。$可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,$括号中只能是value。使用$value会造成 SQL注入,所以尽量不要使用

以上是关于框架mybatis属性配置说明的主要内容,如果未能解决你的问题,请参考以下文章

mybaties数据源配置类型(POOLEDJNDIUNPOOLED)

Mybatis 框架学习—— 配置优化

Mybatis框架—核心配置文件

JavaLearn#(26)MyBatis基础:认识框架MyBatis环境搭建基本CRUD配置文件日志管理别名属性文件ThreadLocal保存sqlSession本地DTD模板

Mybatis框架学习笔记 --- [懒加载配置 应用到嵌套查询]

JavaLearn#(26)MyBatis基础:认识框架MyBatis环境搭建基本CRUD配置文件日志管理别名属性文件ThreadLocal保存sqlSession本地DTD模板