Java Mybatis框架增删查改与核心配置详解流程与用法
作者:龍弟-idea 发布时间:2022-07-08 10:47:20
目录
Mybatis简介
Mybatis开发步骤:
Mybatis的映射文件概述
Mybatis的增删改查操作
MyBatis的核心配置文件概述
MyBatis核心配置文件层级关系
MyBatis常用配置解析
Mybatis相应API
原始JDBC操作
原始jdbc操作(查询数据)
原始jdbc操作(插入数据)
原始jdbc操作的分析原始jdbc开发存在的问题如下:
①数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
②sql 语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
③查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置
应对上述问题给出的解决方案:
①使用数据库连接池初始化连接资源
②将sql语句抽取到xml配置文件中
③使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射
Mybatis简介
①mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
②mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
③最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。
Mybatis官网地址:mybatis – MyBatis 3 | Introduction
Mybatis开发步骤:
①添加MyBatis的坐标
②创建user数据表
③编写User实体类
④编写映射文件UserMapper.xml
⑤编写核心文件SqlMapConfig.xml
⑥编写测试类
①添加MyBatis的坐标和其它相关坐标
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
②创建user数据表
③编写User实体类
public class User {
private int id;
private String username;
private String password;
//省略get和set方法
}
④编写映射文件UserMapper.xml
<?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="userMapper">
<!--查询操作-->
<select id="findAll" resultType="user">
select * from user
</select>
</mapper>
⑤编写Mybatis核心文件SqlMapConfig.xml
<?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="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com/longdi/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
⑥编写测试类
@Test
//查询操作
public void test1() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作 参数:namespace+id
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印数据
System.out.println(userList);
//释放资源
sqlSession.close();
}
Mybatis的映射文件概述
Mybatis的增删改查操作
①Mybatis的插入数据操作
编写UserMapper映射文件
<mapper namespace="userMapper">
<!--插入操作-->
<insert id="save" parameterType="com.longdi.domain.User">
insert into user values(#{id},#{username},#{password})
</insert>
</mapper>
编写插入实体的User代码
@Test
//插入操作
public void test2() throws IOException {
//模拟user对象
User user = new User();
user.setUsername("xxx");
user.setPassword("abc");
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//执行操作 参数:namespace+id
sqlSession.insert("userMapper.save",user);
//释放资源
sqlSession.close();
}
插入操作注意问题:
插入语句使用insert标签
在映射文件中使用parameterType属性指定要插入的数据类型
Sql语句中使用#{实体属性名}方式引用实体中的属性值
插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);
插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()
②Mybatis的修改数据操作
编写UserMapper映射文件
<mapper namespace="userMapper">
<!--修改操作-->
<update id="update" parameterType="com.longdi.domain.User">
update user set username=#{username},password=#{password} where id=#{id}
</update>
</mapper>
编写修改实体的User代码
@Test
//修改操作
public void test3() throws IOException {
//模拟user对象
User user = new User();
user.setId(7);
user.setUsername("lucy");
user.setPassword("123");
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作 参数:namespace+id
sqlSession.update("userMapper.update",user);
//mybatis执行更新操作 提交事务 因为mybatis默认不提交事物
sqlSession.commit();
//释放资源
sqlSession.close();
}
修改操作注意问题:
修改语句使用update标签
修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);
③Mybatis的删除数据操作
编写UserMapper映射文件
<mapper namespace="userMapper">
<!--删除操作-->
<delete id="delete" parameterType="int">
delete from user where id=#{abc}
</delete>
</mapper>
编写删除实体的User代码
@Test
//删除操作
public void test4() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作 参数:namespace+id
sqlSession.delete("userMapper.delete",8);
//mybatis执行更新操作 提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
删除操作注意问题:
删除语句使用delete标签
Sql语句中使用#{任意字符串}方式引用传递的单个参数
删除操作使用的API是sqlSession.delete(“命名空间.id”,Object);
MyBatis的核心配置文件概述
MyBatis核心配置文件层级关系
MyBatis常用配置解析
1.environments标签
数据库环境的配置,支持多环境配置
其中,事务管理器(transactionManager)类型有两种:
①JDBC:这个配置就是直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
②MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE应用服务器的上下文)。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为。
其中,数据源(dataSource)类型有三种:
①UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
②POOLED:这种数据源的实现利用“池”的概念将JDBC连接对象组织起来。
③JNDI:这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。
2.mapper标签
该标签的作用是加载映射的,加载方式有如下几种:
①使用相对于类路径的资源引用,例如: <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
②使用完全限定资源定位符(URL),例如: <mapper url="file:/var/mappers/AuthorMapper.xml"/>
③使用映射器接口实现类的完全限定类名,例如: <mapper class="org.mybatis.builder.AuthorMapper"/>
④将包内的映射器接口实现全部注册为映射器,例如: <package name="org.mybatis.builder"/>
3. Properties标签
4.typeAliases标签
上面我们是自定义的别名,mybatis框架已经为我们设置好的一些常用的类型的别名
Mybatis相应API
①SqlSession工厂构建器SqlSessionFactoryBuilder
常用API: SqISessionFactory build(InputStream inputStream)
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象
其中,Resources 工具类,这个类在 org.apache.ibatis.io包中。Resources类帮助你从类路径下、文件系统或一个web URL 中加载资源文件。
②SqlSession工厂对象SqlSessionFactory
SqlSessionFactory有多个个方法创建SqlSession实例。常用的有如下两个:
③SqlSession会话对象
SqISession实例在MyBatis中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。执行语句的方法主要有:
操作事务的方法主要有:
①void commit()
②void rollback()
来源:https://blog.csdn.net/weixin_48838340/article/details/120929552


