结构
关于Mybatis的配置,我会从一下两个方面来讲
- mybatis-config.xml 全局配置文件
- mapper.xml sql配置文件
mybatis-config.xml
先附上完整的配置文件,在对配置的内容慢慢讲解
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置数据源的信息 -->
<properties resource="jdbc.properties" />
<!-- 自动扫描类 -->
<typeAliases>
<package name="com.xx.entity"/>
</typeAliases>
<!-- 配置环境default为默认的环境 -->
<environments default="development">
<!-- 环境id,方便环境切换 -->
<environment id="development">
<!-- 配置事务 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.xx.dao"/>
</mappers>
</configuration>
properties
从外部引入了一个properties文件,目的是方便对数据源配置的一些修改,小伙伴注意一下我的dataSourse配置的driver、url的写法是${driver}
、${url}
,并没有实际的值,实际的值其实是放置在jdbc.properties文件里面了
jdbc.properties配置文件如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
typeAliases
你在进行实体映射时需要配置类的全类名才可以找到你需要对应的类
单个实体对应
<typeAliases>
<typeAlias alias="user" type="com.xx.entity.User"/>
<!-- 意思是以后在mapper文件配置实体时,写user等同于写com.xx.entity.User -->
</typeAliases>
自动扫描类
在一个项目中会有许多的实体,如果一个一个的配置会消耗很多不必要的时间,所以有了以下配置
<typeAliases>
<package name="com.xx.entity" />
<!-- 意思是让框架去com.xx.entity包里,将所有的实体类都自动完成对应,名称为类的首字母小写 -->
</typeAliases>
当然你可以自己通过@Alies注释,给实体类起别名
environments
配置Mybatis的运行环境
transactionManager中type的取值
- JDBC:采用 JDBC 方式管理事务,在JNDI数据源中常用
- MANAGED:采用容器方式管理事务,在独立编码中我们常常使用
- 自定义:由使用者自定义数据库事务管理办法,适用于特殊应用
dataSourse中的type的取值
- UNPOOLED:非连接池数据库
- POOLED:连接池数据库
- JNDI:JNDI数据源
- 自定义数据源
mappers
为了引入mapper.xml文件,有四种引入方式
- 用文件名引入
<mappers>
<mapper resource="cn/learn/mapper/userMapper.xml" />
</mappers>
- 用包名引入 (推荐)
<mappers>
<package name="cn.learn.mapper" />
</mappers>
会自动去cn.learn.mapper包中将所有的.xml文件进行引入
- 用类注册引入
<mappers>
<mapper class="cn.zyzpp.mapper.UserMapper" />
</mappers>
- 用userMapper.xml引入
<mappers>
<mapper url="file:///cn/learn/mapper/userMapper.xml" />
</mappers>
mapper.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">
<mapper namespace="test">
<!-- 通过id查询一个用户 -->
<select id="findUserById" parameterType="integer" resultType="com.itheima.domain.User">
select * from user where id=#{id};
</select>
<select id="findUserByUsername" parameterType="String" resultType="com.itheima.domain.User">
select * from user where username like '%${value}%';
</select>
<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.itheima.domain.User">
INSERT INTO user (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address});
</insert>
<!-- 更新用户 -->
<update id="updatetUser" parameterType="com.itheima.domain.User" >
update user set username=#{username} where id=#{id};
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="integer">
delete from user where id= #{id};
</delete>
</mapper>
namespace
命名空间,用于隔离sql,当dao层采用mapper代理的创建方式时,namespace的值必须是接口的全类名
sql语句
- id:statement的id 或者叫做sql的id,必须和方法名对应
- parameterType:声明输入参数的类型
- resultType:声明输出结果的类型,应该填写pojo的全路径
- #{}:输入参数的占位符,相当于jdbc的?
- ${}:相当于直接拼接,不会对参数进行处理
关于mapper.xml只是最基本的用法,关于一对多、多对多的映射会在接下来的文章进行讲解