老师问我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,即可。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vivien_o.O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值