可以使用Java JDBC API直接操作数据库,但使用框架会更便捷、高效而且还可以利用框架提供的某些强大的功能(比如事务管理),而Mybatis就是这样的一个框架。
Mybatis主要由四大部分组成:
①SqlSessionFactoryBuilder
②SqlSessionFactory
③SqlSession
④SQL Mapper
要想访问(操作)数据库:要建立数据库连接,要定义数据库操作方法(insert/update/delete...),要有具体的操作数据库中的表 的SQL语句,而SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession就是用来负责底层建立数据库连接、管理连接、释放连接等。对于业务层而言,关心的是:定义一个SQL语句,让Mybatis方便地把SQL语句执行后的结果 呈现给使用者,而这可以通过SQL Mapper来完成。
SQL Mapper由两部分组成,一是:JAVA 接口,该接口中定义了 业务层 要对数据库进行何种操作;另一部分是:XML配置文件,定义了具体的数据库操作语句和映射规则。
假设要操作数据库test中的表 t_role,t_role有三个字段:id ,role_name,和 note
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| role_name | varchar(20) | YES | | NULL | |
| note | varchar(20) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
该表对应的POJO类如下:
package chapter2.pojo; public class Role { private Long id; private String roleName; private String note; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } @Override public String toString() { return "id:" + id + ", roleName:" + roleName + ", note:" + note; } }
JAVA接口中定义的一些操作如下:
package chapter2.mapper;
import java.util.List;
import java.util.Map;
import chapter2.pojo.Role;
public interface RoleMapper {
public Role getRole(Long id);
public int deleteRole(Long id);
public int insertRole(Role role);
public List<Role> findRoleByMap(Map<String, String> params);
}
与该接口对应,定义的具体操作数据库的配置文件RoleMapper.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 namespace="chapter2.mapper.RoleMapper"> <resultMap type="chapter2.pojo.Role" id="roleMap"> <id property="id" column="id"/><!-- primary key --> <result property="roleName" column="role_name"/><!-- 普通列的映射关系 --> <result property="note" column="note"/> </resultMap> <select id="getRole" parameterType="long" resultType="Role"> select id, role_name as roleName, note from t_role where id = #{id} </select> <insert id="insertRole" parameterType="Role"> insert into t_role(role_name,note) values(#{roleName},#{note}) </insert> <delete id="deleteRole" parameterType="long"> delete from t_role where id = #{id} </delete> <select id="findRoleByMap" parameterType="map" resultMap="roleMap"> select id,role_name,note from t_role where role_name like concat('%', #{roleName},'%') and note like concat('%',#{note},'%') </select> </mapper>