Mybatis

关于Mybatis的简介

什么是mybatis

​ MyBatis前身叫ibatis是基于Java的数据持久层框架,它内部封装了JDBC,使开发者只需要关注SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。MyBatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中SQL的动态参数进行映射生成最终执行的SQL语句,最后由MyBatis框架执行SQL并将结果映射为Java对象并返回。MyBatis 的本质就是 Java 对数据库的操作。

MyBatis的生命周期?

(1)加载mybatis的配置文件—>config.xml(也加载关联的映射文件—>mapping.xml)

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

1

(2)构建SqlSessionFactory工厂

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);

1

SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,一旦创建了 SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用。 SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后它就失去了作用,所以SqlSessionFactoryBuilder 不需要长期存在,只作用于创建 SqlSessionFactory 的方法中即可。

(3)创建能执行映射文件的SqlSession

SqlSession sqlSession = factory.openSession();

1

SqlSession 应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库

资源就很快被耗费精光,系统就会瘫痪,所以用 try…catch…finally…语句来保证其正确关闭。

(4)创建 SQL Mapper 接口,执行sqlSession.insert等方法

User user = new User("李四", "qqq");

sqlSession.insert("com.mybatis.pojo.User.add", user);

sqlSession.commit(); // 事务提交

sqlSession.close(); // 关闭

SQL Mapper 接口由 SqlSession 所创建,它的生命周期应该小于等于 SqlSession 的生命周期。 Mapper 代表的是一个请求中的业务处理 ,所以它应该在一个请求中,一旦处理完了相关的业务,就应该废弃它。

Dao接口的工作原理是什么?

Dao 接口,就是人们常说的 Mapper 接口,接口的全限名,就是映射文件中的 namespace的值,接口的方法名,就是映射。

文件中 MappedStatement 的 id 值,接口方法内的参数,就是传递给 sql 的参数。Mapper 接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为 key 值,可唯一定位一个 MappedStatement。

在 Mybatis 中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个 MappedStatement 对象。

Dao 接口里的方法参数不同时能重载吗?

不能重载的,因为是全限名+方法名的保存和寻找策略。

Dao 接口的工作原理是 JDK 动态代理,Mybatis 运行时会使用 JDK 动态代理为 Dao接 口 生 成 代 理 proxy 对 象 , 代 理 对 象 proxy 会 拦 截 接 口 方 法 , 转 而 执 行MappedStatement 所代表的 sql,然后将 sql 执行结果返回。

Mybatis书写增删查代码:

增:

运行后

删除

userDao.delete(uid: ___)表示想要删除的行数id

运行后;

单查

修改数据库中的表:

修改前:

修改后:

sql语句:

<update id="update" parameterType="com.zhu.bean.User">

update t_user set username=#{username},password=#{password},phone=#{phone},address=#{address} where uid=#{uid}

</update>

Mybatis的用处就是为了能够是写代码方便一些;以下代码可以完成整个数据库的连接

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"" target="_blank">http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!--配置环境信息===就是配置连接数据库的参数

default:指定配置的环境信息的id,表示默认连接该环境

-->

<environments default="mysql">

<environment id="mysql">

<!--配置事务的处理方式:模式使用JDBC的事务处理-->

<transactionManager type="jdbc"></transactionManager>

<!--数据源的默认type设置为pooled,表示使用连接池-->

<dataSource type="pooled">

<property name="driver" value="com.mysql.cj.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>

<property name="username" value="0000"/>

<property name="password" value="0000"/>

</dataSource>

</environment>

<environment id="oracle">

<transactionManager type=""></transactionManager>

<dataSource type=""></dataSource>

</environment>

</environments>

<!--加载mapper配置文件-->

<mappers>

<mapper class="com.zhu.dao.UserDao" />

</mappers>

</configuration>

书写sql语句方可查询想要的数据

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"" target="_blank">http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace:把配置文件和接口进行映射-->

<mapper namespace="com.zgz.dao.usedao">

<!--通过select标签进行查询

id:映射接口的方法名

parameterType:指定参数的类型(如果是集合类型只需要指定集合元素的类型即可)

resultType:指定返回值的类型

-->

<select id="selectAll" resultType="com.zgz.bean.Use">

select * from emp;

</select>

<insert id="add" parameterType="com.zgz.bean.Use">

insert into emp(eid,ename,dept,job,sal,phone,address) values(#{eid},#{ename},#{dept},#{job},#{sal},#{phone},#{address});

</insert>

<delete id="delete" parameterType="int">

delete from emp where eid#{eid}

</delete>

<select id="selectByid" parameterType="int" resultType="com.zgz.bean.Use">

select * from emp where eid=#{eid}

</select>

</mapper>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值