<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!--junit5测试-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
</dependency>
//使用了lombok也可以自己创建里面的Setter和Getter方法等等
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
private Integer empId;
private String empName;
private Double empSalary;
}
//mapper接口
public interface EmployeeMapper {
//根据id查询员工信息
Employee queryById(Integer id);
int deleteById(Integer id);
}
//在resources/mappers文件目录下
//EmployeeMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--xml方式写sql语句,没有java代码
mybatis规定在特定的sql标签里写sql语句
mapper文件应该有约束就是上面的.tdt文件
-->
<!-- namespace等于mapper接口类的全限定名,这样实现对应 -->
<mapper namespace="com.atguigu.mapper.EmployeeMapper">
<!-- 查询使用 select标签
id = 方法名
resultType = 返回值类型
标签内编写SQL语句
mapper接口不能重载,它只认识id标签名,不可以同名不同参数
-->
<select id="queryById" resultType="com.atguigu.pojo.Employee">
<!-- #{empId}代表动态传入的参数,并且进行赋值!后面详细讲解 -->
select emp_id empId,emp_name empName, emp_salary empSalary from
t_emp where emp_id = #{empId}
</select>
<select id="deleteById">
delete from t_emp where emp_id = #{empId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mapper.EmployeeMapper">
<!--
#{ key } : 占位符 + 赋值 emp_id = ? ?=赋值
${ key } : 字符串拼接 " emp_id = " + id
推荐使用#{} 防止sql注入
总结: 动态值 使用 #{} , 列名,表名,写成${ }
? 只能替代值的位置,不能代替容器名(列名、表名、sql关键字) emp_id = ? 不能写 ? = ?
sql select * from 表 where 列名动态 ${ColumName} = 值动态 #{ColumValue}
-->
<select id="queryById" resultType="com.atguigu.pojo.Employee">
select * from emp_id empId,emp_name empName,emp_salary empSalary
from e_tmp where emp_id =
</select>
</mapper>
//在resources文件目录下
//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">
<configuration>
<!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
<environments default="development">
<!-- environment表示配置Mybatis的一个具体的环境 -->
<environment id="development">
<!-- Mybatis的内置的事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<!-- 建立数据库连接的具体信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
<!-- mapper标签:配置一个具体的Mapper映射文件 -->
<!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
<!-- 对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
<mapper resource="mappers/EmployeeMapper.xml"/>
</mappers>
</configuration>
public class MybatisTest {
/**
* 通过mybatis的API进行方法的调用
* JdbcTamplate = new JdbcTamplate()可以直接new出来
* Mybatis比较繁琐
*/
@Test
public void test() throws IOException {
//1. 读取外部配置文件(mybatis-config.xml)
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//2. 创建sqlSessionFactory(全局的)
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//3. 根据sqlSessionFactory去创建sqlSession(每次业务创建一个用完就释放)
SqlSession sqlSession = sqlSessionFactory.openSession();
//4. 获取接口的代理对象,调用代理对象的方法就会查找mapper接口的方法
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.queryById(1);
System.out.println("employee = " + employee);
//5. 提交事务(非DQL) 和释放资源
sqlSession.commit();
sqlSession.close();
}
}
推荐阅读: