### 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. AngularJS实现原理

    个人觉得,要很好的理解AngularJS的运行机制,才能尽可能避免掉到坑里面去.在这篇文章中,我将根据网上的资料和自己的理解对AngularJS的在启动后,每一步都做了些什么,做一个比较清楚详细的解析 ...

  2. 在WinServer上安装小红伞杀毒软件的经验总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在WinServer2008或WinServer2012不能直接安装小红伞杀毒软件的免费版,需要安装服务器版.我手头并 ...

  3. C#虚基类继承与接口的区别

    类:定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指定或 ...

  4. Java 之初(1)

    省赛结束之后有相当长一段空闲时间,于是就想先提前自学一点Java语言的知识,在这里纪录一下学习过程,希望能给自学Java的同学提供一点小帮助!(当然,也能方便我以后的复习用^_^) 在学习过程中有什么 ...

  5. Qt 日志输出文件

    在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替.     做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪.定 ...

  6. configure配置安装详解

    使用 ./configure --help 就可以查看到所有的配置选项. 1.--host=HOST指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.--host 指定 ...

  7. Python学习---重点模块之json

    注意:JSON不能转换类,不能转换函数 重点方法示例 json.dumps():实现文件写入,字符串转换[写入文件当然是JSON字符串楼] 实际上,json.dumps()只是帮我们做了一个字符串的转 ...

  8. Windows 10 X64 ISO 专业版&家庭版下载与永久激活

    好久没有更新博客,算算时间,已经有4年了,好吧,今天突发奇想,想把今天安装Windows 10的过程给记录下来. 2015年的时候,微软就发布了Windows 10,当时正版的Win7.Win8都可以 ...

  9. July 24th 2017 Week 30th Monday

    The only limit to our realization of tomorrow will be our doubts of today. 实现明天理想的唯一障碍就是今天的疑虑. When ...

  10. Makefile 实例

    CROSS_COMPILE = HI_CFLAGS= -Wall -O2 -g -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv ...