package com.sky.mapper;
import com.sky.pojo.Emp;
import com.sky.utils.BatisMapper;
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;
import java.util.HashMap;
import java.util.List;
public class EmpMapper {
// 需求:根据员工编号查询员工信息
public Emp getEmpById(int empno) throws IOException {
String config = "MybatisConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(config);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 第一个参数:指定要执行的sql语句namespace + id
// 第二个参数:真正的参数,没有就不用写
Emp emp = sqlSession.selectOne("test.getEmpById", empno);
return emp;
}
// 需求:查询所有的员工信息
public List<HashMap> getAll(){
return BatisMapper.getSqlSession().selectList("test.getAll");
}
// 需求:根据员工编号删除员工信息
public void deletEmpById(int empno){
SqlSession sqlSession = BatisMapper.getSqlSession();
sqlSession.delete("test.deletEmpById",empno);
sqlSession.commit();
}
// 需要:查询员工工资大于指定工资的人数
public Integer getNumBySalary(int salary){
SqlSession sqlSession = BatisMapper.getSqlSession();
Integer integer = sqlSession.selectOne("test.getNumBySalary", salary);
return integer;
}
}
写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">
<!-- 所有的sql语句都必须写在这个标签内部,
名称空间。接口的全路径,要求唯一
-->
<mapper namespace="test">
<!-- mybatis 为每一种操作都创建一个标签-->
<!-- id 给这个标签起一个名字-,要求唯一,一般情况下这个id都是接口中的方法名
parameterType:输入参数类型,sql中参数的数据类型,可以省略
resultType:输出参数类型,结果集的封装类型,必须存在,不可省略
-->
<!-- 需求:根据员工编号查询员工信息-->
<select id="getEmpById" parameterType="int" resultType="com.sky.pojo.Emp">
select * from emp where empno = #{empno}
</select>
<!-- 需求:查询所有的员工信息-->
<select id="getAll" resultType="HashMap">
select * from emp LEFT JOIN dept on emp.deptno = dept.deptno
</select>
<!-- 需求:根据员工编号删除员工信息-->
<delete id="deletEmpById" parameterType="int">
DELETE FROM emp WHERE empno = #{empno}
</delete>
<!-- 需要:查询员工工资大于指定工资的人数-->
<select id="getNumBySalary" parameterType="int" resultType="int">
SELECT COUNT(empno) FROM emp WHERE salary > #{salary}
</select>
</mapper>
mybatis配置
<?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">
<!-- 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:///kg16"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件,写sql语句的文件,必须将所有的映射文件全部引进来-->
<mappers>
<mapper resource="com/sky/mapperxml/EmpMapper.xml"/>
</mappers>
</configuration>
测试,junit 测试
package com.sky.service;
import com.sky.mapper.EmpMapper;
import com.sky.pojo.Emp;
import org.junit.Test;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
public class EmpService {
public static void main(String[] args) throws IOException {
EmpMapper empMapper = new EmpMapper();
Emp emp = empMapper.getEmpById(8);
System.out.println(emp);
List<HashMap> all = empMapper.getAll();
System.out.print(all);
empMapper.deletEmpById(9);
}
// 单元测试。junit 测试
// 基于方法的测试
// 1、引入依赖
// 2、写测试方法:方法不能有返回值,不能有参数,不能用Test作为方法名,一般方法名和测试的方法名一样
// 3、使用Test注解运行方法
@Test
public void getEmpById() throws IOException {
EmpMapper empMapper = new EmpMapper();
Emp emp = empMapper.getEmpById(8);
System.out.println(emp);
}
@Test
public void getNumBySalary() throws IOException {
EmpMapper empMapper = new EmpMapper();
int i = empMapper.getNumBySalary(8000);
System.out.println(i);
}
}