一、MyBatis相关的配置文件
1.MyBatis的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入MyBatis配置文件格式 -->
<!-- 原本在xml文件中出现的标记,我们可以自己定义 -->
<!-- 自己定义的标签MyBatis框架无法识别 -->
<!-- Mybatis框架自己定义了一套编写核心配置文件的格式 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- MyBatis核心配置文件的根元素 -->
<!-- properties / environments / mappers -->
<configuration>
<!-- properties:引入“XXXX.properties”资源文件到当前核心配置文件 -->
<!-- 通过resources属性引入,被引入的"XXXX.properties"资源文件应该放在src/main/resources目录下 -->
<!-- 如果被引入的"XXXX.properties"资源文件放在src/main/resources目录的子文件夹中,我们应该"子文件夹名称\XXXX.properties" -->
<!-- 被引入进来的资源文件可以在当前核心配置文件中通过"${}"得到资源文件中的数据值 -->
<properties resource="config/mydata.properties"></properties>
<!-- environments:配置MyBatis的数据库连接环境。default属性:默认值是development。 -->
<!-- environment -->
<environments default="development">
<!-- environment:指定具体的数据库连接环境的配置值 -->
<!-- transactionManager / dataSource -->
<environment id="development">
<!-- transactionManager:数据库连接环境的事物管理器 -->
<!-- type属性:决定了事物管理由谁去操作 -->
<!-- JDBC:直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事物作用域-->
<!-- MANAGED:它从来不提交或回滚一个连接,而是让容器来管理事物的整个生命周期(比如 JEE 应用服务器的上下文)
默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为-->
<!-- NOTE:你正在使用Spring+MyBatis,则没有必要配置事务管理器,因为Spring模块会使用自带的管理器来覆盖前面的配置 -->
<transactionManager type="JDBC"></transactionManager>
<!-- dataSource:数据库连接环境的数据源配置,管理数据库连接 -->
<!-- type属性:配置指定是否使用数据库连接池技术 -->
<!-- UNPOOLED:不使用数据库连接池技术 -->
<!-- POOLED:利用“池”的概念将JDBC连接对象组织起来,避免了创建新的连接实例时所必须的初始化和认证时间 -->
<!-- JNDI:这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI 上下文引用 (自定义的连接池)-->
<dataSource type="POOLED">
<!-- 数据库驱动,url,用户名,密码 -->
<property name="driver" value="${mydriver}"/>
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
</environment>
</environments>
<!-- mappers:配置数据访问接口对应的sql映射文件路径/地址 -->
<mappers>
<!-- src/main/resources/PersonMapper.xml -->
<mapper resource="PersonMapper.xml" />
<!-- src/main/resources/com/mapper/PersonMapper.xml -->
<!-- <mapper resource="com/mapper/PersonMapper.xml"/> -->
<!-- 数据访问接口与sql映射文件在同一个包中 -->
<!-- 表示当前配置包中的所有sql映射文件全部加载 -->
<!-- <package name="com.wangxing.mybatistest.mapper"/> -->
<!-- 加载指定数据访问接口对应的sql映射文件 -->
<!-- <mapper class="com.wangxing.mybatistest.mapper.PersonMapper" /> -->
<!-- SQL映射文件不在工程下,而是在本机的指定目录下 -->
<!-- '///'表示本机IP地址 -->
<!-- <mapper url="file:///D:\1wangxing\SSM\MyBatis\20210331MyBatis(2)\PersonMapper.xml"/> -->
</mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
表示xml文件的文件头,说明MyBatis的核心配置文件是一个xml文件。
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
引入MyBatis配置文件的格式。原本在xml文件中出现的标记,我们可以自己定义,但是引入这个MyBatis配置文 件的格式之后,我们就不能在xml文件中自己定义标记了,只能使用MyBatis配置文件的格式提供默认的一组标记。
<configuration></configuration>
MyBatis配置文件的格式提供的MyBatis核心配置文件的根元素。
<properties resource="mydata.properties"></properties>
MyBatis核心配置文件中configuration元素中的子元素,引入“xxxx.properties”资源文件到当前核心配置文件。通过resources属性引入,被引入的“xxxx.properties”资源文件应该放在src/main/resources目录下。如果被引入的“xxxx.properties”资源文件放在src/main/resources目录下的子文件夹中,我们应该“子文件夹名称\xxxx.properties”.被引入进来的资源文件可以在当前核心配置文件中通过"${}"得到资源文件中的数据值
<environments default="development">
MyBatis核心配置文件中configuration元素中的子元素,定义配置MyBatis的数据库连接环境。default属性:默认值是development。
<environment id="development"></environment>
是environments子元素,指定具体的数据库连接环境的配置值。
<transactionManager type="JDBC"></transactionManager>
指明数据库连接环境的事务管理器。它有一个type属性,这个属性的取值就决定了事务管理由谁去操作
type="JDBC " | 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域 |
type="MANAGED" | 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。 <transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager> |
type="NOTE" | 如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置 |
<dataSource type="POOLED">
<property name="driver" value="${mydriver}"/>
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
<dataSource type="POOLED"></dataSource>
指明数据库连接环境的数据源配置【数据库驱动、URL、用户名、密码】
dataSource元素有一个type数据,配置指定是否使用数据库连接池技术。
UNPOOLED | 这个数据源的实现只是每次被请求时打开和关闭连接。虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。 不同的数据库在这方面表现也是不一样的,所以对某些数据库来说使用连接池并不重要,这个配置也是理想的。 |
POOLED | 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。 |
JNDI | 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。 |
<mappers> </mappers>
配置数据访问接口对应的sql映射文件路径/地址的。
具体的配置:
1.核心配置文件中添加SQL映射路径
1.1sql映射文件在resource目录下的子文件夹中
<!-- src/main/resources/com/wangxing/mybatis/mapper/PersonMapper.xml -->
<mappers>
<mapper resource="com/wangxing/mybatis/mapper/PersonMapper.xml"/>
</mappers>
1.2.数据访问接口与sql映射文件在同一个包[数据访问接口所在包]中
可以将整个包中的SQL映射文件全部加载
<mappers>
<package name="com.wangxing.mybatis.mapper"/>
</mappers>
加载指定的SQL映射文件
<mappers>
<mapper class="com.wangxing.mybatis.mapper.PersonMapper"></mapper>
</mappers>
1.3.SQL映射文件不在工程下,而是本机的指定目录下
<mappers>
<mapper url="file:///F:/20200728/MyBatis/PersonMapper.xml"></mapper>
</mappers>
2.Sql映射文件【Mapper文件】
1.名称【与数据访问接口名称一样,后缀名”.xml”】
2.文件中的配置元素及其属性
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入SQL映射文件的格式 -->
<!-- 原本在xml文件中出现的标记,我们可以自己定义 -->
<!-- 自己定义的标记MyBatis框架无法识别 -->
<!-- MyBatis框架自己制定了一套编写核心配置文件的格式 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper:sql映射文件的根元素 -->
<!-- namespace属性:设置数据访问接口的包名+接口名{可写,可不写} -->
<!-- 写了:insert/update/delete/select子元素的id属性就不用写数据访问接口的包名+接口名 -->
<!-- 没写:insert/update/delete/select子元素的id属性就要写出数据访问接口的包名+接口名+方法名 -->
<mapper namespace="com.wangxing.mybatistest.mapper.PersonMapper">
<!-- insert / update / delete / select -->
<!-- id属性:数据访问接口中定义的方法名称【注意:数据访问接口中定义的方法不能重载】 -->
<!-- parameterType:数据访问接口中定义的方法参数 -->
<!-- resultMap:配置查询的结果类型元素【数据库表中的列名称与实体类中的成员变量的名称不同】 -->
<!-- resultType:配置查询的结果类型【数据库表中的列名称与实体类中的成员变量名称相同】 -->
<!-- parameterType:数据访问接口中定义的方法参数 -->
<!-- 1.PoJo类型【对象型】 com.wangxing.mybatistest.bean.PersonBean-->
<insert id="insertPersonPoJo" parameterType="person">
insert into t_person
values(null,#{pername},#{perage},#{peraddress});
</insert>
<!-- 2.基本类型【String,基本类型,封装类】 -->
<!-- 封装类 -->
<!--
<select id="selectPersonById" parameterType="java.lang.Integer" resultMap="personMap">
select * from t_person where per_id=#{perid};
</select>
-->
<!-- 基本类型 -->
<select id="selectPersonById" parameterType="int" resultMap="personMap">
select * from t_person where per_id=#{perid};
</select>
<!-- String -->
<!-- java.lang.String -->
<!--
<select id="selectPersonByName" parameterType="java.lang.String"
resultMap="personMap">
select * from t_person where per_name=#{name};
</select>
-->
<!-- String:String -->
<!--
<select id="selectPersonByName" parameterType="String"
resultMap="personMap">
select * from t_person where per_name=#{name};
</select>
-->
<!-- String:string-->
<select id="selectPersonByName" parameterType="string"
resultMap="personMap">
select * from t_person where per_name=#{name};
</select>
<!-- 3.集合类型【Map】 -->
<!--Map:java.util.Map -->
<!--
<select id="selectPersonByNameAndAge" parameterType="java.util.Map"
resultMap="personMap">
select * from t_person where per_name=#{name} and per_age=#{age};
</select>
-->
<!--Map:Map -->
<!--
<select id="selectPersonByNameAndAge" parameterType="Map"
resultMap="personMap">
select * from t_person where per_name=#{name} and per_age=#{age};
</select>
-->
<!--Map:map -->
<!--
<select id="selectPersonByNameAndAge" parameterType="map"
resultMap="personMap">
select * from t_person where per_name=#{name} and per_age=#{age};
</select>
-->
<!--Map:java.util.HashMap / HashMap / hashMap / hashmap -->
<select id="selectPersonByNameAndAge" parameterType="hashmap"
resultMap="personMap">
select * from t_person where per_name=#{name} and per_age=#{age};
</select>
<!-- resultMap就是完成数据库表的列名与java实体类中的成员变量的映射 -->
<!-- type:查询结果的返回值类型 -->
<!-- id:当前配置的resultMap的名称,方便再select元素引用 -->
<resultMap type="person" id="personMap">
<!-- id元素值专门配置主键列的元素,非主键列全部用result元素 -->
<!-- column属性数据库表的列名 -->
<!-- property属性:java实体类中成员变量的名称 -->
<id column="per_id" property="perid"/>
<result column="per_name" property="pername"/>
<result column="per_age" property="perage"/>
<result column="per_address" property="peraddress"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
表示xml文件的文件头,说明MyBatis的核心配置文件是一个xml文件。
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
引入SQL映射文件的格式。原本在xml文件中出现的标记,我们可以自己定义,但是引入这个SQL映射文件的格式之后,我们就不能在xml文件中自己定义标记了,只能使用SQL映射文件的格式提供默认的一组标记。
<mapper namespace="com.wangxing.mybatis.mapper.PersonMapper">
sql映射文件的根元素,它有一个namespace属性,这个属性是用来设置数据访问接口的包名+接口名。
<insert id="insertPerson" parameterType="com.wangxing.mybatis.bean.Person">
insert into t_person values (null,#{pername},#{perage},#{peraddress});
</insert>----配置插入数据用的sql语句
id---数据访问接口中添加数据方法的方法名称
parameterType----数据访问接口中添加数据方法的参数类型
PoJo类型【对象型】 | com.wangxing.mybatis.bean.Person |
基本类型【String,基本类型,封装类】 | String---java.lang.String 基本类型---int,boolean.. 封装类-----java.lang.Ingeter |
集合类型【list,hashMap】 | java.util.List / java.util.HashMap |
<update id="updatePerson" parameterType="com.wangxing.mybatis.bean.Person">
update t_person set per_name=#{pername},per_age=#{perage},per_address=#{peraddress} where per_id=#{perid};
</update>----配置修改数据用的sql语句
id---数据访问接口中修改数据方法的方法名称
parameterType----数据访问接口中修改数据方法的参数类型
PoJo类型【对象型】 | com.wangxing.mybatis.bean.Person |
基本类型【String,基本类型,封装类】 | String---java.lang.String 基本类型---int,boolean.. 封装类-----java.lang.Ingeter |
集合类型【list,hashMap】 | java.util.List / java.util.HashMap |
<delete id="deletePersonById" parameterType="java.lang.Integer">
delete from t_person where per_id=#{perid};
</delete>---配置删除数据用的sql语句
id---数据访问接口中删除数据方法的方法名称
parameterType----数据访问接口中删除数据方法的参数类型
PoJo类型【对象型】 | com.wangxing.mybatis.bean.Person |
基本类型【String,基本类型,封装类】 | String---java.lang.String 基本类型---int,boolean.. 封装类-----java.lang.Ingeter |
集合类型【list,hashMap】 | java.util.List / java.util.HashMap |
<select id="selectPersonById" parameterType="int" resultMap="personMap">
select * from t_person where per_id=#{perid};
</select>----配置查询数据用的sql语句
id---数据访问接口中查询数据方法的方法名称
parameterType----数据访问接口中查询数据方法的参数类型
PoJo类型【对象型】 | com.wangxing.mybatis.bean.Person |
基本类型【String,基本类型,封装类】 | String---java.lang.String 基本类型---int,boolean.. 封装类-----java.lang.Ingeter |
集合类型【list,hashMap】 | java.util.List / java.util.HashMap |
resultMap---配置查询的结果类型的元素【数据库表中的列名称与实体类中的成员变量的名称不同】
resultType--配置查询的结果类型。【数据库表中的列名称与实体类中的成员变量的名称相同】
<resultMap id="personMap" type="com.wangxing.mybatis.bean.Person">
<id column="per_id" property="perid"></id>
<result column="per_name" property="pername"></result>
<result column="per_age" property="perage"></result>
<result column="per_address" property="peraddress"></result>
</resultMap>
id属性---查询的结果类型的名称,实际上就是select元素中resultMap的属性值
type属性---查询的结果的具体类型【java实体类的类名】
resultMap元素中目前有2类子元素
<id>---配置主键列映射
<result>---配置非主键列映射
column属性----数据库表的列名
property属性---java实体类成员变量的名称