Mybatis笔记(一)

Mybatis

MyBatis 是一个优秀的持久层框架,它对 JDBC 的操作数据库的过程进行封装,使开发者只需要关注 sql 本身,而不
需要花费精力去处理例如注册驱动、创建 connection、创建 statement、手动设置参数、结果集检索等 JDBC 繁杂的过程代码。

结构

1、MyBatis 配置文件。

SqlMapConfig.xml:此文件作为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息。

mapper.xml:sql映射文件,配置了操作数据库的 sql 语句,此文件需要在 SqlMapConfig.xml 中加载。

在mapper.xml中将写好sql语句

2、通过 MyBatis 环境等配置信息构造 SqlSessionFactory(会话工厂)。

3、由会话工厂创建 SqlSession(会话),操作数据库需要通过 SqlSession 进行。

4、MyBatis 底层自定义了 Executor 执行器接口操作数据库,Executor 接口有两个实现,一个是基本执行器、一个是缓存执行器。

5、Mapped Statement 也是 MyBatis 一个底层封装对象,它包装了 MyBatis 配置信息及 sql 映射信息等,mapper.xml 文件中一个 sql 对应一个 Mapped Statement 对象,sql 的 id 即是 Mapped statement 的 id。

6、Mapped Statement 对 sql 执行输入参数进行定义,包括 HashMap、基本类型、pojo,Executor 通过 Mapped Statement 在执行 sql 前将输入的 Java 对象映射至 sql 中,输入参数映射就是 JDBC 编程中对 preparedStatement 设置参数。

7、Mapped Statement 对 sql 执行输出结果进行定义,包括 HashMap、基本类型、pojo,Executor 通过 Mapped Statement 在执行 sql 后将输出结果映射至 Java 对象中,输出结果映射过程相当于 JDBC 编程中对结果的解析处理过程。

运行过程

1、配置 MyBatis 的配置文件:mybatis-config.xml(名称不固定)。

2、通过配置文件,加载 MyBatis 运行环境,创建 SqlSessionFactory 会话工厂(SqlSessionFactory 在实际使用时按单例方式)。

3、通过 SqlSessionFactory 创建 SqlSession。SqlSession 是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议 SqlSession 的应用场合在方法体内。

4、调用 SqlSession 的方法去操作数据。如果需要提交事务,需要执行SqlSession的commit()方法。

5、释放资源,关闭 SqlSession。

写法

编写 mapper.xml(映射文件)和 mapper.java 需要遵循一个开发规范:

mapper.xml中namespace就是mapper.java的类全路径。

mapper.xml中statement的id和mapper.java中方法名一致。

mapper.xml中statement的parameterType指定输入参数的类型和mapper.java的方法输入参数类型一致

mapper.xml中statement的resultType指定输出结果的类型和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="xxx.x.xx.Mapper">
    <!---->
    <insert id="insertUser" parameterType="User">
        insert into users values (#{id}, #{account}, #{password}, #{name},  #{phone})
    </insert>
    <!---->
    <delete id="deleteUser" parameterType="User">
        delete from users where id = #{id}
    </delete>
    <!---->
    <update id="updateUser" parameterType="User">
        update users set account = #{account}, password = #{password}, name = #{name},  phone = #{phone} where id = #{id}
    </update>
</mapper>

mapper.java则应该为

@Mapper
public interface Mapper{
	void insertUser(User user);
	void deletUser(User user);
	void updateUser(User user);
}

接下来我们在一个文件中注册这些命令

@component
public class Register {
	private static Register register;
	@Autowired
	private Mapper mapper;
	@PostConstruct
	pubilic void init() {
    	register = this;
    	register.mapper = this.mapper;
    public static Mapper mapper() {return register.mapper}
	}
}

之后就可以调用之前写好的语句

import xx.xx.xx.xx.Register
Register.mapper().insertUser(user);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值