基本概念
持久化
持久化是程序数据在瞬时状态和持久状态间转换的过程
Mybatis
1、MyBatis前身是iBatis,本是Apache的一个开源的项目
2、MyBatis是一个半自动的ORM框架
搭建Mybatis开发环境
IDEA+maven搭建
1、创建Maven工厂
2、修改pom.xml
引入Mybatis相关依赖(jar包)
<?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>cn.bdqn</groupId>
<artifactId>mybatis01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--导入mybatis需要的jar包-->
<dependencies>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
</dependencies>
</project>
3、创建mybatis核心配置文件
在resources下创建mybatis核心配置文件(mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!--第一行声明该文件是一个xml文件-->
<!--声明这是mybatis的配置文件,等下写配置的时候,就会用mybatis对应的标签提示-->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置环境(mysql连接信息)-->
<!--
environments:环境,复数,意味着可以配置多套环境(测试,开发,发布)
default:默认使用哪个环境
environment:环境
transaction:事务
Manager:管理器
dataSource:数据源
-->
<environments default="dev">
<environment id="dev">
<!--JDBC:表示使用JDBC的事务管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--POOLED:表示使用数据库链接池-->
<dataSource type="POOLED">
<!--name的值是固定写法-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--jdbc:mysql:///t285db-->
<!--jdbc:mysql://localhost:3306/t285db-->
<property name="url" value="jdbc:mysql:///t285db"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
</configuration>
3、创建实体类
存放实体类的包(pojo,entity)
package cn.bdqn.pojo;
import java.io.Serializable;
/**
* user表对应的实体类
* 1、属性私有
* 2、生成getter/setter
* 3、生成无参构造和全参构造
* 4、实现序列化接口
*/
public class User implements Serializable {
private Integer id;
private String username;
private String password;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
4、创建数据访问层接口
创建数据访问层接口,包名(mapper,dao)
package cn.bdqn.mapper;
public interface UserMapper {
//查询表中记录数count(*)
int findCount();
}
5、创建数据访问层接口映射文件
在resources下创建映射文件(UserMapper.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!--mybatis映射文件的DTD声明-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
mapper:是mapper映射文件的根标签
namespace:包名,对应一个具体的Mapper接口(接口的完整限定名(包名+类名))
-->
<mapper namespace="cn.bdqn.mapper.UserMapper">
<!--实现接口中的方法
1、确定方法执行的是select/insert/update/delete,对应就是什么标签
id:对应接口中的方法名
resultType:结果类型,就是这个方法的返回类型
2、在<select>双标签中间编写sql语句,sql语句结尾不要加;
-->
<select id="findCount" resultType="int">
select count(*) from user
</select>
</mapper>
6、在mybatis核心配置文件中指定mapper映射文件的位置
在mybatis-config.xml中添加配置
<!--指定mapper映射文件的位置-->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
7、测试
//测试查询总记录数(最原始的)
@Test
public void test01() throws IOException {
//1、读取mybatis的核心配置文件,转化成输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2、创建SqlSessionFactory工厂对象,通过SqlSessionFactoryBuilder
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//3、通过SqlSessionFactory工厂生成SqlSession,SqlSession就类似JDBC中的Connection,SqlSession底层封装的就是Connection
SqlSession sqlSession = factory.openSession();
//4、通过SqlSession执行对应的方法
Object o = sqlSession.selectOne("cn.bdqn.mapper.UserMapper.findCount");
System.out.println(o);
//5、关闭连接
sqlSession.close();
}
//测试查询总记录数(面向对象,官方推荐)
@Test
public void test02() throws IOException {
//1、读取mybatis的核心配置文件,转化成输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2、创建SqlSessionFactory工厂对象,通过SqlSessionFactoryBuilder
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//3、通过SqlSessionFactory工厂生成SqlSession,SqlSession就类似JDBC中的Connection,SqlSession底层封装的就是Connection
SqlSession sqlSession = factory.openSession();
//4、通过SqlSession执行对应的方法
int count = sqlSession.getMapper(UserMapper.class).findCount();
System.out.println(count);
//5、关闭连接
sqlSession.close();
}
简化
上诉案例,每次测试都需要编写大量繁琐的代码(加载配置文件,创建工厂对象,生成SqlSession),可以把这些操作写到一个工具类中,类似JDBC中的BaseDao
package cn.bdqn.mapper;
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.IOException;
import java.io.InputStream;
public class BaseDao {
/*
* MyBatis的三大核心对象
* SqlSessionFactoryBuilder:工厂构建者,在构建完工厂后就可以销毁了,方法级别
* SqlSessionFactory:在程序运行期间一直存在,全局级别
* SqlSession:在执行对应的sql时存在,执行完sql可以关闭,会话级别
* */
private static SqlSessionFactory factory;
static {
try {
//1、读取mybatis的核心配置文件,转化成输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2、创建SqlSessionFactory工厂对象,通过SqlSessionFactoryBuilder
factory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession
public static SqlSession getSqlSession(){
return factory.openSession();
}
//关闭SqlSession
public static void closeSqlSession(SqlSession sqlSession){
sqlSession.close();
}
}
测试
//测试查询总记录数(面向对象,官方推荐),使用工具类
@Test
public void test03(){
SqlSession sqlSession = BaseDao.getSqlSession();
int count = sqlSession.getMapper(UserMapper.class).findCount();
System.out.println(count);
BaseDao.closeSqlSession(sqlSession);
}
使用db.properties配置文件
1、创建db.properties配置文件
在resources下创建db.properties配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///t285db
jdbc.username=root
jdbc.password=1234
2、修改mybatis的核心配置文件
修改mybatis-config.xml配置文件,把数据库连接参数信息改成外部db.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>
<!--加载db.properties配置文件-->
<properties resource="db.properties"/>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--指定mapper映射文件的位置-->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>