Mybatis环境搭建
首先数据库中有这样一张表:
我们希望在spring boot中实现查询这个表内容的功能。
1.新建一个maven工程,pom.xml中的依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
2.写一个对应表的DAO实体类User.java,实现属性的get、set和toString方法
文件位置如下:
User.java的代码如下:
package com.learning.domain;
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String last_name;
private int gender;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", last_name='" + last_name + '\'' +
", gender=" + gender +
", email='" + email + '\'' +
'}';
}
}
- 类中的属性与数据库中的列标题一一对应
- 可以自动实现属性的get、set和toString方法
3.写一个实体类对应的接口IUserDao.java
文件位置如下:
代码如下:
package com.learning.dao;
import com.learning.domain.User;
import java.util.List;
public interface IUserDao {
List<User> findAll();
}
4. 写这个实体的配置文件
文件位置如下:
文件内容如下:
<?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.learning.dao.IUserDao">
<select id="findAll" resultType="com.learning.domain.User">
select * from user
</select>
</mapper>
5.配置总的MySQL配置文件:
文件位置如下:
文件内容如下:
<?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">
<!--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/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--指定每个DAO的独立配置文件的路径-->
<mappers>
<mapper resource="com.learning.dao.IUserDao.xml"></mapper>
</mappers>
</configuration>
注意事项:
- 1、IUserDao还可以命名为IUserMapper
- 2、idea中目录和包是不一样的,
包在创建时:com.learning.dao是三级结构
目录在创建时:com.learning.dao是一级结构 - 3、mybatis每个实体的映射配置文件必须和对应的dao接口的包结构相同:
- 4、映射配置文件mapper标签的namespace的值必须是dao接口的全限定类名:
对应的位置为:
- 5、映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名,同时要告知封装到哪个实体类中(resultType):
对应的接口方法为:
实现第3、4、5点后,开发时就不用再写dao的实现类了。
写个测试文件来测试一下:
package com.learning.test;
import com.learning.dao.IUserDao;
import com.learning.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
public static void main(String[] args) throws Exception{
// 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接口的代理对象
IUserDao userDao=session.getMapper(IUserDao.class);
// 5.使用代理对象执行方法
List<User> users=userDao.findAll();
for(User user: users){
System.out.println(user);
}
// 6.释放资源
session.close();
in.close();
}
}
运行出来的结果: