mybatis的入门(二)

  上篇文章首先介绍了JDBC操作数据库的相关知识,并总结了JDBC操作数据存在的一些问题,那么这篇文章我们来介绍下mybatis的相关内容

一、mybatis的架构图

下面对上面的架构图详细说明下:

1.mybatis的配置

  sqlMapConfig.xml,此文件作为mybatis的核心配置文件,是mybatis的全局配置文件,配置了mybatis的运行环境等信息。

  mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SQLMapConfig.xml文件中加载。一般来说,有多少个数据库表就存在多少个mapper.xml文件。

2.SqlSessionFactory

  通过mybatis的环境等配置信息来构建SqlSessionFactory,即会话工厂。

3.SQLSession

  由会话工厂(SqlSessionFactory)来创建SqlSession,操作数据库需要通过SqlSession来进行。

4.executor

  mybatis的底层自定义了executor执行器接口操作数据库,executor执行器接口由两个实现,一个是基本执行器,一个是缓存执行器。

5.mappedStatement

  mappedStatement也是mybatis底层的封装对象,它包装了mybatis的配置信息及sql映射信息等。mapper.xml文件中的一个sql对应一个mappedStatement对象,sql的ID就是Mapped statement的ID。

6.输入映射

  Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7.输出映射

  Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

二、mybatis的入门程序开发

2.1 业务需求

  使用mybatis实现以下功能:

    1.根据用户id查询一个用户信息

    2.根据用户名称模糊查询用户列表

    3.添加用户

    4.更新用户

    5.删除用户

2.2 导包

  需要提前下载好mybatis的jar包,以及mybatis的依赖包,并将所有的jar包添加到 build path中:

其中,mybatis-3.2.7.jar 是mybatis的核心包,mysql-connector-java-5.1.7-bin.jar 是mysql的数据库驱动包,其他的均为mybatis的依赖包。

2.3 加载配置文件

  在src目录下创建SqlMapConfig.xml 文件、log4j.properties 文件:

2.3.1 log4j.properties 文件配置信息:

1 # Global logging configuration
2 log4j.rootLogger=DEBUG, stdout
3 # Console output...
4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

log4j.properties是日志配置文件,mybatis默认使用log4j作为输入日志信息。

2.3.2 SqlMapConfig.xml 文件配置信息

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5
 6 <configuration>
 7     <!--和spring整合之后,environments将被废除  -->
 8     <environments default="development">
 9         <environment id="development">
10             <!-- 使用JDBC事物管理 -->
11             <transactionManager type="JDBC" />
12             <!-- 数据库连接池 -->
13             <dataSource type="POOLED">
14                 <property name="driver" value="com.mysql.jdbc.Driver" />
15                 <property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy" />
16                 <property name="username" value="root" />
17                 <property name="password" value="root" />
18             </dataSource>
19         </environment>
20       </environments>
21 </configuration>

SqlMapConfig.xml 文件作为mybatis的核心配置文件,配置文件为数据源和事物管理等。

2.4 根据用户id查询一个用户信息

2.4.1 创建pojo

  pojo类作为mybatis进行sql映射使用,po类通常与数据库表对应,pojo类如下所示:

 1 package com.lwjnicole.pojo;
 2
 3 import java.io.Serializable;
 4 import java.util.Date;
 5
 6 public class User implements Serializable{
 7
 8     private static final long serialVersionUID = 1L;
 9
10     private int id;
11     private String username;//用户名
12     private String sex;//性别
13     private Date birthday;//用户生日
14     private String address;//地址
15     public int getId() {
16         return id;
17     }
18     public void setId(int id) {
19         this.id = id;
20     }
21     public String getUsername() {
22         return username;
23     }
24     public void setUsername(String username) {
25         this.username = username;
26     }
27     public String getSex() {
28         return sex;
29     }
30     public void setSex(String sex) {
31         this.sex = sex;
32     }
33     public Date getBirthday() {
34         return birthday;
35     }
36     public void setBirthday(Date birthday) {
37         this.birthday = birthday;
38     }
39     public String getAddress() {
40         return address;
41     }
42     public void setAddress(String address) {
43         this.address = address;
44     }
45     @Override
46     public String toString() {
47         return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
48                 + address + "]";
49     }
50
51 }

2.4.2 创建userMapper.xml映射文件

  在src下创建sqlmap目录,然后在sqlmap目录下创建userMapper.xml映射文件:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5  <!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
 6 <mapper namespace="user">
 7     <!-- id:statement的id 或者叫做sql的id-->
 8     <!-- parameterType:声明输入参数的类型 -->
 9     <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
10     <!-- #{}:输入参数的占位符,相当于jdbc的? -->
11     <select id="findUserById" parameterType="Integer" resultType="com.lwjnicole.pojo.User">
12         select * from user where id = #{v}
13     </select>
14 </mapper>

2.4.3 加载映射文件

  mybatis框架需要加载Mapper.xml映射文件,将userMapper.xml映射文件添加到SqlMapConfig.xml 下:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5
 6 <configuration>
 7     <!--和spring整合之后,environments将被废除  -->
 8     <environments default="development">
 9         <environment id="development">
