概述
MyBatis优点
- 相比JDBC,减少繁琐的代码
- 使用灵活,支持动态SQL
- 提供映射标签,支持对象与数据库的字段关系映射
MyBatis缺点
- SQL依赖于数据库
- SQL编写工作量大,尤其在表字段比较多的情况下
MyBatis 是一个非常优秀和灵活的数据持久化框架,适用于需求多变的互联网项目,也是当前主流的 ORM 框架。
ORM三种映射关系
- 一个类映射一张表
- 一个对象映射表中一行数据
- 对象的一个属性映射表中每行数据的字段
MyBatis执行流程
配置及入门程序
- 第一个mybatis程序:
前提:mybatis.jar mysql-connect.jar
a.实体类
b.接口(映射器)
c.配置文件
实体类
package entity;
public class User {
private int id;
private String name;
private String pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
}
接口(映射器)
package dao;
import entity.User;
public interface UserInterface {
public User selectById(int id);
}
配置文件:数据库信息
<?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/login" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 映射器 -->
<mappers>
<mapper resource="dao/userMapper.xml" />
</mappers>
</configuration>
配置文件(sql映射)
<?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="dao.UserInterface">
<select id="selectById" parameterType="int" resultType="entity.User">
SELECT
* FROM login WHERE id =#{
id}
</select>
</mapper>
测试
package test;
import java.io.IOException;
import java.io.InputStream;
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 dao.UserInterface;
import entity.User;
public class Test {
public static void main(String[] args) throws IOException {
String res="config.xml";
//将配置文件变成流
InputStream stream = Resources.getResourceAsStream(res);
//建立工厂
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
//打开session
SqlSession openSession = build.openSession();
//得到映射接口对象
UserInterface mapper = openSession.getMapper(UserInterface.class);
User selectById = mapper.selectById(1);
System.out.println(selectById);
}
}
Statement方式的增删改查操作
缺点:存在sql注入。每次操作数据库都要编译sql语句,因此会带来性能和效率低的问题。
注意事项:增删改需要手动提交,即session.commit();
userMapper.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">
<mapper namespa