猜你喜欢
- 本文实例为大家分享了Android创建可拖动图片控件的具体代码,供大家参考,具体内容如下重载、自绘1、从View派生一个控件类 ,构造函数中
- 1. 线程的5种状态从操作系统层面上,任何线程一般都具有五种状态,即创建、就绪、运行、阻塞、终止。(1) 新建状态(NEW)在程序中用构造方
- 本文实例讲述了java之swing下拉菜单实现方法。分享给大家供大家参考。具体如下:import java.awt.*;import jav
- 1. 前言在Java开发中接触的开发者大多数不太注重对接口的测试,结果在联调对接中出现各种问题。也有的使用Postman等工具进行测试,虽然
- MapReduce的原理MapReduce由两个主要阶段组成:Map和Reduce。在Map阶段中,数据集被分成若干个小块,每个小块由Map
- 一、扫雷扫雷小游戏主要是利用字符数组、循环语句和函数实现。设计思路:雷盘大小为9*9,但是为了后续能更好的统计出雷的个数在定义数组的时候定义
- 进度条样式在项目中经常可以见到,下面小编给大家分享Android三种方式实现ProgressBar自定义圆形进度条。Android进度条有4
- 1、任何的高并发,请求总是会有一个顺序的2、java的队列的数据结构是先进先出的取值顺序3、BlockingQueue类(线程安全)(使用方
- 本文实例为大家分享了C#实现扫雷游戏的具体代码,供大家参考,具体内容如下一、实验目的:1、掌握c#窗体和控件的常用属性和功能2、完成扫雷游戏
- 在日常系统开发中,经常需要在adroid的framework修改或添加自己的配置。例如在config.xml 添加一个新的变量。我这边测试发
- Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日
- idea中的Maven导包失败问题解决总结1.先确定idea和Maven 的配置文件settings 没有问题找到我们本地的maven仓库,
- 官方文档 8.0Spring为不同缓存做了一层抽象,这里通过阅读文档以及源码会对使用以及原理做一些学习笔记。1.简介
- 目录RemoveSubstringReplaceSpiltJoinAppendRemoveRemove(int startIndex) 删除
- 1、JavaBean介绍 * JavaBean的定义:JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)
- Spring数据源的配置数据源(连接池)的作用数据源(连接池)是提高程序性能如出现的事先实例化数据源,初始化部分连接资源使用连接资源时从数据
- 本文实例讲述了Android编程实现仿优酷圆盘旋转菜单效果的方法。分享给大家供大家参考,具体如下:目前,用户对安卓应用程序的UI设计要求越来
- design包的出现,Android界面发生了巨大变化,各种滑动配合的效果,下面我就粘性滑动中的一种进行自定义,效果图如下: 大家看到效果了
- Spring Data 概述Spring Data用于简化数据库访问,支持NoSQL 和 关系数据存储,其主要目标是使数据库的访问变得方便快
- 这篇文章主要介绍了JavaWeb项目Servlet无法访问问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价