Mybatis极速入手(xml版)
对JDBC有一定了解对于理解本文有很大帮助
本文使用maven和IDEA,jdk版本1.8
数据库使用MySQL5.7
初期准备
-
新建一个maven项目
-
给maven导入相关依赖(有朋友可能连接数据库会有问题,看一下自己的MySQL版本和mysql-connector-java的版本
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency>
-
建资源包resources(new--> Dictionary),一般创建的时候IDEA会给提示
-
准备一个database
MyBatis全局配置
在resources包中建一个xml文件mybatis-config.xml
现在对我们来说,比较熟悉的也就只有<dataSource type="POOLED">
这下面的几行数据了,这就是我们要连数据库的信息,${driver}
这是EL表达式,在这里它表示值从上面的properties中取。其他的先不用管。
<?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="config.properties"></properties>
<environments default="development">
<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>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="BlogMapper.xml"/>
</mappers>
</configuration>
同时在resources包中建一个properties,对应mybatis-config.xml中的<properties resource="config.properties"></properties>
这一条,表示数据源的信息从这里取。
config.properties
username=root
password=********
url=jdbc:mysql://localhost:3307/crashcourse
driver=com.mysql.cj.jdbc.Driver
我这里的MySQL驱动是8.0的所以有个cj,如果是5.0的话就不用加,上面的url是我们要连的数据库的端口和哪一个database
路径不要搞错,在这里property有多种写法
现在有了配置之后,就能连上了,不过先不要着急,接下来我们就是编写sql语句
编写SQL 语句
首先我们需要一个实体类,用做返回类型接收数据
新建一个java文件,Blog.java
public class Blog {
private int id;
private String name;
@Override
public String toString() {
return "Blog{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
接下来我们写一个接口,里面是获取数据库内容的方法BlogMapper.java
public interface BlogMapper {
Blog selectBlog(int id);
}
之后我们写一个接口的实现类,去连接数据库获取内容
==那是JDBC的做法,在MyBatis中我们用mapper(映射,java的动态代理)的方法去实现接口方法==
在resources中新建一个xml文件,BlogMapper.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="com.example.dao.mapper.BlogMapper">
<!-- namespace:名称空间;指定为接口的全类名
id:唯一标识,接口的方法名
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);-->
<select id="selectBlog" resultType="com.example.dao.entity.Blog">
select *
from Blog
where id = #{id}
</select>
</mapper>
sql映射文件:保存了每一个sql语句的映射信息:将sql抽取出来。
这个BlogMapper.xml有没有感觉看到过,看看曾今出现过的地方
调用MyBatis完成查询
新建一个java类,BlogSearch.java
public class BlogSearch {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";//<1.1>
InputStream inputStream = Resources.getResourceAsStream(resource);//<1.2>
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//<1.2>
//开启会话,操作dao层
SqlSession session = sqlSessionFactory.openSession();//<2.1>
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);//<2.2>
System.out.println(mapper.getClass());//<2.3>
Blog blog = mapper.selectBlog(1);//<2.4>
System.out.println(blog);
}finally {
session.close();
}
}
}
<1.1><1.2>mybatis的IO流方法,导入配置类的信息
==<1.3>用建造工厂的方法,造一个SqlSessionFactory--会话工厂,工厂也是需要造出来的嘛==
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的
<2.1>工厂造一个会话实例
而且SqlSession和connection一样都是非线程安全的。每次使用都应该去获取新的对象。
<2.2>很关键,mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。将接口和xml进行绑定。
说人话就是我用反射生成一个代理对象,然后实现接口的方法,方法体用的是xml里面的select内容,可以把<2.3>的注释取消,打印一下就知道了
<2.4>代理对象实现方法
关闭会话,用完必须关闭
参考资料: