简介
MyBatis前身是Apache基金会的开源项目iBatis,在2010年该项目脱离Apache基金会,迁移到Google Code,并正式更名为MyBatis。在2013年11月,MyBatis代码迁移到GitHub。
一、什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、为什么要学习MyBatis?
传统的数据库操作技术-JDBC
SQL语句嵌在Java代码里,耦合度高。
实际开发中SQL语句变化频繁,导致难以维护。
Hibernate框架
内部对SQL语句做了较厚的封装,难以优化。
不适合大数据量、高并发、低延迟的场景。
三、入门案例:
1、创建maven工程,添加jar依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
2、创建mybatis的配置文件(mybatis-conf.xml),名字自定义:
该配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。 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>
<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/zmf?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/sxt/mapper/BookMapper.xml"/>
</mappers>
</configuration>
3、创建bean对象
package com.sxt.bean;
public class Book {
private Integer id;
private String name;
private String author;
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 String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", author=" + author + "]";
}
}
4、创建映射文件:
<?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.sxt.mapper.BookMapper">
<select id="query" resultType="com.sxt.bean.Book">
select * from book;
</select>
<select id="queryById" resultType="com.sxt.bean.Book">
select * from book where id = #{id}
</select>
<insert id="insert" parameterType="com.sxt.bean.Book">
insert into book(name,author) values (#{name},#{author})
</insert>
<update id="update" parameterType="com.sxt.bean.Book">
update book set name = #{name},author = #{author} where id = #{id}
</update>
<delete id="delete" parameterType="java.lang.Integer">
delete from book where id = #{id}
</delete>
</mapper>
5、创建dao层接口:
package com.sxt.mapper;
import java.util.List;
import com.sxt.bean.Book;
public interface BookMapper {
public List<Book> query();
public List<Book> queryById(Integer id);
public Integer insert(Book book);
public Integer update(Book book);
public Integer delete(Integer id);
}
6、测试:
public class Main {
SqlSession session;
BookMapper mapper;
@Before
public void before() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
session = sessionFactory.openSession();
mapper = session.getMapper(BookMapper.class);
}
/**
* 查询所有书籍
*/
@Test
public void query() {
List<Book> list = mapper.query();
for (Book book : list) {
System.out.println(book);
}
}
/**
* 根据id查询一本书
*/
@Test
public void queryById() {
List<Book> list = mapper.queryById(1);
for (Book book : list) {
System.out.println(book);
}
}
/**
* 添加一本书
*/
@Test
public void insert() {
Book book = new Book();
book.setName("毛毛雨怎么炼成的");
book.setAuthor("薛老师");
Integer insert = mapper.insert(book);
System.out.println(insert);
}
/**
* 更新数据
*/
@Test
public void update() {
Book book = new Book();
book.setName("你有毒吧");
book.setAuthor("薛老师");
book.setId(8);
Integer update = mapper.update(book);
System.out.println(update);
}
/**
* 根据book的id进行删除数据
*/
@Test
public void delete() {
Integer delete = mapper.delete(8);
System.out.println(delete);
}
@After
public void after() {
session.commit();
session.close();
}
}
测试结果:
查询结果:
添加结果:
修改结果:
删除结果: