目录
1.6 mybatis的ORM(Object Relational Mapping 对象关系映射 )方式
3.2 测:建接口UserMapper、绑定接口和映射文件、获取接口动态代理对象完成查询
1、Mybatis框架介绍
1.1 介绍
mybatis框架是对JDBC进行封装,解决了dao层的问题。
mybatis是Apache软件基金会下的一个开源项目,前身是iBatis框架。2010年这个项目由apache 软件基金会迁移到google code下,改名为mybatis。2013年11月又迁移到了github(GitHub 是一个面向开源及私有 软件项目的托管平台)。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射(多表)。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。它对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建 connection、创建 statement、手动设置参数、结果集检索等 jdbc 繁杂的过程代码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
1.2 优点
-
简单易学:mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个SQL映射文件即可。
-
使用灵活:Mybatis不会对应用程序或者数据库的现有设计强加任何影响。SQL语句写在XML里,便于统一管理和优化。
-
解除SQL与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易进行单元测试。SQL语句和代码的分离,提高了可维护性
1.3 缺点
-
编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
-
SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
-
Mybatis框架还是比较简陋(半自动化框架),功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是自己写,工作量比较大,且不太容易适应快速数据库修改。
1.4 官方网站及框架包下载
官网地址:mybatis – MyBatis 3 | Introduction
1.5 mybatis框架整体架构
1.6 mybatis的ORM(Object Relational Mapping 对象关系映射 )方式
Mybatis有两种映射方式:
1.通过XML映射;
2.通过注解;
2、 MyBatis老式入门开发(了解)
2.1 Mybatis框架的核心类
SqlSessionFactoryBuilder 会话工厂构建类 主要用来构建会话工厂的
SqlSessionFactory :会话工厂类 主要用来生产会话对象的;
SqlSession:会话对象,底层是对Connection连接对象的封装;
数据准备
数据库
create table user (
id int primary key auto_increment,
username varchar(20) not null,
birthday date,
sex char(1) default '男',
address varchar(50)
);
insert into user values (null, '大猩猩','1980-10-24','男','湘北高中三年');
insert into user values (null, '樱木花道','1992-11-12','男','湘北高中一年');
insert into user values (null, '流川枫','1983-05-20','男','湘北高中一年');
insert into user values (null, '宫城良田','1995-03-22','男','湘北高中二年');
insert into user values (null, '三井寿','1980-10-24','男','湘北高中三年');
insert into user values (null, '井上彩子','1995-03-22','女','湘北高中二年');
insert into user values (null, '赤木晴子','1995-03-22','女','湘北高中一年');
用户类
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
}
2.2 config.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">
<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://127.0.0.1:3306/test0908"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
2.3 mapper.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="hhy.UserMapper"><!--命名空间-->
<!--resultType结果类型:写实体类路径(将查询出的数据转换为User对象)-->
<!--执行语句时使用:命名空间名.id,如hhy.UserMapper.findUserById-->
<select id="findUserById" resultType="hhy.pojo.User">
select * from user where id = #{id}
</select>
</mapper>
2.4 log4j.properties配置文件:
可将详细信息输出到控制台,例:sql语句、参数、JDBC连接、autocommit事务状态等。
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug, stdout
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
2.5 测例及流程图:
//myBatis查询
@Test
public void t10() throws SQLException, IOException {
//加载核心配置文件,构建会话工厂
String resource="mybatis-config.xml";//路径名字正确可以直接点击进入xml
InputStream rs = Resources.getResourceAsStream(resource);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(rs);
//获取会话对象
SqlSession sqlSession = build.openSession();
//调用查询api
//第一个参数为mapper.xml中的命名空间名.sql的id,第二个参数为想要查询的数据库中数据id
User user = sqlSession.selectOne("hhy.UserMapper.findUserById",1);
System.out.println("user = " + user);
sqlSession.close();
rs.close();
}
2.6 使用mybatis老式的开发模式弊端
1)要使用指定的sql必须使用命名空间.id进行字符串拼接,维护性比较差;
2)并且这个sql用多少次,就拼接多少次,维护性比较差;
3、mybatis的dao层动态代理(掌握)
3.1 核心步骤
Mybatis存在2种开发方式:
1)旧版本mybatis执行的方式(了解即可);
2)动态代理实现操纵数据库(掌握);
核心步骤
1)接口与xml映射文件绑定;
接口名称与xml映射文件命名空间要一致;
接口方法与xml中crud标签ID要一致;
2)通过SqlSession获取代理对象;
eg:sqlSession.getMapper(接口);