初识Mybatis
传统JDBC开发模式的痛点:
- 连接参数、SQL语句的硬编码
- 数据库的频繁连接与断开
- 查询结果集取数据的硬编码
如:
//一旦表内容发生更改需要对Java代码进行更改,并重新编译、发布,而且这样写的过程繁琐,不易维护。
while(rs.next){
Teacher teacher = new Teacher();
teacher.setNumber(rs.getInt("number"));
teacher.setName(rs.getName("name"));
....
list.add(teacher);
}
Mybatis的优点也就显现出来:
- SQL映射配置文件:将SQL语句配置在XML或其他非Java的配置文件中,这样即使SQL发生变化,也不需要重新编译Java文件。
<!--Mybatis提供了一种配置文件Mapper.xml(名字可更改),这里取名Mapper.xml, 部分代码如下-->
<mapper namespace="test">
<!--parameterType为输入参数的类型,resultType指定了输出结果集的Java对象类型,这里将结果参数配置表示将单条记录映射成一个Java对象-->
<select id="findUserById" parameterType="int" resultType="cn.com.mybatis.model.User">
SELECT * FROM USER id=#{id}
</select>
</mapper>
<!--在数据源配置文件如: SqlMapConfig.xml中配置Mapper.xml的文件路径-->
<mappers>
<mapper resource="classpath:mapper/UserMapper.xml"/>
</mappers>
- 数据源配置文件
<?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="jdbc.properties"></properties>
<!-- 为JAVA Bean起类别名 -->
<typeAliases >
<!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名
<typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> -->
<!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
<package name="com.wenyin.mybatis.beans"/>
</typeAliases>
<!-- 配置mybatis运行环境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 告知映射文件方式1,一个一个的配置
<mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
<package name="com/wenyin/mybatis/mapper"/>
</mappers>
</configuration>
-
会话工厂和会话
这里最好去看英文比这好理解,SqlSessionFactory和SqlSession,上面的数据源配置文件相当于一份产品说明书,通过SqlSessionFactory查看说明书,生产出相应的产品SqlSession,所以SqlSession就是SqlSessionFactory的一个实例类