增删改查具体代码
实体类:
持久层接口:
public interface EmpMapper {
/**
* 查询所有员工数据
*/
List<Emp> findAllByEmp();
/**
* 根据id来删除员工数据
*/
int deleteEmpById(Emp emp);
/**
* 根据id来修改员工数据
*/
int updateEmpById(Emp emp);
/**
* 添加员工数据,返回当前记录所对应的主键id
*/
int addEmp(Emp emp);
/**
* 跟据员工姓名来实现模糊查询的功能
*/
List<Emp> likeEmpName(String name);
/**
* 求员工的总个数
*/
int getCountEmp();
}
EmpMapper.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.jy.mapper.EmpMapper">
<!--
resultMap :建立起实体字段和表字段的对应关系
-->
<resultMap id="empVo" type="com.jy.pojo.Emp">
<!--匹配主键字段-->
<id property="eid" column="eid"></id>
<!--匹配非主键字段-->
<result property="eName" column="e_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="salary" column="salary"></result>
<result property="birthday" column="birthday"></result>
</resultMap>
<!--查询所有员工数据-->
<select id="findAllByEmp" resultMap="empVo">
select * from test04
</select>
<!--根据id来删除员工数据-->
<!--
OGM表达式:#{} 可以取到实体中某一个字段的值,在执行sql的时候,可以防止sql注入
el表达式:${}
-->
<delete id="deleteEmpById" parameterType="com.jy.pojo.Emp">
delete from test04 where eid = #{eid}
</delete>
<!--根据id来修改员工数据-->
<update id="updateEmpById" parameterType="com.jy.pojo.Emp">
update test04 set
e_name = #{eName},
age = #{age},
sex = #{sex},
salary = #{salary},
birthday = #{birthday}
where eid = #{eid}
</update>
<!--添加员工-->
<!--
SELECT LAST_INSERT_ID() 查询最新被插入的数据的主键id
selectKey 查询主键的标签 keyProperty 实体类属性名
keyColumn 表中字段名 order 表示在插入之前查询还是之后查询
resultType 返回值类型
-->
<insert id="addEmp" parameterType="com.jy.pojo.Emp">
<selectKey keyProperty="eid" keyColumn="eid" order="AFTER" resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
insert into test04 (
e_name,
age,
sex,
salary,
birthday
)values (
#{eName},
#{age},
#{sex},
#{salary},
#{birthday}
)
</insert>
<!--根据员工姓名来实现模糊查询的功能-->
<select id="likeEmpName" parameterType="string" resultMap="empVo">
select * from test04 where e_name like '%${value}%'
</select>
<!-- <!–根据员工姓名来实现模糊查询的功能–>
<select id="likeEmpName" parameterType="java.lang.String" resultMap="empVo">
select * from tb_emp where emp_name like #{qqqqqqq}
</select>-->
<!--求员工的总个数-->
<select id="getCountEmp" resultType="int">
select count(*) from test04
</select>
</mapper>
测试类:
public class MyBatisTest02 {
InputStream resourceAsStream =null;
SqlSessionFactory sqlSessionFactory = null;
SqlSession sqlSession = null;
EmpMapper empMapper = null;
/**
* @Before 会在所有的测试单元执行之前执行
*/
@Before
public void mybatisBefore(){
//根据流对象来解析mybatis核心配置文件,读取相关数据
try {
resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
//创建sqlSessionFactory对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//将sqlSession对象从工厂取出来
sqlSession = sqlSessionFactory.openSession();
//创建代理对象
empMapper = sqlSession.getMapper(EmpMapper.class);
}
/**
* @After 会在所有的测试单元执行之后执行
*/
@After
public void mybatisAfter(){
sqlSession.commit();
try {
resourceAsStream.close();
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test01(){
List<Emp> allByEmp = empMapper.findAllByEmp();
for (Emp emp : allByEmp) {
System.out.println(emp);
}
}
/**
* 测试删除数据
* 可以通过sqlSession调用delete方法进行删除,因为通过Mapper映射找到对应sql执行,
* 其底层也是使用的IBatis中SqlSession通过Update、Select、Insert、Delete等方法操作。
* 但MyBatis更建议使用Mapper,因为这更优雅
* int i = sqlSession.delete("com.jy.mapper.EmpMapper.deleteEmpById", 5);
*/
@Test
public void test02(){
//创建emp对象
Emp emp = new Emp();
emp.setEid(5);
int num = empMapper.deleteEmpById(emp);
System.out.println(num == 1 ? "删除成功":"删除失败");
}
/**
* 测试修改功能
*/
@Test
public void test03(){
//创建emp对象
Emp emp = new Emp();
emp.setEid(3);
emp.seteName("小花哈哈哈");
emp.setSalary(4000);
emp.setAge(20);
emp.setSex(2);
emp.setBirthday("2021-3-1");
int num = empMapper.updateEmpById(emp);
System.out.println(num == 1 ? "修改成功" : "修改失败");
}
/**
* 测试添加功能
*/
@Test
public void test04(){
//创建emp对象
Emp emp = new Emp();
emp.seteName("小铭11");
emp.setSalary(7000);
emp.setAge(28);
emp.setSex(1);
emp.setBirthday("2021-5-1");
System.out.println("添加之前 "+emp);
int num = empMapper.addEmp(emp);
System.out.println(num == 1 ? "添加成功" : "添加失败");
System.out.println("添加之后 "+emp);
}
/**
* 测试模糊查询功能
*/
@Test
public void test05(){
List<Emp> empList = empMapper.likeEmpName("铭");
for (Emp emp : empList) {
System.out.println(emp);
}
}
/**
* 测试求总记录条数
*/
@Test
public void test06(){
int countEmp = empMapper.getCountEmp();
System.out.println("员工总个数为 "+countEmp);
}
}
在mybatis的配置文件中,一定要配置映射器