配置文件解析
- 核心配置文件
<configuration>
<!-- enviromnents环境配置,mybatis可以配置多个环境
default指向默认的环境
每个SqlSessionFactory对应一个环境environment
-->
<environments default="development">
<environment id="development">
<!-- type为事务管理类型
JDBC 和 MANAGED
-->
<transactionManager type="JDBC" />
<!-- 数据源类型type
UNPOOLED - 在每次需要资源时,简单的打开和关闭连接(较为浪费资源)
POOLED - 实现了缓存JDBC连接对象,用于避免每次创建新的数据库连接时都初始化和进行验证,加快程序响应速度
并发web通常都使用这种方法
JNDI - 与应用服务器配合使用
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="chenyu123" />
</dataSource>
</environment>
</environments>
<!-- 定义映射sql语句的文件 -->
<mappers>
<!-- 路径使用'/' -->
<mapper resource="com/eric/entity/user.mapper.xml" />
</mappers>
</configuration>
<environments>
: 环境配置,mybatis可以配置多个环境
default
参数指向默认的环境<environment>
: 配置具体的环境
- 每个
SqlSessionFactory
对应一个environment
<transactionManager>
: 事务管理配置
type
: 有JDBC和MANGED
<dataSource>
: 数据源配置
type
:定义数据源实现类型
- UNPOOLED - 在每次需要资源时,简单的打开和关闭连接(较为浪费资源)
- POOLED - 实现了缓存JDBC连接对象,用于避免每次创建新的数据库连接时都初始化和进行验证,加快程序响应速度,并发web通常都使用这种方法
- JNDI - 与应用服务器配合使用
<property>
: 数据库连接的验证参数
- 每个
<mappers>
: 配置sql语句的映射文件Mapper配置文件
<!-- namespace - 命名空间,为了防止sql语句的id重名
命名规则 - 对应实体类的包名 + 类名/包名 + mapper文件名
-->
<mapper namespace="com.eric.entity.UserMapper">
<!-- 每个操作的id需要唯一
patameterType - sql语句参数类型
resultType - 返回结果类型
useGeneratedKeys="true" - 使用自增主键
-->
<!-- 查询所有用户 -->
<select id="selectAll" resultType="com.eric.entity.User">
select * from user
</select>
<!-- 查询单个用户 -->
<select id="selectUser" resultType="com.eric.entity.User">
select * from user where id = #{id}
</select>
<!-- 添加用户 -->
<insert id="addUser" parameterType="com.eric.entity.User" useGeneratedKeys="true">
insert into user (name, pwd) values(#{name}, #{pwd})
<!-- 参数名称和对象参数名称一致 -->
</insert>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.eric.entity.User">
update user set name=#{name}, pwd=#{pwd} where id=#{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUser">
delete from user where id=#{id}
</delete>
</mapper>
<mapper>
: 配置sql语句的映射
namespace
:
- 命名空间,为了防止sql语句的id重名
- 命名规则: 对应实体类的包名 + 类名/包名 + mapper文件名
<操作名称>
:
- 定义不同操作的sql语句,每个操作的id需要唯一
patameterType
: sql语句参数类型resultType
: 返回结果类型useGeneratedKeys="true"
: 使用自增主键
执行流程
读取核心配置文件,创建SqlSessionFactory
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- 根据resource的核心配置文件,创建相应的SqlSessionFactory
获取SqlSession类
- 通过SqlSessionFactory可以获得SqlSession对象
- 包含对数据库的一系列操作
执行sql语句
- SqlSession类通过mapper文件中的id找到对应的sql语句,并且执行
优化配置文件
导入properties配置文件
在src下创建db.properties文件
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password=chenyu123
在核心配置文件中添加
<properties>
<properties resource="db.properties"/>
数据源中的
<property>
可以调用db.properties文件中的数据<dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource>
别名优化
<typeAliases> <!-- 为指定的类型设定别名 使得在mapper映射文件中可以简化引用 --> <typeAlias type="com.eric.entity.User" alias="User"/> <!-- 为包下所有类指定别名 默认别名:对应的类名 --> <package name="com.eric.entity"/> </typeAliases>
- 在mapper文件中可以直接引用别名