目录
1. MyBatis概述
mybatis是一个持久层框架,用Java编写,它封装了jdbc操作的很多细节,使开发者只需要关注SQL本身,无需关注注册驱动、创建连接等繁杂的JDBC原始操作,它使用ORM思想实现了结果集的封装。
什么使ORM?
Object Relational Mapping对象关系映射。简单来说:就是把数据库表和实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。
2. Mybatis入门
环境搭建:
(1)创建maven工程并且导入坐标
只是熟悉mybatis时,新建maven工程可不必选择模板,直接next就行。
然后需要的maven依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.xatu</groupId>
<artifactId>MyBatis-00</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!--日志这个不是必要的-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
下图是各个文件放置的位置
(2)创建实体类和Dao接口
当然先需要有一张数据库表,实体类是与表中的属性相对应的
/**
*实体类
*/
public class mbuser implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String adress;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
@Override
public String toString() {
return "mbuser{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", adress='" + adress + '\'' +
'}';
}
}
/**
* 用户的持久层接口
*/
public interface UserDao {
public List<mbuser> findAll();
}
(3)创建mybatis主配置文件 sqlmapconfig.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">
<!--mybatis的主配置文件-->
<configuration>
<!--配置文件-->
<environments default="mysql">
<!--配置sql环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源连接池-->
<dataSource type="POOLED">
<!--配置数据库连接的四个信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/TestDB?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件,映射配置文件是指每个dao独立的配置文件-->
<mappers>
<mapper resource = "edu/xatu/mybatis/dao/UserDao.xml"/>
</mappers>
</configuration>
(4)创建映射配置文件 UserDao.xml,此处注意id和resultType
<?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="edu.xatu.mybatis.dao.UserDao" >
<select id="findAll" resultType="edu.xatu.mybatis.domain.mbuser">
select * from mbuser
</select>
</mapper>
注意事项:
1.在创建UserDao.xml和UserDao.java时名称只是为了和之前学习的知识保持一致;在mybatis中把他的持久层操作接口名称和映射文件也叫做:mapper,所以UserDao和UserMapper是一样的。
2.mybatis映射文件位置必须和dao接口包目录结构完全相同
3.映射配置文件的mapper标签的namespace属性值必须是dao接口的全限定类名
4.映射配置文件的id属性值必须是dao接口的方法名
当遵从如上2、3、4规则之后的好处:在开发中无需写dao的实现类,就简化了开发。
然后写一个测试类,也就是mybatis的第一个入门案例如下:
/**
* mybatis的入门案例
*/
public class mybatisTest {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("sqlmapconfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂获取SqlSession对象
SqlSession session = factory.openSession();
//4.用动态代理。使用SqlSession创建Dao接口的代理对象
UserDao userDao = session.getMapper(UserDao.class);
//5.使用代理对象执行方法
List<mbuser> mbusers = userDao.findAll();
for(mbuser mbuser : mbusers ){
System.out.println(mbuser);
}
//6.释放资源
session.close();
in.close();
}
}
执行成功后如下图(假装看不见表中内容,我个捏造数据的废柴)
3. Mybatis工作流程
为理解代码,还是要理解理解mybatis的工作流程的......我查资料的时候这个图真的是深得我意
以下两篇文章优秀,我就直接附链接了。
https://blog.csdn.net/u014745069/article/details/80788127
https://blog.csdn.net/u014297148/article/details/78696096
不积跬步无以至千里,加油吖!!!