MyBatis
1.框架技术
1.1 框架技术
-
是一个应用程序的半成品
-
提供可重用的公共结构
-
按一定规则组织的一组组件
1.2 分析优势
-
不用再考虑公共问题
-
专心在业务实现上
-
结构统一,易于学习、维护
-
新手也可写出好程序
1.3 主流架构
1.3.1 Struts2
-
MVC设计模式的实现
-
拦截器
-
可变和可重用的标签
1.3.2 HIBERNATE
-
ORM,简化数据库操作
-
DAO层
1.3.3 Spring
-
依赖注入容器 / AOP实现
-
声明式事务
-
简化Java EE应用
-
黏合剂,将大家组装到一起
Spring MVC
-
结构最清晰的MVC Model2实现
-
高度可配置,支持多种视图技术
-
定制化开发
2. MyBatis
2.1 持久化与ORM2
2.1.1 持久化
持久化是程序数据在瞬时状态和持久状态间转换的过程
内存数据与硬盘数据
2.1.2 ORM(Object Relational Mapping)
编写程序的时候,以面向对象的方式处理数据 保存数据的时候,却以关系型数据库的方式存储
就是内存中对象和数据库里的数据之间的映射关系
ORM解决方案包含下面四个部分
-
在
持久化对象上执行基本的增、删、改、查操作
-
对持久化对象
提供一种查询语言或者API
-
对象关系映射工具
-
提供与事务对象交互、执行检查、延迟加载以及
其他优化功能
2.2 MyBatis简介
-
MyBatis前身是iBatis,本是Apache的一个开源的项目
-
官方网站 mybatis
-
ORM框架
-
实体类和SQL语句之间建立映射关系
-
特点
-
基于SQL语法,简单易学
-
能了解底层封装过程
-
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
-
方便程序代码调试
-
2.3 MyBatis使用
整体步骤
2.3.1 导入依赖
1.导入 mysql-connector-java-5.1.18.jar 以及 mybatis-3.2.2.jar 。
2.编写MyBatis核心配置文件(configuration.xml)
参考文件mybatis-3.2.2.pdf配置configuration文件,更改数据库参数 :
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/smbms"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
3.创建实体类pojo
使用lombok插件 可以快速构建 getter/setter/constructor .
4.创建DAO层-和SQL映射文件(mapper.xml)
实体类entity对应的mapper文件一般命名为: entityMapper.xml
映射文件部分:结合上图对照文件对应关系
5.使用:
添加configuration里的mapper映射
使用流程:
注意引用包资源。
package cn.bdqn.test;
import cn.bdqn.smBatis.dao.UserDao;
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;
public class testUser {
public static void main(String[] args) throws Exception{
//MyBatis
//1.读取 mybatis 配置文件,获取mybatis-config。xml的输入流
InputStream is = Resources.getResourceAsStream("configuration.xml");
//2.将读取的配置内容构建 sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.获取 sqlSession : 相当于jdbc中 connection + preparedStatement的能力
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.根据DAO层接口获取DAO层默认对象 daoImpl
UserDao userMapper = sqlSession.getMapper(UserDao.class);
//5.使用UserMapper对象的方法
int counts = userMapper.queryCounts();
//6.关闭流
sqlSession.close();
System.out.println("目前总人数:"+counts);
}
}
注意:记得要关闭流sqlSession.close();
不断获取不断构造:
InputStream
is
= Resources.getResourceAsStream("configuration.xml
");-> SqlSessionFactory
sqlSessionFactory
= new SqlSessionFactoryBuilder().build(is
);-> SqlSession sqlSession = sqlSessionFactory.
openSession
();-> UserDao userMapper =
sqlSession.getMapper(UserDao.class)
;-> int counts =
userMapper.queryCounts();
通过工具类实现整个流程更简便:
工具类内容:
package cn.bdqn.util;
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 MyBatisUtil {
private static SqlSessionFactory factory;
static{
try {
InputStream is = Resources.getResourceAsStream("configuration.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
throw new RuntimeException("初始化失败",e);
}
}
public static SqlSession openSession(){
//true:自动事务提交 false:手动事务提交
return factory.openSession(true);
}
}
调用实现类:
package cn.bdqn.test;
import cn.bdqn.smBatis.dao.RoleDao;
import cn.bdqn.smBatis.dao.UserDao;
import cn.bdqn.util.MyBatisUtil;
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;
public class testRole {
public static void main(String[] args) throws Exception{
//MyBatis
//1.使用工具类
SqlSession sqlSession = MyBatisUtil.openSession();
//2.动态接口
RoleDao roleMapper = sqlSession.getMapper(RoleDao.class);
//3.使用UserMapper对象的方法
int counts = roleMapper.getCounts();
//4.关闭流
sqlSession.close();
System.out.println("目前总用户数:"+counts);
}
}