1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 01-Mybatis持久层框架快速入门(环境搭建 xml配置文件 注解)

01-Mybatis持久层框架快速入门(环境搭建 xml配置文件 注解)

时间:2019-11-11 15:07:48

相关推荐

01-Mybatis持久层框架快速入门(环境搭建 xml配置文件 注解)

文章目录

1、框架1.1、框架概念1.2、软件分层开发1.3、JDBC编程分析2、Mybatis框架2.1、Mybatis框架概述2.2、Mybatis开发环境搭建2.3、Mybatis入门案例2.4、基于注解的Mybatis3、源码下载

《Mybatis使用手册》(第1篇 / 共5篇,持续更新),收藏 + 关注 不迷路,希望对小伙伴们有所帮助哦~

源码链接在文末 ↓ ↓ ↓


1、框架

1.1、框架概念

框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。简单的说,框架就是某种应用的半成品。

使用框架要解决的问题

框架要解决的最重要的一个问题是技术整合的问题,技术自身的复杂性和技 术的风险性将会直接对应用造成冲击。应用是软件企业的核心,因此应该将应用自身的设 计和具体的实现技术解耦。

框架一般处在底层应用平台(如 J2EE)和高层业务逻辑之间的中间层。

1.2、软件分层开发

框架的重要性在于它实现了部分功能,并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现 软件工程中的“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。我们常见的 MVC 软件设计思想就是很好的分层思想。

1.3、JDBC编程分析

public class Jdbc {public static void main(String[] args) {Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet =null;try {// 1. 注册驱动Class.forName("com.mysql.jdbc.Driver");// 2. 获取数据库连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");// 3. 定义sqlString sql = "select * from user where username = ?";// 4. 获取预处理statementpreparedStatement = connection.prepareStatement(sql);// 5. 执行sqlpreparedStatement.setString(1, "老王");resultSet = preparedStatement.executeQuery();while (resultSet.next()) {System.out.println(resultSet.getString("id") + " " + resultSet.getString("username"));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {// 6. 释放资源if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}}}}

jdbc所存在的问题 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能 多也可能少,修改 sql 还要修改代码,系统不易维护。对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记 录封装成 pojo 对象解析比较方便。

2、Mybatis框架

2.1、Mybatis框架概述

mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。

采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我 们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

ORM:Object Relational Mappging 对象关系映射

就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表(实体类属性和数据库字段名需要保持一致)。

2.2、Mybatis开发环境搭建

创建maven工程,引入Mybatis坐标

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

创建实体类 domain,和持久层接口 XXXDao.java编写Mybatis主配置文件 SqlMapConfig.xml 主配置文件约束

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd">

编写持久层接口映射配置文件 XXXDao.xml 或 XXXMapper.xml 映射配置文件约束

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd">

【注意】

mybatis的映射配置文件位置必须和dao接口的包结构相同;映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名;映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名。遵循以上几点之后,在开发中就无需再写Dao的实现类。

2.3、Mybatis入门案例

实现步骤 读取主配置文件;创建SqlSessionFactoryBuilder构建者对象;创建SqlSessionFactory工厂对象;创建SqlSession对象;创建Dao的代理对象;使用代理对象执行Dao中的方法;释放资源。 主配置文件

<!-- mybatis的主配置文件 --><configuration><!-- 配置环境 --><environments default="mysql"><!-- 配置mysql的环境 --><environment id="mysql"><!-- 配置事务类型 --><transactionManager type="JDBC"/><!-- 配置数据源(连接池) --><dataSource type="POOLED"><!-- 配置连接数据库的4个基本信息 --><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --><mappers><mapper resource="com/junlong/dao/UserDao.xml"/></mappers></configuration>

持久层接口

public interface UserDao {/*** 查询所有用户** @return List<User> 返回所有用户列表*/List<User> findAll();}

映射配置文件

<mapper namespace="com.junlong.dao.UserDao"><!-- 配置查询所有 --><select id="findAll" resultType="com.junlong.domain.User">select * from user</select></mapper>

测试

public class UserDaoTest {@Testpublic void testFindAll() throws Exception {// 1. 读取Mybatis主配置文件InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");// 2. 创建 SqlSessionFactory 的构建者对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3. 使用构建者创建工厂对象 SqlSessionFactorySqlSessionFactory sqlSessionFactory = builder.build(in);// 4. 使用工厂对象创建 SqlSession 对象SqlSession sqlSession = sqlSessionFactory.openSession();// 5. 使用 SqlSession 对象创建 Dao 接口的代理对象UserDao userDao = sqlSession.getMapper(UserDao.class);// 6. 使用代理对象执行查询所有方法List<User> users = userDao.findAll();for (User user : users) {System.out.println(user);}// 7. 释放资源sqlSession.close();in.close();}}

2.4、基于注解的Mybatis

实现步骤 将映射配置文件移除,在Dao接口的方法上使用@Select注解,并指定 sql 语句;在主配置文件 SqlMapConfig.xml 中配置mapper时,使用 class 属性指定Dao接口的全限定类名。

【注意】在实际开发中都是采用不写dao实现类的方式。但是Mybatis是支持写dao实现类的。

主配置文件

<!-- mybatis的主配置文件 --><configuration><!-- 配置环境 --><environments default="mysql"><!-- 配置mysql的环境 --><environment id="mysql"><!-- 配置事务类型 --><transactionManager type="JDBC"/><!-- 配置数据源(连接池) --><dataSource type="POOLED"><!-- 配置连接数据库的4个基本信息 --><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --><mappers><mapper class="com.junlong.dao.UserDao"/></mappers></configuration>

持久层接口

public interface UserDao {/*** 查询所有用户** @return List<User> 返回所有用户列表*/@Select("select * from user")List<User> findAll();}

测试

public class UserDaoTest {@Testpublic void testFindAll() throws Exception {// 1. 读取Mybatis主配置文件InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");// 2. 创建 SqlSessionFactory 的构建者对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3. 使用构建者创建工厂对象 SqlSessionFactorySqlSessionFactory sqlSessionFactory = builder.build(in);// 4. 使用工厂对象创建 SqlSession 对象SqlSession sqlSession = sqlSessionFactory.openSession();// 5. 使用 SqlSession 对象创建 Dao 接口的代理对象UserDao userDao = sqlSession.getMapper(UserDao.class);// 6. 使用代理对象执行查询所有方法List<User> users = userDao.findAll();for (User user : users) {System.out.println(user);}// 7. 释放资源sqlSession.close();in.close();}}

3、源码下载

源码下载链接👉 点击直达下载地址

《Mybatis使用手册》持续更新中…

感谢小伙伴们的关注!收藏 + 关注 不迷路 ~


相关内容

👉 Mybatis手册

👉 JavaSE手册

往期精彩内容

👉 Java小白学习手册 - SE

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。