本文最后更新于:December 3, 2021 pm
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
目录 MyBatis 中文文档:https://mybatis.org/mybatis-3/zh/index.html
1.Dao 1.1 接口 MybatisStudyDao.java
package com.loong.Dao;import com.loong.test.USER;import java.util.List;public interface MybatisStudyDao { public List<USER> alluser () ; public int inserttest (USER user) ; }
1.2 配置文件 MybatisStudyDao.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 ="com.loong.Dao.MybatisStudyDao" > <select id ="alluser" resultType ="com.loong.test.USER" > select * from test; </select > <insert id ="inserttest" > insert into test value (#{id},#{username},#{tele}); </insert > </mapper >
2.utils myutils.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package com.loong.utils;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 myutils { private static SqlSessionFactory factory = null ; static { String config = "mybatis.xml" ; try { InputStream in = Resources.getResourceAsStream(config); factory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession () { SqlSession sqlsession = null ; if (factory != null ){ sqlsession = factory.openSession(); } return sqlsession; } }
3.实体类 USER.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package com.loong.test;public class USER { private Integer id; private String username; private String tele; public Integer getId () { return id; } public void setId (Integer id) { this .id = id; } public String getUsername () { return username; } public void setUsername (String username) { this .username = username; } public String getTele () { return tele; } public void setTele (String tele) { this .tele = tele; } @Override public String toString () { return "USER{" + "id=" + id + ", username='" + username + '\'' + ", tele='" + tele + '\'' + '}' ; } }
测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package com.loong;import com.loong.Dao.MybatisStudyDao;import com.loong.test.USER;import com.loong.utils.myutils;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.io.IOException;import java.util.List;public class inTest { @Test public void tsetall () { SqlSession sqlsession = myutils.getSqlSession(); MybatisStudyDao dao = sqlsession.getMapper(MybatisStudyDao.class); List<USER> list = dao.alluser(); for (USER st:list){ System.out.println(st); } } @Test public void testin () { SqlSession sqlsession = myutils.getSqlSession(); MybatisStudyDao dao = sqlsession.getMapper(MybatisStudyDao.class); USER us = new USER(); us.setTele("3423" ); us.setUsername("luoyi" ); us.setId(34 ); int ans = dao.inserttest(us); sqlsession.commit(); sqlsession.close(); System.out.println(ans); } }
4.总结 4.1 动态代理 就是 mybatis 帮你创建 dao 接口的实现类,在实现类中调用 SqlSession 的方法执行 SQL 语句。
4.2 使用方法
获取 SqlSession 对象,SqlSessionFactory.openSession()
SqlSession sqlsession = myutils.getSqlSession();
使用 getMapper 方法获取某个接口的对象,sqlsession.getMapper(接口.class)
MybatisStudyDao dao = sqlsession.getMapper(MybatisStudyDao.class);
使用 dao 接口的方法,调用方法就执行了 mapper 文件中的 SQL 语句。
List<USER > list = dao.alluser();
4.3 要求
dao 接口和 mapper 文件放在一起,同一目录下。
dao 接口和 mapper 文件名称一致。
mapper 文件中的 namespace 的值是 dao 接口的全限定名称。
mapper 文件中的 <select>、<insert>、<update>、<delete> 等的 id 是接口中方法的名称。
dao 接口中不要使用重载方法,不要使用同名的、不同参数的方法。