【Java高级工程师蜕变之路】003 MyBatis高级进阶
前面的废话(高手可以直接无视)
MyBatis的前世今生
Mybatis原本是Apache软件基金会的一个开源项目叫做iBatis,2010年这个项目由Apache迁移到了goole code管理才改名为Mybatis,2013年又迁移到了GitHub。
ORM
ORM:Object/Relation Mapping 对象/关系映射
ORM思想:将数据库中的关系数据表映射为JAVA中的对象,把对数据表的操作转换为对对象的操作,实现面向对象编程。因此ORM的目的是使得开发人员以面向对象的思想来操作数据库
Mybatis VS Hibernate
Mybatis是一个优秀的持久层框架(Dao层框架),它是对JDBC的封装,使得开发者只需要关注Sql语句(业务)本身即可,无需开发者处理加载驱动、获取连接、创建Statement等繁琐的过程。
Hibernate框架是一个全自动的ORM持久层框架,只需要编写POJO,在xml中定义好Pojo属性和数据表字段的映射/对应关系,就可以在java中实现类似 insert(User)的操作。Sql语句都不用写。但是因为性能等问题,市场占有率越来越低。
Mybatis是目前比较流行的Dao层框架。
MyBatis开发基本步骤
①添加MyBatis的坐标
UTF-8
UTF-8
1.8
1.8
1.8
org.mybatis
mybatis
3.4.5
mysql
mysql-connector-java
5.1.6
runtime
junit
junit
4.12
test
log4j
log4j
1.2.12
②创建user数据表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
INSERT INTO `user` VALUES ('1', '小唐', '123');
INSERT INTO `user` VALUES ('2', '小张', '456');
INSERT INTO `user` VALUES ('3', '小雨', '789');
③编写User实体类
package com.test.pojo;
public class User {
private Integer id;
private String username;
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
'}';
}
}
④编写映射?件UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
⑤编写核??件SqlMapConfig.xml
⑥编写测试类
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List users = sqlSession.selectList("user.findAll");
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
Mybatis基本流程
1、利用Resources工具类加载配置文件,并转换成输入输出流
2、利用解析的配置,创建SqlSessionFactory工厂
3、生产SqlSession
4、SqlSession调用方法
Mybatis配置文件分析
Mybatis常用配置
1、environments标签
事务管理器有两种
JDBC:直接使用JDBC的提交和回滚
MANAGED:默认行为,什么也不做
数据源的类型有三种:
UNPOOLED:每次请求打开和关闭链接
POOLED:使用连接池
JNDI:放置JNDI引用
2、mapper标签
MyBatis的Dao层实现
传统开发方式
1、定义DAO接口
public interface IUserDao {
public List findAll() throws Exception;
}
2、DAOImpl实现
public class UserDaoImpl implements IUserDao{
@Override
public List findAll() throws Exception {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List users = sqlSession.selectList("user.findAll");
sqlSession.close();
return users;
}
}
3、测试
@Test
public void test5() throws Exception{
IUserDao userDao = new UserDaoImpl();
List all = userDao.findAll();
for (User user : all) {
System.out.println(user);
}
}
代理开发方式
Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接
口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper 接口开发需要遵循以下规范:
1) Mapper.xml文件中的namespace与mapper接口的全限定名相同
2) Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
配置文件深入
Properties
注意顺序:properties必须在最前面