探索MyBatis:简化Java数据操作的利器
Mybatis(上)
该文章介绍了SSM中的MyBatis,它不仅允许开发者灵活地编写SQL,优化查询,还能显著提升开发效率。
该文章将清晰地结构化,涵盖MyBatis的基本概念、优势、使用方法以及常见问题,方便你轻松跟随。
此外,我们鼓励读者分享自己的经验和提问,以增加互动性。
简介
Mybatis是一款优秀的持久层框架。
Mybatis支持定制化SQL、存储过程以及高级映射。
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
持久化
持久化就是将程序的数据在持久状态和瞬时状态转化的过程内存因为断电即失的特点,而有一些对象,不能让它丢掉,所以需要持久化。内存又太贵了,不能将数据持久放在内存中。
持久层
完成持久化工作的代码块
第一个Mybatis程序实现 (思路大纲)
使用Mybatis对数据库进行操作
1.配置环境
导入依赖:
首先需要导入Mybatis依赖和Mysql依赖,才能使用Mybatis和连接Mysql。
之后需要一个sqlSession对象,这需要写一个Mybaits工具类来返回一个sqlSession对象。
Mybatis工具类:
这个Mybatis工具类的实现,是为了返回一个sqlSession对象,需要一个sqlSessionFactory;
而一个sqlSessionFactory对象需要通过 SqlSessionFactoryBuilder 获得;
而 SqlSessionFactoryBuilder 则可以从 XML 配置文件进行加载。
Mybatis核心配置文件:
这样我们就需要一个Mybatis的核心配置文件XML。
这个XML文件需要进行事务管理和数据库连接配置,同时还需要要包含一组映射器(mapper),这些映射器的 XML文件包含了 SQL 代码和映射定义信息。
环境配置完毕!!!
2.编写代码
实体类:
之后就是编写代码, 创建一个与数据库表对应的实体类。
比如针对数据库查询select,首先写一个实体类,内容是包括select的表的各个字段的信息。
Mapper接口
之后写一个Mapper映射接口,自定义的,里面写一个方法用来返回结果集的。
不过每个Mapper接口都需要注册,就是在上述的Mybatis中注册,才能使用。
对应的XML文件
之后通过写一个配置文件,在配置文件中写SQL的相关操作,对接Mapper接口,用来返回结果集。
MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。
2.测试
使用MyBatis
获取 sqlSesion对象,通过MyBatis工具类返回一个sqlSession对象;
使用SqlSession获取Mapper接口的实例;
通过该实例方法的调用,执行相关操作,获取结果集;
关闭SQL Session。
第一个Mybatis程序实现 (代码实现)
1.配置环境:
- 导入依赖,解决 Maven 配置文件未被导出或生效的问题(build)
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.16</version> </dependency> </dependencies>
<!--在子部写--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
- 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { throw new RuntimeException(e); } } public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); }}
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="111111"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/example/Dao/UserMapper.xml"/> </mappers></configuration>
编写代码
- 编写一个实体类,与数据库的表相对应。
//实体类public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; }}
- 创建一个mapper接口,在里面编写一个方法,用来返回结果集。
public interface UserDao { public List<User> getUserList();}
- 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。
<?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"><mapper namespace="org.example.Dao.UserDao"> <select id="getUserList" resultType="org.example.pojo.User"> select * from mybatis.user </select></mapper>
测试
- 创建一个sqlSession对象,用Mybatis工具类返回值对象值。
- 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。
- 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。
- 关闭sqlSession,释放资源。
public class testDao { @Test public void test() { //获得SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //方式一执行SQL UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //关闭sqlSession sqlSession.close(); }}
总结
使用Mybatis对数据库进行操作
配置环境:
- 导入依赖,解决解决 Maven 配置文件未被导出或生效的问题(builder)
- 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!
编写代码
- 编写一个实体类,与数据库的表相对应。
- 创建一个mapper接口,在里面编写一个方法,用来返回结果集。
- 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。
测试
- 创建一个sqlSession对象,用Mybatis工具类返回值对象值。
- 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。
- 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。
- 关闭sqlSession,释放资源。
本专栏汇总了大量的Java面试题和Java面经,希望对大家有所帮助!