Mybatis下载网址:https://github.com/mybatis-3/releases
一 、什么是Mybatis
Mybatis 是一个支持谱通SQL查询、存储过程以及高级的映射的持久层框架,底层就是JDBC封装组件。
二、什么是ORM框架 ?
ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,通过描述java对象与数据库表之间的映射关系,自动将java应用程序中的对象持久化到关系型数据库的表中。
java编写数据类型 与数据库类型的关系
关系映射:https://blog.youkuaiyun.com/gao_jian1/article/details/7950046
Mybatis 框架也被称ORM (object/Relation Mapper,及对相关系映射)框架。
Hibernate 和Mybatis的区别?
1.Hibernate:是一个全表映射框架。只需定义持久对象到数据库表的映射关系,
特点:自动生成对应的Sql 调用jDBC接口执行
多表关联,SQL查询查,不支持存储过程,不通过优化SQL来优化性能
使用:不复杂对性能不高的项目
2.MyBatis:一个半自动映射的框架
手动匹配POJO、SQL和映射关系,工作量大
可以配置SQl并优化SQL,通过配置决定SQL的映射规则,支持存储过程使用:复杂优化性能的项目
(POJO ‘porsisent Object,PO’ 持久化对象)
使用Mybatis的下载和应用
Mybatis下载网址:https://github.com/mybatis/mybatis-3/releases
下载好进行解压mybatis-3.4.2jar包
1.打开IDEA工具,创建一个新的项目
复制粘贴到lib里,
创建包名
创建类名
package com.itheima.po;
/**
* 持久化类
*/
public class Customer {
private Integer id;// 编号id
private String username; // 用户名
private String jobs; // 工作的类型
private String phone;// 电话
// 按键盘的 alt + insert 快捷键 生成tostring方法 getter和setter方法
@Override
public String toString() {
return "Custonter{" +
"id=" + id +
", username='" + username + '\'' +
", jobs='" + jobs + '\'' +
", phone='" + phone + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getJobs() {
return jobs;
}
public void setJobs(String jobs) {
this.jobs = jobs;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
创建约束文档模板
约束文档mybatis-cofing.xml 文档
<?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>
<!-- 1.配置环境,默认的环境id为mysql -->
<environments default="mysql">
<!-- 1.2.配置id为mysql的数据库环境 -->
<environment id="mysql">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息(数据库连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 连接数据库的名字 复制文档建立后自己后补-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<!-- 数据库的名字不一样也需要修改-->
<property name="username" value="root"/>
<!-- 数据库的密码不一样也需要修改-->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 2.配置Mapper的位置 -->
<mappers>
<!-- 配置文件的路径不一样也需要修改-->
<mapper resource="com\itheima\mapper\CustomerMapper.xml"/>
</mappers>
</configuration>
建立文件
像上面的一样建立一个约束文件在mapper里命名为CustomerMapper.xml 文件
<?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 表示命名空间 -->
<mapper namespace="com.itheima.mapper.CustomerMapper">
<!-- SQL语句 -->
<!-- 根据用户查询id -->
<select id="findCustomerById" parameterType="Integer"
resultType="com.itheima.po.Customer">
select * from t_customer where id = #{id};
</select>
<!-- 模胡查询 -->
<select id="findCustomerByName" parameterType="String" resultType="com.itheima.po.Customer">
select * from t_customer where username like '%${value}%';
</select>
<!-- 添加查询 -->
<insert id="addCustomer" parameterType="com.itheima.po.Customer">
insert into t_customer (username,jobs,phone)
values (#{username},#{jobs},#{phone});
</insert>
</mapper>
创建一个测试类文档以及类
package com.itheima.test;
import com.itheima.po.Customer;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* 测试类
*/
public class MybatisTest {
/**
* 根据id 查询信息
* @throws IOException
*/
@Test
public void findCustomerByIdTest() throws Exception {
// 1.读取配置文件
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
// InputStream is = MybatisTest.class.getClassLoader().getaResourceAsStream(resource);
// 2.根据配置文集创建SqlSessionFactory sql 会话工厂对象
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
// 3.通过SQLSessionFactory 会话对象配置SQLSession对象
SqlSession sqlSession = ssf.openSession();
// 4.SQLSession执行映射文件提交SQL语句,并且返回映射结果
Customer customer = sqlSession.selectOne("com.itheima.mapper.CustomerMapper.findCustomerById",3);
// 打印结果
System.out.println(customer.toString());
// 5.关闭SQLSession
sqlSession.close();
}
/**
* 模胡查询
*/
@Test
public void findCoustomerNameTest() throws IOException {
// 1.读取配置文件
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
// 2.根据配置文集创建SqlSessionFactory sql 会话工厂对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(is);
// 3.通过SQLSessionFactory 会话对象配置SQLSession对象
SqlSession sqlSession = ssf.openSession();
// 4.SQLSession执行映射文件提交SQL语句,并且返回映射结果
List<Customer> customers = sqlSession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByName", "a");
for (Customer c :customers){
// 看看打印的结果
System.out.println(c);
}
sqlSession.close();
}
/**
* 添加客户
*/
@Test
public void addCustomerTest() throws Exception {
// 1.读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.根据配置文件构建SQLSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3.通过SQLSessionFactory 创建SQLSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.SQLSession执行添加操作,创建Customer,并向对象添加数据
Customer customer = new Customer();
customer.setUsername("rose");
customer.setJobs("student");
customer.setPhone("13333533092");
// 4.3执行SQLSession 的插入语句,返回SQL语句影响行数
int rows = sqlSession.insert("com.itheima.mapper" + ".CustomerMapper.addCustomer", customer);
// 4.3 通过返回判断插入操作执行成功
if(rows >0){
System.out.println("您成功插入"+rows+"条数据!");
}else {
System.out.println("执行失败!!!");
}
// 4.4提交事务
sqlSession.commit();
// 5.关闭SQLSession
sqlSession.close();
}
}
错误:我把mapper-confing.xml的点写层了逗号
映射文件mapper少写了一个p
添加的sql语句值后括号没有添加包住内容。