北京网站设计联系方式,数字logo创意设计,境外社交网站上做推广,域名备案备注怎么写目录
一、简介
二、配置
三、基于注解的基本使用
四、测试
总结 一、简介
在Java开发中#xff0c;数据库操作是一个常见而重要的任务。为了方便地执行SQL语句#xff0c;获取结果集#xff0c;处理异常等#xff0c;我们通常需要使用JDBC#xff08;Java Database …目录
一、简介
二、配置
三、基于注解的基本使用
四、测试
总结 一、简介
在Java开发中数据库操作是一个常见而重要的任务。为了方便地执行SQL语句获取结果集处理异常等我们通常需要使用JDBCJava Database ConnectivityAPI这是一个标准的数据库访问接口。然而使用JDBC也有一些缺点例如
我们需要编写大量的重复代码如加载驱动创建连接关闭资源等。我们需要手动设置参数和获取结果集这可能导致类型不匹配或空指针等错误。我们需要硬编码SQL语句这可能导致可读性和维护性的问题。
为了解决这些问题许多持久层框架Persistence Framework应运而生它们可以提供更高层次的抽象和封装使得数据库操作更加简单和方便。其中一个著名的持久层框架就是MyBatis。
MyBatis是一个开源的持久层框架它支持自定义SQL存储过程和高级映射。MyBatis可以通过简单的XML或注解来配置和映射原始类型接口和Java POJOPlain Old Java Objects为数据库中的记录。MyBatis的主要特点有
简单易用MyBatis可以消除几乎所有的JDBC代码和手动设置参数和获取结果集的工作。灵活强大MyBatis可以使用动态SQL来适应各种复杂的查询需求并且可以使用插件机制来扩展其功能。轻量高效MyBatis占用资源少运行速度快并且可以与各种流行的数据库和缓存框架集成。
二、配置
要使用MyBatis我们首先需要添加它的依赖到我们的项目中。如果我们使用Maven来管理项目我们可以在pom.xml文件中添加如下代码
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.13/version
/dependency然后我们需要创建一个MyBatis的配置文件通常命名为mybatis-config.xml。这个文件用于定义一些全局的属性和设置例如数据源DataSource事务管理器TransactionManager日志实现LogImpl等。一个简单的配置文件示例如下
?xml version1.0 encodingUTF-8?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationproperties resourcejdbc.properties/settingssetting namelogImpl valueSTDOUT_LOGGING//settingstypeAliasespackage namecom.example.domain//typeAliasesmappersmapper classcom.example.mapper.UserMapper//mappers
/configuration在上面的配置文件中我们做了以下几件事
我们引入了一个外部的属性文件jdbc.properties用于存储数据库连接相关的信息如驱动类名driverClassName连接地址url用户名username和密码password等。我们设置了日志实现为STDOUT_LOGGING表示将日志输出到标准输出流中。我们定义了一个类型别名TypeAlias表示将com.example.domain包下的所有类注册为别名这样我们就可以在后面的映射文件中使用简短的类名而不是完整的限定名。我们指定了一个映射器Mapper表示将com.example.mapper.UserMapper类作为一个映射器用于定义SQL语句和结果映射等。
三、基于注解的基本使用
有了配置文件后我们就可以开始使用MyBatis来操作数据库了。MyBatis的核心接口是SqlSession它表示和数据库的一次会话可以用来执行SQL语句提交或回滚事务获取映射器等。我们可以通过SqlSessionFactory来创建SqlSession而SqlSessionFactory可以通过SqlSessionFactoryBuilder来构建传入配置文件的输入流即可。以下是一个创建SqlSession的示例
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;public class MyBatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {// 读取配置文件InputStream inputStream Resources.getResourceAsStream(mybatis-config.xml);// 构建SqlSessionFactorysqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);} catch (Exception e) {e.printStackTrace();}}// 获取SqlSessionpublic static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}有了SqlSession后我们就可以通过它来执行SQL语句了。MyBatis提供了两种方式来执行SQL语句一种是通过XML映射文件来定义SQL语句和结果映射另一种是通过注解来定义SQL语句和结果映射。我们以第二种方式为例介绍如何使用MyBatis进行增删改查操作。
首先我们需要定义一个实体类Entity Class用于表示数据库中的一张表。例如我们有一张用户表user其结构如下
idnameageemail1Tom18tomgmail.com2Bob20bobqq.com3Alice19alice163.com
我们可以定义一个User类来对应这张表代码如下
package com.example.domain;import java.io.Serializable;public class User implements Serializable {private Integer id;private String name;private Integer age;private String email;// 省略构造方法getter和setter方法toString方法
}然后我们需要定义一个持久层接口DAO Interface用于声明对User表的操作方法。在这个接口中我们可以使用MyBatis提供的注解来编写SQL语句并指定参数和返回值类型。例如我们可以定义一个UserMapper接口代码如下
package com.example.mapper;import com.example.domain.User;
import org.apache.ibatis.annotations.*;import java.util.List;public interface UserMapper {// 查询所有用户Select(select * from user)ListUser findAll();// 根据id查询用户Select(select * from user where id #{id})User findById(Integer id);// 添加用户Insert(insert into user (name, age, email) values (#{name}, #{age}, #{email}))void insert(User user);// 修改用户Update(update user set name #{name}, age #{age}, email #{email} where id #{id})void update(User user);// 删除用户Delete(delete from user where id #{id})void delete(Integer id);}在上面的代码中我们使用了Select, Insert, Update, Delete四个注解来分别表示查询插入更新和删除操作。在注解中我们可以直接写SQL语句并且可以使用#{参数名}来表示占位符。MyBatis会自动将参数对象的属性值替换到占位符中并且会根据返回值类型进行结果集的映射。
四、测试
最后我们需要编写测试类Test Class用于调用UserMapper接口中的方法并验证其功能。我们可以使用JUnit来编写测试类代码如下
package com.example.test;import com.example.domain.User;
import com.example.mapper.UserMapper;
import com.example.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.util.List;public class UserMapperTest {private SqlSession sqlSession;private UserMapper userMapper;Beforepublic void init() {// 获取SqlSessionsqlSession MyBatisUtil.getSqlSession();// 获取UserMapper接口的代理对象userMapper sqlSession.getMapper(UserMapper.class);}Afterpublic void destroy() {// 提交事务sqlSession.commit();// 关闭资源sqlSession.close();}// 测试查询所有用户Testpublic void testFindAll() {// 调用findAll方法ListUser users userMapper.findAll();// 遍历打印结果for (User user : users) {System.out.println(user);}}// 测试根据id查询用户Testpublic void testFindById() {// 调用findById方法传入id为1User user userMapper.findById(1);// 打印结果System.out.println(user);}// 测试添加用户Testpublic void testInsert() {// 创建一个User对象设置其属性值User user new User();user.setName(Jack);user.setAge(22);user.setEmail(jackoutlook.com);// 调用insert方法传入user对象userMapper.insert(user);// 打印结果可以看到id已经自动赋值System.out.println(user);}// 测试修改用户Testpublic void testUpdate() {// 先根据id查询一个用户得到一个User对象User user userMapper.findById(2);// 修改该对象的属性值user.setName(Bobo);user.setAge(21);user.setEmail(boboqq.com);// 调用update方法传入user对象userMapper.update(user);// 打印结果可以看到属性值已经更新System.out.println(user);}// 测试删除用户Testpublic void testDelete() {// 调用delete方法传入id为3userMapper.delete(3);// 查询所有用户可以看到id为3的用户已经删除testFindAll();}
}
在上面的代码中我们使用了Before和After两个注解来分别在每个测试方法执行前后进行一些初始化和销毁的操作例如获取SqlSession提交事务关闭资源等。然后我们使用Test注解来标记每个测试方法并在方法体中调用UserMapper接口中的相应方法并打印结果。运行测试类我们可以看到控制台输出了正确的结果说明我们的数据库操作成功了。
总结
本文介绍了MyBatis这个持久层框架的简介配置和基于注解的基本使用。通过MyBatis我们可以方便地执行SQL语句并将结果集映射为Java对象。MyBatis还提供了许多高级特性如动态SQL缓存插件等使得数据库操作更加灵活和高效。