MyBatis配置与操作数据库的简单操作

MyBatis

整体流程图:

MyBatis配置与操作数据库的简单操作_第1张图片

内部流程图:

MyBatis配置与操作数据库的简单操作_第2张图片

1. MyBatis 概述

1.1. MyBatis 什么?

1) 软件框架(FrameWork): 用于解决软件中的通用型问题

2) 软件持久层框架(数据访问层):用于更好解决数据持久化问题

3) apacheibatis演变而来.

想深入的可以去了解: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驱动)
 <dependency>
  <groupId>org.mybatisgroupId>
  <artifactId>mybatisartifactId>
  <version>3.2.8version>
 dependency>

 <dependency>
   <groupId>mysqlgroupId>
   <artifactId>mysql-connector-javaartifactId>
   <version>5.1.40version>
 dependency>
 
 <dependency>
   <groupId>junitgroupId>
   <artifactId>junitartifactId>
   <version>4.12version>
 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>
  
  <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 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> list=
session.selectList(statement, parameter);
for(Mapmap: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桌面项目添加依赖

 <dependency>

  <groupId>org.mybatisgroupId>

  <artifactId>mybatisartifactId>

  <version>3.2.8version>

 dependency>

 

 

 <dependency>

   <groupId>mysqlgroupId>

   <artifactId>mysql-connector-javaartifactId>

   <version>5.1.40version>

 dependency>

 

  

 <dependency>

   <groupId>junitgroupId>

   <artifactId>junitartifactId>

   <version>4.12version>

 dependency>

3.2.2. 创建config.properties文件

src/main/resource目录下创建config.properties文件,文件中定义
系统中的一些常用配置信息,例如访问数据库的相关信息,其内容如下
 
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/cgb1711
username=root
password=root

3.2.3. 创建mybatis核心配置文件

src/main/resources目录下创建mybatis-configs.xml文件,并配置数据源等相关信息,数据信息从config.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>
  
  <properties resource="config.properties"/>
  
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url"  value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      dataSource>
    environment>
  environments>
configuration>

3.2.4. 创建Blog实体对象

创建Blog实现与数据库中Blog表实现映射.
 
public class Blog {
private Integer id;
private String title;
private String content;
private Date createdTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
@Override
public String toString() {
return "Blog [id=" + id + ", title=" + title + ", content=" + content + ", createdTime=" + createdTime + "]";
}
}

3.2.5. 创建BlogDao接口

创建数据访问接口,并添加相关方法
package com.jt.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jt.entity.Blog;
public interface BlogDao {
 /***
  * 根据id进行对象查找
  * @param id
  * @return
  */
 Blog findBlogById(Integer id);
 List findPageBlogs(
     @Param("offset")Integer offset,
     @Param("pageSize")Integer pageSize);
 int insertObject(Blog blog);
 int updateObject(Blog blog);
 int deleteObject(Integer id);
}

3.2.6. 创建BlogMapper映射文件

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.dao.BlogDao">
 
mapper>
 
 
BlogMapper文件中添加BlogDao接口对应的映射元素
 
添加基于ID进行查询的元素
<select id="findBlogById"
           parameterType="int"
           resultType="blog">
           select *
           from blog
           where id=#{id}
   select>
 
添加分页查询元素
 
  <select id="findPageBlogs"
           resultType="blog">
           select *
           from blog
           limit #{offset},#{pageSize}
   select>
 
添加insert元素
   <insert id="insertObject"
           parameterType="blog">
           insert into blog
           (id,title,content,createdTime)
           values
           (null,#{title},#{content},now())
   insert>
 
添加更新元素
   <update id="updateObject"
           parameterType="blog">
           update blog
           set title=#{title},content=#{content}
           where id=#{id}
   update>
 
添加删除元素
<delete id="deleteObject"
           parameterType="int">
           delete from blog where id=#{id}
delete>
 
mybatis-configs.xml添加BlogMapper文件

3.2.7. 创建单元测试类执行测试

创建单元测试类,并添加相关方法实现基于Dao接口方式的数据库操作.
 
public class TestBlog01 {
 
private SqlSessionFactory factory;
@Before
public void init()throws IOException{
factory=new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream(
"mybatis-configs.xml"));
}
@Test
public void testFindBlogById(){
//1.创建session
    SqlSession session=factory.openSession();
//2.执行sql
    //2.1获取dao对象
    BlogDao dao=
    session.getMapper(BlogDao.class);
    //2.2执行dao中方法
    Blog blog=dao.findBlogById(1);
    System.out.println(blog);
//3.关闭session
    session.close();
}
@Test
public void testFindPageBlogs(){
//1.创建session
SqlSession session=factory.openSession();
//2.执行sql
//2.1获取dao对象
BlogDao dao=
session.getMapper(BlogDao.class);
//2.2执行dao中方法
List list=dao.findPageBlogs(0, 2);
for(Blog b:list){
System.out.println(b);
}
//3.关闭session
session.close();
}
@Test
public void testInsertObject(){
//1.创建session
SqlSession session=factory.openSession();
//2.执行sql
//2.1获取dao对象
BlogDao dao=
session.getMapper(BlogDao.class);
//2.2执行dao中方法
Blog blog=new Blog();
blog.setTitle("te");
blog.setContent("te...");
dao.insertObject(blog);
session.commit();
//3.关闭session
session.close();
}
}

你可能感兴趣的:(Mybatis)