博客的图片比较多,在学习Mybatis的过程中几乎把每一个步骤都截图下来了,几乎每一张图片都标有必要的解说,图片比较多也是为了以后自己方便复习
maven环境搭建
1. 首先创建一个新的项目
2. idea中maven配置
在maven官网上下载maven工具包,里面有maven的配置文件
打开settings配置文件,在里面修改maven仓库放置的位置
在settings配置文件中设置阿里云镜像
maven下载依赖的时候默认是从远程的中心仓库下载依赖,maven在全世界的范围内维护了一个中心仓库,这个中心仓库是在国外的,
所以它仓库的下载速度非常的慢,所以我们为了在使用过程中能更快速的下载依赖,建议使用maven的阿里云镜像
<!--maven阿里云镜像加速地址-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
mybatis
1. mybatis引言
# 1. 什么是mybatis
- 定义:mybatis是一个用来完成数据库操作的半ORM框架
(Hibernate是纯ORM框架,可以直接完成数据库表和java对象的转化,表t_user中可能有id、name这两个字段,java中有User(id,name))
(全ORM框架可以直接把数据库中id的值赋给java对象的id、数据库中name的值赋给java对象的name)
- 官方定义:MyBatis 是一款优秀的持久层(mysql、oracle)框架,这里的持久层是站在数据库的角度,因为mysql、oracle它们
都是把数据持久化到硬盘上,因为数据库具有把数据持久化的功能,mybatis是要对mysql、oracle的数据进行操作,mybatis是
操作数据库的,所以对mybatis的定义就是优秀的持久层框架
- ORM: Object Relationship Mapping
对象 关系 映射
- mybatis框架是半ORM框架,半ORM框架就显得没有那么智能,没办法直接把直接把数据库中id的值赋给java对象的id······ 日后必须在mapper配置文件中写映射,告诉要把数据库表中的哪个字段值赋给java对象的哪个属性值才可以
- 半ORM:mybatis中自己在mapper配置文件中书写字段和对象属性映射关系
- mybatis作用:用来操作数据库,比如操作:mysql、oracle、sqlServer等,解决原始jdbc编程技术中代码冗余,方便
访问数据库
2. 第一个入门环境
创建maven项目
3. 项目中引入mybatis
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
4. mybatis的主配置文件
- 主配置文件:核心配置文件
- 作用:用来创建sqlSessionFactory对象
然后我们需要改一下这个mybatis-config.xml文件中的内容
5. 构建SqlSessionFactory的实例
6. 建数据库表
7. 实体对象
# 定义成以下两种任意一种都可以
- eneity:实体 com.baizhi.eneity
- model:模型 com.baizhi.model
package com.baizhi.eneity;
import java.util.Date;
public class User {
private Integer id;
private String name;
private Integer age;
private Date bir;
// 无参构造
public User() {
}
// 有参构造
public User(Integer id, String name, Integer age, Date bir) {
this.id = id;
this.name = name;
this.age = age;
this.bir = bir;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBir() {
return bir;
}
public void setBir(Date bir) {
this.bir = bir;
}
//重写toString()方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", bir=" + bir +
'}';
}
}
8. 开发DAO接口
- 注意:mybatis要求DAO接口中不能定义方法的重载
9. 开发mapper配置文件
- 注意:在mybatis中一个DAO接口对应一个Mapper配置文件 idea中建立配置文件目录使用/
注:下面图片中parameterType里面写错了,要改为com.baizhi.eneity.User
10. 将mapper注册到mybatis-config配置文件中
11. 测试
package com.baizhi;
import com.baizhi.dao.UserDAO;
import com.baizhi.eneity.User;
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 javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
public class TestMybatis {
public static void main(String[] args) throws IOException {
// 读取mybatis-config.xml文件中的内容
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 创建mybatis核心对象:SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
// 获取sqlSession:真正执行sql语句的类
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取DAO对象
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
try {
User user = new User();
//user.setId(1);
user.setName("小三");
user.setAge(23);
user.setBir(new Date());
// 调用DAO对象的save方法并返回结果(返回结果代表影响的条数)
int count = userDAO.save(user);
System.out.println("影响的条数:" + count);
sqlSession.commit(); // 提交事务
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback(); // 回滚事务
} finally {
sqlSession.close();
}
}
}
查看一下数据库有没有程序插入的数据
不设置id,使用数据库自动生成的id
补充:
注:下面图片中parameterType里面写错了,要改为com.baizhi.eneity.User
如果插入到数据库表中的数据出现了乱码可以这样解决
12. mybatis中插入如何返回数据库自动生成的id
注:下面图片中parameterType里面写错了,要改为com.baizhi.eneity.User