IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 老师问我MyBatis开发流程是什么?我说我是这样做的。 -> 正文阅读

[Java知识库]老师问我MyBatis开发流程是什么?我说我是这样做的。

前言

最近刚学了mybatis框架,本文用于以后使用mybatis时,查看具体内容,作为mybatis笔记使用,记录其中关于mybatis的内容

MyBatis的使用

引入jar包

jar包放在WEB-INF的lib下
在这里插入图片描述

  • druid.jar
    阿里开源连接池框架,用于替换mybatis内置连接池
  • log4j.jar
    日志文件
  • lombok.jar
    包含实体类的一些常用方法
  • mybatis.jar
    mybatis框架
  • mysql-connector.jar
    JDBC连接jar包

创建实体类

在这里插入图片描述

创建Mapper接口(dao层)

在这里插入图片描述
其中是对数据库的操作的接口

更换数据源

  1. 首先添加druid配置文件

在这里插入图片描述
配置文件内容

druid.driver = com.mysql.cj.jdbc.Driver
druid.url = jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
druid.username=用户名
druid.password=密码

此处= 前面的内容不能随意更改,文件的名称同样不能更改。

  1. 更改mybatis内置连接池,将无连接池的替换为druid连接池

在这里插入图片描述

文件内容:

package com.dyit.util;

import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;

import com.alibaba.druid.pool.DruidDataSource;


public class MybatisDataSource extends UnpooledDataSourceFactory{
	//替换数据源
	public MybatisDataSource() {
		this.dataSource = new DruidDataSource();
	}
}

配置实体类和数据库的映射

在这里插入图片描述
文件名需要为xxx.mapper.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="com.dyit.mapper.IBookMapper">
<cache/>

<!-- type中本来需要写类的全路径 应该在配置文件中 对实体类进行了设置 所以此处不需要写全名 -->
	<resultMap type="Book" id="BookMap">
	
	<!--  property为实体类的属性名 column为对应数据库的字段名 -->
		<id property="id" column="book_id"/>
		<result property="isbn" column="book_isbn"/>
		<result property="title" column="book_title"/>
		<result property="author" column="book_author"/>
		<result property="price" column="book_price"/>
		<result property="date"  column="book_date"/>
		<result property="cover" column="book_cover"/>
	</resultMap>


<!-- 一下是对数据库操作的sql语句 插入标签为insert 增加为update 修改update 查询select -->
<!-- id为接口中的方法名 -->
	<insert id="save">
		INSERT INTO book_tab(book_isbn,book_title,book_author,book_price,book_date,book_cover)
		 VALUES(#{isbn},#{title},#{author},#{price},#{date},#{cover})
	</insert>
	
	
	<select id="findByisbn" resultMap="BookMap">
		SELECT * FROM book_tab WHERE book_isbn = #{isbn}
	
	</select>
	
	
	<!-- resultMap为上面数据库和实体类映射的id -->
	<select id="findById" resultMap="BookMap">
	SELECT * FROM book_tab WHERE book_id = #{id}
		
	</select>
	
	
	
</mapper>

#{}为根据参数名取出具体的参数值

  • 如果为单参数可直接使用形参名
  • 如果为多参,可以设置注解类填写别名
Book findBookByIsbn(@Param("isbn")String isbn);

如果设置了别名则{}需要填写别名

${}是拼接 #{}是注入 #{}可以防止sql注入漏洞

mybatis配置文件

在这里插入图片描述

<?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>

	<!-- 读取数据源配置文件 -->
	<properties resource="resource/druid/druid.properties"/>
	
	<!-- 实体类的别名 -->
	<typeAliases>
		<package name="com.dyit.entity"/>
	</typeAliases>
	
	
	<environments default="development">
		<environment id="development">
		   <!-- 事务管理器JDBC -->
			<transactionManager type="JDBC" />
			<!-- 配置MyBatis -->
			<dataSource type="com.dyit.util.MybatisDataSource">
				<property name="driverClassName" value="${druid.driver}"/>
				<property name="url" value="${druid.url}"/>
				<property name="username" value="${druid.username}"/>
				<property name="password" value="${druid.password}"/>
			</dataSource>
			
			
		</environment>
	</environments>
	
	<!-- 表和类之间的映射 -->
	<mappers>
		<mapper resource="resource/mapper/Book.mapper.xml"/>
	</mappers>
</configuration>

封装sqlSession

在这里插入图片描述

package com.dyit.util;

import java.io.IOException;

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 org.apache.log4j.Logger;

/**
 * 单例模式返回实例
 * @author strve
 *
 */
public class MybatisUtil {
	
	private SqlSessionFactory sqlSessionFactory;
	private static MybatisUtil instance;
	//私有化构造方法
	private MybatisUtil() {
		init();
	}
	//返回实例
	public static MybatisUtil getInstance() {
		if (instance == null) {
			synchronized (MybatisUtil.class) {
				if (instance == null) {
					instance = new MybatisUtil();
				}
			}
		}
		return instance;
	}
	
	//初始化
	public void init() {
		try {
			//加载配置文件 返回sqlSessionFactory
			sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader("resource/config/mybatis-config.xml"));
		} catch (IOException e) {
			Logger.getLogger(MybatisUtil.class).debug(e.getMessage());
			e.printStackTrace();
		}
	}
	
	//得到SqlSession对象
	public SqlSession opeSqlSession() {
		return sqlSessionFactory.openSession();
	}

}

创建单例模式 ,可以得到mybatis封装类对象,可以sqlsession对象

服务层实现

在这里插入图片描述
接口中内容和IBookMapper接口相同

实现类:

package com.dyit.service.impl;

import org.apache.ibatis.session.SqlSession;

import com.dyit.entity.Book;
import com.dyit.mapper.IBookMapper;
import com.dyit.service.IBookService;
import com.dyit.util.MybatisUtil;

public class BookServiceImpl implements IBookService {
	//得到mybatis封装类对象
	private MybatisUtil db = MybatisUtil.getInstance();

	@Override
	public Book findBookByIsbn(String isbn) {
		//得到sqlSession对象
		SqlSession sqlSession = db.opeSqlSession();
		//根据对数据库操作的接口 得到其对象
		IBookMapper mapper = sqlSession.getMapper(IBookMapper.class);
		//实现其方法  注意需要在mapper.xml中书写正确的sql语句
		Book book = mapper.findByisbn(isbn);
		
		//提交 事务  注意不能少
		sqlSession.commit();
		sqlSession.close();
		
		return book;
	}

}

最后就是controller层的servlet,即可。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:56:41  更:2022-02-16 12:56:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:09:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码