### 1. MYBATIS简介

MYBATIS是持久层框架,大大的简化了持久层开发。

当使用MYBATIS框架时,开发人员不必再编写繁琐的JDBC代码,只需要定义好每个功能对应的抽象方法与需要执行的SQL语句即可!

### 2. 基本使用

#### 2.1. 添加依赖

需要在`pom.xml`中添加MyBatis的依赖:

    <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>

然后添加MyBatis整合Spring的依赖:

    <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>

其底层实现是基于JDBC的,所以,还需要添加`spring-jdbc`的依赖,需要注意的是:此次使用的版本必须与`spring-webmvc`的保持一致:

    <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>

根据使用的数据库,添加数据库连接驱动的依赖:

    <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>

添加数据源的依赖:

    <dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>

#### 2.2. 数据库连接

在`src/main/resources`下创建`db.properties`文件,用于配置数据库连接的相关信息:

#数据库驱动
driver=com.mysql.cj.jdbc.Driver
#数据库连接
url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
#数据库用户名
username=root
#数据库密码
password=
#数据库连接池初始连接数
initialSize=3
#数据库连接池最连接线程数
maxActive=5

在项目中准备名为`spring-dao.xml`的Spring配置文件,并加载以上数据库的配置文件:

    <!-- 加载数据库的配置文件 -->
<util:properties id="dbConfig"
location="classpath:db.properties" />

然后,将以上读取到的配置值应用于数据源`BasicDataSource`中:

    <!-- 配置数据源 -->
<bean class="org.apache.commons.dbcp.BasicDataSource">
<property name="url"
value="#{dbConfig.url}" />
<property name="driverClassName"
value="#{dbConfig.driver}" />
<property name="username"
value="#{dbConfig.username}" />
<property name="password"
value="#{dbConfig.password}" />
<property name="initialSize"
value="#{dbConfig.initialSize}" />
<property name="maxActive"
value="#{dbConfig.maxActive}" />
</bean>

以上配置时,各文件之间的关系如下图所示:

完成后,可以通过单元测试,以测试是否可以正确的获取到数据库的连接:

    public class ConnectionTestCase {

        @Test
public void getConnection() throws SQLException {
AbstractApplicationContext ac
= new ClassPathXmlApplicationContext(
"spring-dao.xml"); DataSource dataSource =
ac.getBean("dataSource", DataSource.class); System.out.println(dataSource.getConnection()); ac.close();
} }

#### 2.3. 创建实体类

每张数据表都应该有1个对应的实体类,所以,创建`cn.tedu.mybatis.entity.User`类,属性的数量与类型请参考数据表的设计:

    public class User implements Serializable {

        private static final long serialVersionUID = 7323921614984096421L;

        private Integer id;
private String username;
private String password;
private Integer age;
private String phone;
private String email;
// SET/GET,toString()
}

#### 2.4. 创建接口,声明抽象方法

创建`cn.tedu.mybatis.mapper.UserMapper`接口,并在接口中声明“插入用户数据”的抽象方法:

    public interface UserMapper {

        Integer addnew(User user);

    }

关于抽象方法,在MyBatis中,执行的操作如果是增、删、改,返回值均使用`Integer`,表示受影响的行数;方法的名称可以自定义,只要不违反Java的命名规则即可,另外,不允许在接口中使用重载机制;参数也可以自定义,如果执行的是增加操作,参数应该是与数据表对应的实体类的类型。

#### 2.5. 配置接口所在的包

在MyBatis中,通过`MapperScannerConfigurer`类扫描持久层接口的,所以,应该在`spring-dao.xml`文件中进行配置:

    <!-- MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置接口文件所在的包 -->
<property name="basePackage"
value="cn.tedu.mybatis.mapper" />
</bean>

从FTP下载`somemapper.zip`压缩包,得到`SomeMapper.xml`文件。

在`src/main/resources`下创建名为`mappers`文件夹,然后将`SomeMapper.xml`重命名为`UserMapper.xml`,并粘贴到`mappers`文件夹下:

> 其实,这些XML文件的名称并不重要,可以自由命名,通常,推荐使用与接口文件相同的名称,便于管理。

然后,编写`UserMapper.xml`文件中的内容,首先,根节点必须是`<mapper>`,且根节点的`namespace`表示对应的接口文件,然后,添加子节点,以对应接口中的抽象方法:

#### 2.7. 配置XML文件的位置与数据源

MyBatis通过`SqlSessionFactoryBean`获取数据源,并且扫描配置了SQL语句的XML文件,最终由MyBatis框架来执行SQL语句,所以,需要在`spring-dao.xml`中配置`SqlSessionFactoryBean`:

    <!-- SqlSessionFactoryBean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源,值为以上配置BasicDataSource节点的bean-id -->
