首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring + MyBatis配置详细讲解

Spring + MyBatis配置详细讲解

原创
作者头像
知忆
修改2021-06-22 10:09:12
3510
修改2021-06-22 10:09:12
举报
文章被收录于专栏:linux百科小宇宙linux百科小宇宙

### 1. MyBatis简介

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

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

### 2. 基本使用

#### 2.1. 添加依赖

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

org.mybatis

mybatis

3.4.6

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

org.mybatis

mybatis-spring

1.3.2

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

org.springframework

spring-jdbc

4.3.9.RELEASE

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

MySQL

mysql-connector-Java

8.0.13

添加数据源的依赖:

commons-dbcp

commons-dbcp

1.4

#### 2.2. 数据库连接

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

#数据库驱动

driver=com.mysql.cj.jdbc.Drive

#数据库连接

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配置文件,并加载以上数据库的配置文件:

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

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

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

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`文件中进行配置:

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

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

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

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

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

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

#### 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);

}

@Afte

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, username,

password, age,

phone, email

FROM

t_use

WHERE

id=#{id}

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档