MyBatis配置与操作数据库的简单操作
MyBatis
整体流程图:
内部流程图:
1. MyBatis 概述
1.1. MyBatis 是什么?
1) 软件框架(FrameWork): 用于解决软件中的通用型问题
2) 软件中持久层框架(数据访问层):用于更好解决数据持久化问题
3) 由apache的ibatis演变而来.
想深入的可以去了解:hibernate (ORM 框架)
1.2. MyBatis 架构体系?
对于任何一个持久层框架,都应该具备接口服务,数据处理服务,基础服务等相关功能,MyBatis也不例外,它会具体如下几个层结构.
1. 接口应用层(对外提供服务)
1) 数据查询
2) 数据修改
3) 数据删除
4) 数据插入
2. 数据处理层(处理数据访问问题)
1) SQL参数映射
2) SQL解析(语法,语义)
3) SQL 执行(将sql发送到数据库端执行)
4) SQL 结果映射(例如将ResultSet中的数据存到map)
5) ....
3. 基础服务层
1) 连接服务
2) 事务服务
3) 缓存服务
4) 配置服务
5) .....
1.3. MyBatis 核心组件及API?
MyBatis 核心应用组件:
1. 配置文件(提供基础配置信息,例如连接配置,缓存配置,映射配置)
2. 映射文件(定义SQL映射)
3. SqlSessionFactoryBuilder (负责读取配置文件,创建SqlSessionFactory对象)
4. SqlSessionFactory(负责创建SqlSession对象)
5. SqlSession(负责连接的维护,事务的处理,类似JDBC中的Connection)
.....
2. MyBatis 编程基础
2.1. MyBatis 基本步骤
Step01:创建maven 桌面项目(Java 项目)
Step02:添加mybatis依赖以及mysql驱动依赖
Step03:创建mybatis 配置文件,映射文件
Step04:配置数据访问(配置文件),SQL映射(映射文件)
Step05:创建MyBatis API(例如SqlSession)对象,执行SQL操作.
2.2. MyBatis 编程实现
2.2.1. 数据准备
创建数据库,并在库中创建表:
create database cgb1711 character set utf8;
打开数据库:
use cgb1711;
创建表
create table blog(
id int primary key auto_increment,
title varchar(200) not null,
content varchar(500) not null,
createdTime date
) engine=innoDB;
向表中写入数据
insert into blog values (null,'ta','ta...',now());
insert into blog values (null,'tb','tb...',now());
2.2.2. 创建Maven桌面项目
创建maven 桌面项目,并添加依赖(mybatis,mysql驱动)
<!-- 添加mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 添加mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- 添加junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
注意:
1) 添加依赖时注意groupId的选择?(选正规的)
2) 添加依赖以后pom.xml文件假如有错什么原因? 检测网络,检测maven配置(setting.xml)
2.2.3. 添加配置及映射文件
在src/main/resources目录下创建配置文件mybatis-configs.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:///cgb1711"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 配置mapper文件路径 -->
<mappers>
<mapper resource="mapper/BlogMapper.xml"/>
</mappers>
</configuration>
说明:
1)配置文件的头可从官方文档进行拷贝.
2)配置文件元素没有提示是什么原因? 对应的dtd文件取不到
step02:在src/main/resources/mapper目录下创建映射文件BlogMapper.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.jt.blog.BlogDao">
</mapper>
说明:
1) 映射文件的命名空间用于约束元素id的唯一性.
2) 映射文件的格式最好是包结构形式
3) 映射文件内部可以定义很多元素,每个元素必须有一个唯一id,例如select
在mapper文件中添加如下元素:
查询所有blog数据
<select id="findBlogs" resultType="map">
select * from blog
</select>
根据id查询blog数据
<select id="findBlogById" resultType="map">
select *
from blog
where id=#{id}
</select>
限制查询blog元素
<select id="findPageBlogs"
resultType="map">
select *
from blog
limit #{array[0]},#{array[1]}
</select>
向表中插入数据元素定义
<insert id="insertObject">
insert into blog
(id,title,content,createdTime)
values
(null,#{array[0]},#{array[1]},now())
</insert>
修改表中数据元素定义
<update id="updateObject">
update blog
set title=#{array[0]},
content=#{array[1]}
where id=#{array[2]}
</update>
删除表中元素元素定义
<delete id="deleteObject">
delete
from blog
where id=#{id}
</delete>
2.2.4. 编写代码执行查询测试
基于BlogMapper.xml文件中元素的定义,添加测试类及相关方法.
编写测试类并添加测试方法
public class TestBlog01 {
private SqlSessionFactory factory;
}
测试类中添加初始化factory的方法
@Before
public void init()throws IOException{
//初始化SqlSessionFactory
factory=new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream(
"mybatis-configs.xml"));
}
测试类中添加查询所有blogs的方法
@Test
public void testFindBlogs(){
//1.创建SqlSession对象(相当于创建一个连接)
SqlSession session=factory.openSession();
//2.执行查询操作(selectList("命名空间"+"元素id"))
List<Object> list=session.selectList(
"com.jt.blog.BlogDao.findBlogs");
for(Object o:list){
System.out.println(o);
}
//3.释放资源(类似关闭连接)
session.close();
}
测试类中添加根据id执行查询方法
@Test
public void testFindBlogById(){
//1.创建session对象
SqlSession session=
factory.openSession();
//2.执行sql操作
String statement="com.jt.blog.BlogDao.findBlogById";
Map<String,Object> map=
session.selectOne(statement,1);
System.out.println(map);
//3.释放资源(关闭session对象)
session.close();
}
测试类中添加分页查询方法
@Test
public void testFindPageBlogs(){
//1.创建session对象
SqlSession session=
factory.openSession();
//2.执行sql操作?????
String statement="com.jt.blog.BlogDao.findPageBlogs";
Object parameter=new Object[]{0,4};
List<Map<?,?>> list=
session.selectList(statement, parameter);
for(Map<?,?>map:list){
System.out.println(map);
}
//3.释放资源(关闭session对象)
session.close();
};
测试类中添加插入数据的方法
@Test
public void testInsertObject(){
//1.创建session
SqlSession session=factory.openSession();
//2.执行sql
String statement="com.jt.blog.BlogDao.insertObject";
Object parameter=new Object[]{"te","te..."};
int rows=session.insert(statement, parameter);
System.out.println("insert.rows="+rows);
session.commit();
//3.关闭session
session.close();
}
测试类中添加修改方法
@Test
public void testUpdateObject(){
//1.创建session
SqlSession session=factory.openSession();
//2.执行sql
String statement="com.jt.blog.BlogDao.updateObject";
Object parameter=new Object[]{"taa","taa...",1};
int rows=session.update(statement, parameter);
System.out.println("update.rows="+rows);
session.commit();
//3.关闭session
session.close();
}
测试类中添加删除方法
@Test
public void testDeleteObject(){
//1.创建session
SqlSession session=factory.openSession();
//2.执行sql
String statement="com.jt.blog.BlogDao.deleteObject";
Object parameter=7;
int rows=session.delete(statement, parameter);
session.commit();
System.out.println("delete.rows="+rows);
//3.关闭session
session.close();
}
3. MyBatis 编程进阶
本小节中会从mybatis编程的另一个角度(例如基于接口方式等)实现对数据库中数据的操作.
3.1. 基本步骤
Step01: 创建maven桌面项目并添加依赖
Step02: 创建配置文件config.propertis(内容为数据库相关)
Step03: 创建mybatis核心配置文件mybatis-configs.xml文件
Step04: 配置Mybatis基础数据服务(properties,datasource,mapper)
Step05: 创建映射文件BlogMapper.xml
Step06: 创建实体类Blog(与表对应,可用于封装表中数据)
Step07: 创建BlogDao接口,并添加相关方法.
Step08: 配置BlogMapper映射文件,添加相关元素.
Step09: 基于BlogDao接口与映射文件实现CRUD操作
3.2. 编程实现
3.2.1. 创建Maven桌面项目
创建maven桌面项目并添加依赖
<!-- 添加mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 添加mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- 添加junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>