1、什么是mybatis?
-
MyBatis 是一款优秀的持久层框架。
-
它支持自定义 SQL、存储过程以及高级映射。
-
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
-
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了[google code](https://baike.baidu.com/item/google code/2346604),并且改名为MyBatis 。
-
2013年11月迁移到Github。
1.1如何获得mybatis?
-
maven仓库:
-
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
-
github:https://github.com/mybatis/mybatis-3/releases
-
中文文档:https://mybatis.org/mybatis-3/zh/index.html
1.2持久化
-
持久化是将程序的数据在持久状态和瞬间状态转化的过程
-
内存:断电及失 把你们
-
生活:冷藏,如罐头
为什么要持久化?
- 有一些对象不能让他丢掉
- 内存太贵·
1.3持久层
Dao层、service层、Controller层等
- 完成持久化层的代码块
- 层界限十分明显
为什么需要mybatis?
- 帮程序员将数据存入数据库中。
- 方便
- 传统的JDBC代码太复杂,简化、框架、自动化
- 不用mybatis也可以。用了之后更容易上手。技术没有高低之分
- 优点
- 简单易学:
- 灵活:
- sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。
重要的一点:使用的人多
Spring->SpringMVC->SpringBoot
第一个Mybatis程序
思路:搭建环境>导入Mybatis>编写代码>测试
2.1搭建环境
搭建数据库
`user`CREATE DATABASE mybatis;
SHOW DATABASES;
USE mybatis;
CREATE TABLE USER(
id INT(20) NOT NULL PRIMARY KEY,
NAME VARCHAR(30) DEFAULT NULL,
psw VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
SHOW TABLES;
INSERT INTO USER(id,NAME,psw)VALUES
(3,'root','Abc123#$'),
(4,'admin','Abc123#$')
SELECT*FROM USER;
新建项目
1、新建一个普通的maven项目
2、删除src目录
3、导入maven依赖
2.2创建一个某块
1、编写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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="$com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="wzj123"/>
</dataSource>
</environment>
</environments>
</configuration>
2、编写mybatis工具类
package com.wangzj.utils;
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;
/**
* @author wangzhijun
* @date 2021/6/4
* @e-mail wangzj_root@163.com
* @describe SqlSessionFactory -->构建SqlSession
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 使用mybatis第一步:获取 SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
// 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
// SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
public static SqlSession SqlSession(){
return sqlSessionFactory.openSession();
}
}
2.3编写代码
- 实体类
package com.wangzj.pojo;
/**
* @author wangzhijun
* @date 2021/6/4
* @e-mail wangzj_root@163.com
* @describe 实体类
*/
public class User {
private int id;
private String name;
private String psw;
public User(){
}
public User(int id, String name, String psw) {
this.id = id;
this.name = name;
this.psw = psw;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPsw() {
return psw;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPsw(String psw) {
this.psw = psw;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", psw='" + psw + '\'' +
'}';
}
}
-
Dao接口
package com.wangzj.dao; import com.wangzj.pojo.User; import java.util.List; public interface UserDao { List<User> getUserList(); }
-
接口实现类由原来的DaoUserImplement转化为一个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">
<!--namespace 绑定一个对应的Dao接口-->
<mapper namespace="com.wangzj.dao.UserDao">
<!--select 查询语句-->
<select id="getUserList" resultType="com.wangzj.pojo.User">
select *from mybatis.user
</select>
</mapper>
2.4测试Junit
package com.wangzj.dao;
import com.wangzj.pojo.User;
import com.wangzj.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
/**
* @author wangzhijun
* @date 2021/6/15
* @e-mail wangzj_root@163.com
* @describe
*/
public class UserDaoTest {
@Test
public void test(){
//第一步:获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//第二步:
// 方法一:get Mapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
//第三步:关闭sqlsession
sqlSession.close();
}
}
注意:org.apache.ibatis.binding.BindingException: Type interface com.wangzj.dao.UserDao is not known to the MapperRegistry.
核心配置文件中注册Mapper(要加Mapper标签)
可能遇到的问题
-
配置文件没有注册:
-
注意:org.apache.ibatis.binding.BindingException: Type interface com.wangzj.dao.UserDao is not known to the MapperRegistry.
核心配置文件中注册Mapper(要加Mapper标签)
-
-
绑定接口错误
-
方法名不对
- 核对方法名
-
返回类型不对
- 核对类型
-
Maven导出资源问题:
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Se1Cq8Zm-1624346905872)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20210615165135200.png)]
3、CRUD(增删改查)
3.1namespace
namespace中的包名和Dao/Mapper接口的包名一致
3.2Select
选择、查询语句
- id:就是对应的namespace中的方法名
- resultType:SQL语句执行的返回值
- parametertype:参数类型
1、编写接口
User getUserById(int id);
2、编写对应的Mapper中SQL语句
<select id="getUserById" parameterType="int" resultType="com.wangzj.pojo.User">
select *from mybatis.user where id = #{id}
</select>
3、测试
@Test
public void getUserList(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
注意点:增删改操作需要提交事务
3.3 Insert
<insert id="insertUser" parameterType="com.wangzj.pojo.User">
insert into mybatis.user (id,name,psw)values (#{id},#{name},#{psw});
</insert>
3.4 Update
<update id="updateUser" parameterType="com.wangzj.pojo.User">
update mybatis.user set name=#{name},psw=#{psw} where id=#{id}
</update>
3.5 Delete
<delete id="deleteUser" parameterType="com.wangzj.pojo.User" >
delete from mybatis.user where id=#{id}
</delete>
下篇文章更精彩哦