Mybatis框架的环境搭建
一.创建maven工程并导入坐标
导入坐标:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>
完整的如下图:
二.创建实体类和dao接口
如下图:
User类(实体类)
package com.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private String product_name;
private String product_type;
private int product_price;
private Date regist_date;
public String getProduct_name() {
return product_name;
}
public void setProduct_name(String product_name) {
this.product_name = product_name;
}
public String getProduct_type() {
return product_type;
}
public void setProduct_type(String product_type) {
this.product_type = product_type;
}
public int getProduct_price() {
return product_price;
}
public void setProduct_price(int product_price) {
this.product_price = product_price;
}
public Date getRegist_date() {
return regist_date;
}
public void setRegist_date(Date regist_date) {
this.regist_date = regist_date;
}
@Override
public String toString() {
return "User{" +
"product_name='" + product_name + '\'' +
", product_type='" + product_type + '\'' +
", product_price=" + product_price +
", regist_date=" + regist_date +
'}';
}
}
dao接口
package com.dao;
import com.domain.User;
import java.util.List;
public interface UserDao {
/**
* 简单查询操作
* @return
*/
List<User>findAll();
}
三.创建Mybatis的主配置文件SqlMapConifg. 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">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息(有了他们就能创建Connection对象)-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/study"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="com/dao/UserDao.xml"/> <!--有了它,就有了映射配置信息-->
</mappers>
</configuration>
四.创建映射配置文件UserDao. 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.dao.UserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.domain.User"> <!--在映射配置中告知mybatis要封装到哪个实体类中-->
<!--封装的实体类的全限定类名-->
select * from product where regist_date>'2020-5-20' <!--有了它,就有了执行的SQL语句,就可以获取PreparedStatement-->
</select>
</mapper>
五.创建测试类
package com.test;
import com.dao.UserDao;
import com.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;
/**
1. mybatis的入门案例
*/
public class MybatisTest {
public static void main(String[]args)throws Exception{
//1.读取配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口代理对象
UserDao userDao = session.getMapper(UserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user:users) {
System.out.println(user);
}
//6.释放资源
session.close();
inputStream.close();
}
}
剩下的就是执行测试类了,结果如下图:
注意事项
- 创建UserDao.xml 和 UserDao.java时名称只是为了统一,关键在于namespace的值。在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper,所以:UserDao 和 UserMapper是一样的
- 在idea中创建目录的时候,它和包是不一样的,
包在创建时:com.dao它是二级结构
目录在创建时:com.dao是一级目录 - mybatis的映射配置文件位置必须和dao接口的包结构相同,如下图:
- 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名,如下图:
- 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名,如下图:
- SqlSession 代表和数据库的一次会话,用完必须关闭;
- SqlSession 和 connection 一样它都是非线程安全的,每次使用都应该去获取新的对象;
- mapper 接口没有实现类,但是 mybatis 会为这个接口生成一个代理对象(将接口和xml进行绑定)
UserDao userDao = session.getMapper(UserDao.class); - 两个重要的配置文件:
mybatis 的全局配置文件:包含数据库连接池信息,事务管理器信息等…系统运行环境信息
SQL 映射文件:保存了每一个 SQL 语句的映射信息:将 SQL 抽取出来。
关于注解的方式开发
注解开发在xml方式的基础上,稍作修改,如下:
- 删除映射配置文件UserDao.xml,如下图:
- 修改Mybatis的主配置文件SqlMapConfig.xml中的mappers标签的属性为class,注意的是包名不能是“/”来连接,而是以点,如下图:
- 最关键的地方来了,在UserDao接口中方法的上面添加一行注解代码即可,如下图:
执行结果
其实结果和xml的方式是一样的