1、学习Mybatis的原因
SSM框架
:Spring+Springmvc+Mybatis
之前Java通过JDBC操作数据库时所使用的方式代码过于冗余,不简洁,每次都需要创建链接、获取数据、封装对象…
而Mybatis框架提供了自动封装对象(查出数据)或者持久化对象(存入数据库等)
框架:别人写好的能够实现一些功能的代码
ORM
框架:Object Relation Mapping
对象关系映射 表----映射-----对象
- 全映射:不用写Sql执行语句,直接操作java代码,例如:Hibernate
- 半映射:Mybatis需要写Sql,但是Sql单独写在xml中,与java代码分离,方便维护
2、Hello Mybatis
1、先要进行导jar包
- mybatis 及依赖包链接MySql数据库包
2、配置资源文件
- 建立主配置文件:Configration.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>
<!-- 读取配置文件jdbc.properties -->
<properties resource="jdbc.properties"></properties>
<!-- 可以配置多个环境 -->
<environments default="development">
<!-- 具体的数据库环境 -->
<environment id="development">
<transactionManager type="JDBC" />
<!-- 数据连接池 -->
<dataSource type="POOLED">
<!-- value的值要注意,不要写错! -->
<property name="driver" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 需要配置映射文件 -->
<mapper resource="cn\xxxx\domain\ProductMapper.xml" />
</mappers>
</configuration>
-
建立jdbc.properties:配置数据库相关信息
-
建立映射文件ProductMapper.xml:配置相关信息 namespace(接口的完全限定名)
id(要求与方法名字一致)
<?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">
<!--
namespace: 命名空间:要求为接口的完全限定名
id: 要求与方法名字一致
parameterType: 接口中定义方法,参数类型传入
resultType : 表中每一行的结果类型
#{id} 接收方法的参数
-->
<mapper namespace="cn.xxxx.dao.IProductDao">
<select id="findOne" parameterType="long" resultType="cn.xxxx.domain.Product">
select * from Blog where id = #{id}
</select>
</mapper>
3、补充dao中接口实现类的代码
只写一个方法做测试
@Override
public Product findOne(Long id) {
String resource = "Configration.xml";
Reader reader;
try {
//读取配置文件
reader = Resources.getResourceAsReader(resource);
//SqlSession的工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
//session: 连接对象
SqlSession session = factory.openSession();
/**
* 映射文件ProductMapper.xml
* 参数1:namespace+id
* 参数2:方法传入的id
* 该方法查询用的是ProductMapper.xml映射关系
*/
Product product = session.selectOne("cn.xxxx.dao.IProductDao.findOne", id);
return product;
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
4、编写单元测试
3、MybatisUtil
抽取上述代码重复的部分,利用单例模式枚举构建MybatisUtil
/**
* @author 53187
* 对重复代码进行抽取
*/
public enum MybatisUtil {
//定义一个枚举的对象
INSTANCE;
//声明一个工厂,只需要一个工厂,在每次加载的时候创建一次
private static SqlSessionFactory factory = null;
static {
try {
factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("Configration.xml"));
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获到SqlSession对象
public SqlSession session(){
return factory.openSession();
}
}
补充CRUD
4、Mapper映射管理器
1、新建Mapper包
2、在包下新建ProductMapper.java接口
3、配置ProductMapper.xml映射文件
5、配置别名、设置日志
1、配置别名:简化在主配置文件中完全限定名过于麻烦
<typeAliases>xxx
<!-- 单个配置:测试时使用 -->
<typeAlias type="cn.xxxx.domain.Dept" alias="Dept" />
<!-- 包的配置:项目中使用,添加了包之后,类名或类名首字母小写就是别名 -->
<package name="cn.xxxx.domain" />
</typeAliases>
2、设置日志
程序执行过程中,打印的一些内容