10             <!-- 使用JDBC事物管理 -->
11             <transactionManager type="JDBC" />
12             <!-- 数据库连接池 -->
13             <dataSource type="POOLED">
14                 <property name="driver" value="com.mysql.jdbc.Driver" />
15                 <property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy" />
16                 <property name="username" value="root" />
17                 <property name="password" value="root" />
18             </dataSource>
19         </environment>
20       </environments>
21       <!-- 加载映射文件  -->
22       <mappers>
23           <mapper resource="sqlmap/UserMapper.xml"/>
24       </mappers>
25 </configuration>

2.4.4 编写Junit测试代码

  这里我们来实现根据id查询用户信息的功能,Junit测试代码的实现步骤如下:

    1.创建SqlSessionFactoryBuilder对象

    2.加载 SqlMapConfig.xml 配置文件

    3.创建 SqlSessionFactory 对象

    4.创建 SqlSession 对象

    5.使用SqlSession对象执行查询sql,获得结果 User 对象

    6.打印结果

    7.释放资源

Junit测试代码如下:

 1 package mybatis_study;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10 import org.junit.After;
11 import org.junit.Before;
12
13 import com.lwjnicole.pojo.User;
14
15 public class Test {
16     private SqlSessionFactory sqlSessionFactory = null;
17     private SqlSession session = null;
18
19     @Before
20     public  void before(){
21         //创建SqlSessionFactoryBuilder对象
22         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
23         InputStream inputStream = null;
24         try {
25             //加载SqlMapConfig.xml配置文件
26             inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
27         } catch (IOException e) {
28             e.printStackTrace();
29         }
30         //创建SqlSessionFactory对象
31         this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
32     }
33
34     @org.junit.Test
35     public void findUserById(){
36         //创建SqlSession对象
37         session     = sqlSessionFactory.openSession();
38         //使用SqlSession对象执行查询sql,获得结果
39         User user  = session.selectOne("findUserById", 27);
40         //打印结果
41         System.out.println(user);
42     }
43
44     @After
45     public void after(){
46         //释放资源
47         session.close();
48     }
49 }

执行结果如下:

至此,第一个业务功能就已经实现啦,剩下的功能在接下来的文章中介绍,我的项目结构为:

原文地址:https://www.cnblogs.com/lwjnicole/p/8352767.html

时间: 2024-10-07 23:15:33

mybatis的入门(二)的相关文章

mybatis从入门到精通(二) 增删查改

mybatis从入门到精通(二) 增删查改 一丶前言 "增删查改"是后台开发的常用操作, 因此, 学习mybatis或者其他orm框架有必要统一学习一下"增删查改". 二丶准备开发环境 使用"mybatis从入门到精通(一) 入门"准备的开发环境 三丶查 -- <select/> UserMapper.java User selectUser(@Param("userId") int userId); UserMa

mybatis入门(二)

mybatis入门(二) 探究sql语句的映射过程 要探究sql执行过程,先看一个简单的小例子 <?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"> <map

MyBatis从入门到精通(十二):使用collection标签实现嵌套查询

最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解使用collection标签实现嵌套查询的方法. 1. 需求升级 在上篇博客中,我们实现了需求:根据用户id查询用户信息的同时获取用户拥有的角色. 因为角色可以拥有多个权限,所以本篇博客我们升级需求为:根据用户id查询用户信息的同时获取用户拥有的角色以及角色包含的权限. 2. 实现方式 因为我们需要使用到权限表的映射,所以我们需要

MyBatis学习总结(一)——MyBatis快速入门

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备开发环境 1.创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示: 2.添加相应的jar包 [mybat

MyBatis学习总结(一)——MyBatis快速入门(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(二)--使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对users表执行CRUD操作.本文中使用到的测试环境是上一篇博文中的测试环境. 一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMa

MyBatis学习总结——MyBatis快速入门

MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.Mybatis入门 1. 用到的相关包      {Mybatis} mybat

Mybatis最入门---数据库的下载与安装

[一步是咫尺,一步即天涯] 最近,由于工作进度调整,之前的Spring教程就先暂时告一段落了,后续找个时间继续更新,如果有那位看官想了解某个内容的,敬请留言,大家一起学习.作为数据库工具的使用开篇,我们将先介绍数据的安装与配置,与图形界面的管理工具的安装与使用. 准备工作: a.操作系统 :win7 x64 b.基本软件:MySQL,Mybatis,Spring,SQLyog ------------------------------------------------------------

Mybatis最入门---动态查询(foreach)

[一步是咫尺,一步即天涯] 本文,我们来介绍使用Mybatis提供的<foreach>标签实现我们某些循环增改删差的需求.官方文档中的内容过于简陋,于是,博主筛选出比较全面讲述foreach用法的的内容,并且配有例子.希望各位看官能够手动敲一遍下面的例子,达到快速学习的目的. 准备工作: a.操作系统 :win7 x64 b.基本软件:MySQL,Mybatis,SQLyog -----------------------------------------------------------