Mybatis基础学习(一)
写在最前的话
第一次写博客,讲一下关于Mybatis的知识,也是对自己的总结。如果有所错误,欢迎帮忙改正错误
Mybatis的基础(一)
什么是mybatis:
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
上面的对于初学者来说也是易于理解的:简单的来说Mybatis几乎代替了JDBC的功能,是一款用于操作数据库的框架。和Mybatis类似的还有hibernate但各有各自的优缺点。
MyBatis的核心组件
SqlSessionFactoryBuiler(构造器)
它会根据xml配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builer模式。
SqlSessionFactory(工厂接口)
依靠它来生成SqlSession,采用工厂模式
SqlSession(会话)
一个即可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是myBatis提供的
SQL Mapper(映射器)
MyBatis新设计存在的组件,它由一个java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。它负责发送SQl去执行,并返回结果。
注意,无论是映射器还是SqlSession都可以发送SQL到数据库执行。
Mybatis的应用
每个基于Mybatis的应用都是以一个SqlSessionFactory的实例为中心的,而SqlSessionFactory唯一的作用就是生产MyBatis的核心接口对象SqlSession,所以它的责任是唯一的。我们往往会采用单例模式处理它。
首先,在MyBatis中的XML文件分为两类,一类是基础配置文件,通常只有一个,主要是配置一些最基本的上下参数和运行环境;另一类是映射文件,它可以配置映射关系、SQL、参数等信息。
下面来看一下最基本的使用。
导入实体类entity(domin)
要导入的实体类要满足以下的条件:
- 基本类型与数据当中一致。
- 满足javabean规范:即有get与set方法。 满足javabean规范:即有get与set方法。
例如:
entity代码:
package cn.java.entity;
public class User {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
Mybatis的基础配置文件
下面为mybatis的基础配置文件的主要配置
<?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>
<!-- 配置数据库连接环境:driver、url、username、password -->
<environments default="mysql">
<!-- 开始配置mysql -->
<environment id="mysql">
<!--配置事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据名"/>
<property name="username" value="账号"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<!-- 关联局部配置文件 -->
<mappers>
<mapper resource="cn/java/mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 首先是配置头
<?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">
配置头放在mybatis基础配置文件的头部,随着版本的更新而改变
-
根标签
<configuration></configuration>
包含所有的标签,是必不可少的。 -
<environments default="mysql">
配置数据库连接环境
这里描述的是数据库。它里面的
<transactionManager type="JDBC"></transactionManager>
元素是配置事务管理器,这里采用的是mybatis的JDBC管理器方式。 -
<mappers></mappers>
关联映射配置文件
元素表示引用的那些映射器。
用xml文件和简短的代码生成SqlSessionFactory
有了基础配置文件,就可以用一段简短的代码来生成SqlSessionFactory
SqlSessionFactoryBuilder sqlsessionfactorybuilder = new SqlSessionFactoryBuilder();
//将mybatis.xml文件变成流
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream("mybatis.xml");
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlsessionfactory = sqlsessionfactorybuilder.build(inputStream);
首先读取mybatis.xml,然后通过SqlSessionFactoryBuilder的Builder方法去创建SqlSessionFactory。整个过程比较简单,而里面的步骤还是比较繁琐的,只是研发者为大家隐藏了细节。这样一个SqlSessionFactory就被创建出来了。
书写映射配置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="cn.java.mapper.UserMapper(一般书写为映射文件java的路径)">
<select id="selectById" parameterType="long" resultType="cn.java.entity.User">
//只写了一个用Id查询的sql语句,可以自行添加SQL语句
SELECT * FROM User where id=#{id}
</select>
</mapper>
与映射配置文件同名的java文件
//1.启动mybatis框架
//需要 SqlSession--->SqlSessionFactory---->SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
//将mybatis.xml文件变成流
InputStream ins = null;
try {
ins = Resources.getResourceAsStream("mybatis.xml");
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory ssf = sfb.build(ins);
SqlSession session = ssf.openSession();
//2.调用局部配置文件中的sql语句
int id=1;
Map<String, Object> usersMap = session.selectOne("cn.java.mapper.UserMapper.selectById", id);
System.out.println(usersMap);
}
这样一个利用SqlSession传达SQL语句的基本mybatis框架就完成了。