一:首先了解什么是Mybatis
MyBatis 是一个可以自定义SQL、存储过程du和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、dao手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
二:mybatis有什么用?
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
三:怎么用?
1.在pom.xml文件中配置依赖:
主要的依赖有以下几个:
<!-- mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- jdbc驱动类-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 小辣椒lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
2.在数据库中创建表
create database j2005-mybatis; use j2005-mybatis; create table accountbook( id int primary key auto_increment, -- 主键 name varchar(200), -- 账单名称 money double, -- 金额 payway varchar(100), -- 付款|收款方式 createTime date, -- 日期 description varchar(1000) -- 账单描述 );
3.创建实体类(pojo类)
package com.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class AB
{ private Integer id;
private String name;
private Double money;
private String payway;
private Date createTime; //属性名和字段名一致
private String description; //ctrl+o 重写父类的方法 //ctrl+i 实现接口中抽象方法 //alt+insert 生成构造方法 get 和 set toString
}
3.创建接口
package com.mapper;
import com.pojo.AB;
public interface ABMapper {
public int addAB(AB ab);
//解释:返回值类型是int,插入成功和失败,只返回影响的行数,行数为int类型 // 参数com.pojo.AB类型,添加的是一个AB对象 // 接口中的抽象方法,一定被 public abstract修饰
}
4.然后选择配置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>
<!-- 配置-->
<!-- 配置别名-->
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
<!-- 配置类型转换 -->
<typeHandlers>
<typeHandler handler="com.handler.SexEnumHandler"
javaType="com.enum_.SexEnum"/>
</typeHandlers>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/j2005_mybatis?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件-->
<mappers>
<mapper resource="com/mapper/ABMapper.xml"/>
<mapper resource="com/mapper/UserMapper.xml"/>
<mapper resource="com/mapper/ClassMapper.xml"/>
<mapper resource="com/mapper/StudentMapper.xml"/>
</mappers>
</configuration>
5.之后就进入了对接口类进行操作的配置文件的部分
<?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.mapper.ABMapper">
<select id="findAll" resultType="AB">
select *from accountbook
</select>
<insert id="addAB" parameterType="AB">
insert into accountbook(name,money,payway,createTime,
description) values(#{name},#{money},#{payway},#{createTime},#{description})
</insert>
</mapper>
7.在所有步骤完成之后就可以进入测试阶段
public class ABMapperTest {
private SqlSession sqlSession;
private ABMapper abMapper;
//通过sqlSessionFactory.openSession();来获取sqlSession,
@Before
public void setUp() throws Exception {
System.out.println("Before = " + true);
String resource ="mybatis-config.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
System.out.println("-------------------sqlSessionFactory-------------------------" + sqlSessionFactory);
sqlSession=sqlSessionFactory.openSession();
abMapper=sqlSession.getMapper(ABMapper.class);
}
//关闭资源
@After
public void tearDown() throws Exception {
System.out.println("----------------------After---------------" + true);
sqlSession.close();
}
@Test
public void addAB() {
System.out.println("------------------addab--------------- " + true);
AB ab =new AB(0,"大虾滑",2.2,"支付宝",new Date(),"裤子");
int n = abMapper.addAB(ab);
sqlSession.commit();
System.out.println("n = " + n);
}
}