一,MyBatis的主要作用:
简化数据库访问操作:MyBatis通过提供自动映射和CRUD(创建、读取、更新、删除)操作的能力,使得开发者可以更加专注于业务逻辑,而不需要过多地关心数据库访问的繁琐细节。开发者只需编写SQL语句,就可以完成数据库操作,大大简化了数据访问层代码的编写。
提高开发效率:MyBatis将数据库操作和SQL语句与Java代码解耦,使得代码更加清晰和易于维护。通过XML或注解的方式配置SQL语句,降低了数据转换的复杂性,提高了开发效率。
支持动态SQL:MyBatis支持原生SQL、动态SQL和存储过程,使得开发者可以根据不同的条件生成不同的SQL语句,提高了SQL语句的复用性和灵活性。
二,ORM框架
MyBatis是ORM框架典型的代表之一,ORM框架,即对象关系映射(Object-Relational Mapping)框架,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简而言之,ORM框架在编程中充当了“翻译”的角色,把对象模型表示的对象映射到基于SQL的数据库系统上。
三,引入
原来连接操作数据库有七个操作
①导入jar包,加载驱动
②创建连接
③创建执行者对象
④编写sql语句
⑤执行sql语句
⑥处理结果集
⑦释放资源
缺点:sql语句硬编码,从结果集映射到pojo比较麻烦
解决:sql语句写到配置文件中,解决硬编码文件,简化pojo的映射
四,MyBatis的使用
这边下面的例子使用之前需要在数据库中定义一个表alluser用户表
(1)引入MyBatis的依赖,在pom.xml文件中
<!-- 引入mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
(2)写mapper接口
创建一个UserMapper接口类
package com.cykj.mapper;
import com.cykj.pojo.Alluser;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
//定义了一个登录的方法,然后@Param是指明参数的
Alluser login(@Param("account") String acc, @Param("pwd") String pwd);
//定义了一个更新数据库密码的方法
int updateUserPwd(@Param("id") String id,@Param("pwd") String pwd);
}
(3)mapper映射文件(写sql语句)
这边是在resources下面创建一个专门写mapper的目录
<?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.cykj.mapper.UserMapper">
<!-- 编写登录用的 -->
<select id="login" resultType="com.cykj.pojo.Alluser">
select * from alluser where account = #{account} and pwd = #{pwd}
</select>
<!-- 查询用户条数 -->
<select id="getCount" resultType="java.lang.Integer">
select count(*) from alluser
</select>
<!-- 更新密码 -->
<update id="updateUserPwd">
update alluser set pwd = #{pwd} where userId = #{id}
</update>
</mapper>
在写sql语句中,你会发现我们这边写的是pwd = #{pwd},其实也可以使用pwd = ${pwd},
#与$两个的区别就是:
用 # 字号打印出来的sql语句是用“?”代替了,这就是占位符,比如
update alluser set pwd = ? where userId = ?
用 $ 符号打印出来就是值的拼接,比如
update alluser set pwd = "123" where userId = "003"
这边比较支持用 # 写哦
(4)将mapper映射文件(写sql的那个文件)给他注册到mybatis中(写在mybatis-config.xml中)
在resources中建一个mybatis-config.xml,来写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>
<settings>
<!-- 开启mybatis的日志打印-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 开启驼峰式命名,跟pojo做映射 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="jdbc">
<environment id="jdbc">
<!-- 数据库事务,使用JDBC的事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据库:POOLED,C3P0,Druid(都是连接池) -->
<dataSource type="POOLED">
<!--写数据库的加载驱动-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--数据库路径,3306为端口号,在数据库中查看,mooc是数据库名-->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mooc"/>
<!--写账号密码-->
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 将mapper映射文件注册进来 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
(5)mapper如果有多个参数的话,需要增加@Param,如第二部方法中的参数
然后注意点就是一一对应,为了更好的看,我就截图下来
(6)写SqlSession
这边建一个测试类,来测试
package com.cykj.main;
import com.cykj.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
public class Main {
public static void main(String[] args) {
//1.获取配置文件
try {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建sqlSession工厂建造器
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.通过工厂建造器创建连接工厂
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
//4.获取数据库连接sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();//默认不提交事务
//5.获取mapper映射接口
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//6.传递参数
int i = mapper.updateUserPwd("003", "123");
//打印结果
System.out.println(i);
}
}
五,开启事务
注意点:myabtis默认开启事务,但默认不提交事务
(1)事务提交:只有提交了才能对数据库进行操作!!!
(2)何时用到提交事务?
查询操作:不需要使用事务
数据更新:增删改操作就需要使用事务提交对数据进行更新!
(3)事务开启:手动/自动
手动:添加一个sqlSession.commit();//提交事务
自动: 在第四点中赋值为true