mybatis 入门
一、MyBatis 是什么:
1.一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射;一款半自动化的orm(对象关系映射)框架。
2.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
3.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、结构?
1.接口层:给应用程序提供数据操作的API,相应的接口需要靠数据处理层进行支持。就是在DAO层中定义一个接口, 里面有相应的增删改查的功能。
2.数据处理层:负责处理接口传递过来的请求,参数映射,SQL解析,SQL执行,结果映射。需要靠底层的基础支撑层支持。
3.基础支撑层:底层的通用模块:连接管理、事务管理、配置加载、缓存处理。
流程图
![](https://img2018.cnblogs.com/blog/1602553/201907/1602553-20190726175744491-1316440323.png)
三、操作步骤?
1.导入两个jar包
![](https://img2018.cnblogs.com/blog/1602553/201907/1602553-20190726164021522-32019633.png)
2.创建全局配置文件 mybatis-confilg.xml
ideal 中没有需要自己设置一个模板 设置好后 在SRC目录下创建一个mybatis-config.xml文件
方法:
创建mybatis-config.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"> <!--1.这里用来环境配置 和 数据库配置 就是配置mybatis的环境 2.配置映射文件 --> <configuration> <!--default 是默认的环境 --> <environments default="mysql"> <!--配置一个mysql的环境 id是数据库的唯一标识 不可重复 --> <environment id="mysql"> <!--transactionmanager type= "jdbc" 表示可以使用jdbc的事物 ,提交回滚等操作--> <transactionManager type="JDBC"></transactionManager> <!--dataSource type="POOLED" 就是基于数据库连接池技术进行管理 --> <dataSource type="POOLED"> <!--property 用来配置数据库的基本连接信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/qy100?CharacterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--mapper 用来配置映射文件 就是我dao包中创建的mapper文件名 --> <mappers> <mapper resource="com/aaa/dao/DeptMapper.xml" /> </mappers> </configuration>
3.创建DAO接口和实体类
package com.aaa.dao; import com.aaa.entity.Dept; import java.util.List; /* * *使用Dao接口进行操作 * 1.定义增删改 * 2.修改 映射文件 * * */ public interface DeptDAO { List<Dept> queryAll(); int insert(Dept dept); int update(Dept dept); int delete(int id); }
实体类
package com.aaa.entity; public class Dept { private int id; private String ename; private String job; private double sal; public Dept() { } public Dept(int id, String ename, String job, double sal) { this.id = id; this.ename = ename; this.job = job; this.sal = sal; } public Dept(int id, String ename) { this.id = id; this.ename = ename; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public double getSal() { return sal; } public void setSal(double sal) { this.sal = sal; } @Override public String toString() { return "Dept{" + "id=" + id + ", ename='" + ename + '\'' + ", job='" + job + '\'' + ", sal=" + sal + '}'; } }
4.创建DAO对应的SQL映射文件 就是创建一个mybatis-mapper文件 ideal中默认没有的 和mybatis-config.xml一样需要进行进行模板配置
模板添加完成 创建mybatis-mapper.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"> <!--确保唯一的标识 通常指向dao接口的完全限定名--> <mapper namespace="com.aaa.dao.DeptDAO"> <!--查询命令 id="selectDept":唯一标识 resultType:返回的结果的类型 --> <!--通过dao接口中定义功能 进行操作SQL命令 需要修改映射文件--> <select id="queryAll" resultType="com.aaa.entity.Dept"> select * from dept; </select> <insert id="insert" parameterType="com.aaa.entity.Dept"> insert into dept(ename,job,sal)values(#{ename},#{job},#{sal}); </insert> <update id="update" parameterType="com.aaa.entity.Dept"> update dept set ename=#{ename} where id=#{id}; </update> <!--接口中定义的是int类型 这里 parametertype 返回值就是 Integer 类型--> <delete id="delete" parameterType="Integer"> delete from dept where id=#{id} </delete> </mapper>
5.读取配置文件 就是在mybatis中 添加
<mappers>
注意 这里的路径 用 / 号分开
<mapper resource="com/aaa/dao/DeptMapper.xml" />
<mappers>
6.创建一个单列模式的工厂类 便于连接测试。
package com.aaa.util; 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 java.io.IOException; import java.io.InputStream; public class Factory { private static SqlSessionFactory ssf=null; static{ String resource="mybatis-config.xml"; InputStream is=null; try { is = Resources.getResourceAsStream(resource); ssf = new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); } } public Factory() { } public static SqlSessionFactory getSsf(){ return ssf; } public static SqlSession getSqlSession(){ return ssf.openSession(); } }
7.测试
package com.aaa.test; import com.aaa.dao.DeptDAO; import com.aaa.entity.Dept; import com.aaa.util.Factory; import org.apache.ibatis.session.SqlSession; import java.util.List; /* * 测试 使用接口的方式来 进行SQL命令的操作。 * */ public class TestDAO { public static void main(String[] args) { SqlSession sqlSession = Factory.getSqlSession();
//获取DAO接口的代理 .class反射找路径! DeptDAO deptDAO = sqlSession.getMapper(DeptDAO.class); //1.增删改 需要事务支持 2.insert添加数据 // deptDAO.insert(new Dept(0,"李四", "老师",0)); // sqlSession.commit(); //修改数据 根据id 修改名字 需要在实体类中创建对应的构造方法。 // deptDAO.update(new Dept(1, "哈哈")); // sqlSession.commit(); //删除数据 // deptDAO.delete(4); // sqlSession.commit(); //查询数据 List<Dept> deptList = deptDAO.queryAll(); for (Dept dept:deptList ) { System.out.println("部门信息"+dept); } sqlSession.close(); } }