<property name="dataSource"
ref="dataSource" />
<!-- XML文件在哪里 -->
<property name="mapperLocations"
value="classpath:mappers/*.xml" />
</bean>

#### 2.8. 单元测试

    public class UserMapperTestCase {

        AbstractApplicationContext ac;
UserMapper mapper; @Before
public void doBefore() {
ac = new ClassPathXmlApplicationContext("spring-dao.xml");
mapper = ac.getBean("userMapper", UserMapper.class);
} @After
public void doAfter() {
ac.close();
} @Test
public void addnew() {
User user = new User();
user.setUsername("刘GB");
user.setPassword("666");
Integer rows = mapper.addnew(user);
System.out.println("rows=" + rows);
} }

### 3. 查询数据

#### 3.1. 根据id查询某个用户的信息

首先,在`UserMapper.java`接口中添加该功能对应的抽象方法:

User findById(Integer id);

> 查询方法的返回可以根据所需要的类型来决定。

然后,在`UserMapper.xml`映射文件中添加新的节点配置抽象方法对应的SQL语句:

    <select id="findById"
resultType="cn.tedu.mybatis.entity.User">
SELECT
id, username,
password, age,
phone, email
FROM
t_user
WHERE
id=#{id}
<select>

> 执行查询时,`<select>`节点中必须配置`resultType`属性(或者是`resultMap`属性)。

以上方法执行时,如果查询到匹配的数据,则返回有效的User对象,如果没有匹配的数据,则返回null。

Spring + Mybatis应该如何配置的更多相关文章

  1. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

  2. spring,mybatis事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用[转]   spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...

  3. Spring+MyBatis双数据库配置

    Spring+MyBatis双数据库配置 近期项目中遇到要调用其它数据库的情况.本来仅仅使用一个MySQL数据库.但随着项目内容越来越多,逻辑越来越复杂. 原来一个数据库已经不够用了,须要分库分表.所 ...

  4. Spring+MyBatis实践—工程配置

    初次实践:Spring+MyBatis技术搭建框架,采用Bootstrap前端开源框架. 简介: MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所 ...

  5. spring+mybatis+springmvc的配置

    1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app version=&qu ...

  6. Spring+MyBatis多数据源配置实现

    最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...

  7. Spring+Mybatis+Maven 整合配置

    <?xml version="1.0" encoding="UTF-8"?> <beans default-autowire="by ...

  8. 使用IDEA的gradle整合spring+ mybatis 采用javaconfig配置

    1.新建一个工程 2.工程目录 3.添加gradle.propertes文件 activeMQVersion=5.7.0 aspectJVersion=1.7.2 commonsLangVersion ...

  9. spring+mybatis的简单配置示例

    简单代码结构: //Book.java package com.hts.entity; public class Book { private String id; private String bo ...

  10. Spring Mybatis多数据源配置范例

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

随机推荐

  1. 删除SVN版本信息 .svn文件夹

    环境:MyEclipse.Windows 问题描述: 在MyEclipse中当我们需要将一个文件夹(包含若干文件或嵌套文件夹)拷贝到另一个文件夹时,此时文件内容虽然拷贝过去了,但其下面的 .svn文件 ...

  2. 【Machine Learning】训练集 验证集 测试集区别

    最近在Udacity上学习Machine learning课程,对于验证集.测试集和训练集的相关概念有些模糊.故整理相关资料如下. 交叉检验(Cross Validation) 在数据分析中,有些算法 ...

  3. [uva] 10099 - The Tourist Guide

    10099 - The Tourist Guide 题目页:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...

  4. centos aws 修改使用密码ssh登录

    因为使用pem登录有很多局限性,在此修改为用密码但不是root登录 1.关闭selinux(要重启) vi /etc/selinux/config SELINUX=disabled 2.重置root密 ...

  5. Python学习---基础函数的学习

    1.1. 基础函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 灌输一个概念:Python中函数就是对象,函数和我们之前的[1,2,3],'abc ...

  6. Windows 编译 MQTT C++ Client

    MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可 ...

  7. 自开发Web应用和SAP Customer Data Cloud Identity服务的集成

    今天的文章继续由SAP成都研究院的云时代女王,Aviva给大家分享关于SAP Customer Data Cloud的一些使用经验. Aviva之前的文章可以在本文末尾处获得. 下面是她的正文. 大家 ...

  8. 显示锁(ReentranLock)

    1. Lock接口:定义了一组抽象的加锁操作,提供了一种无条件的.可轮询的.定时的以及可中断的锁获取操作,所有的加锁和解锁的方法都是显示的. 2. ReentrantLock锁:实现了Lock接口,并 ...

  9. JAVA中日期 yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss的区别

    JAVA中日期 yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss的区别 : HH:24小时制 hh:12小时制 package time; import java.tex ...

  10. Tomcat组件启动流程图

    看到一张关于Tomcat组件启动流程图,觉得还可以,收藏.