框架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 |
id | SQL映射语句的唯一标识,称为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)
JavaLearn#(26)MyBatis基础:认识框架MyBatis环境搭建基本CRUD配置文件日志管理别名属性文件ThreadLocal保存sqlSession本地DTD模板
Mybatis框架学习笔记 --- [懒加载配置 应用到嵌套查询]
JavaLearn#(26)MyBatis基础:认识框架MyBatis环境搭建基本CRUD配置文件日志管理别名属性文件ThreadLocal保存sqlSession本地DTD模板