实现增删改查功能
映射文件指导着MyBatis如何进行数据库增删改查
在EmployeeMapper接口中添加增删改查的方法:
1 | package dao; |
在映射文件Employee.xml添加相应的sql映射:
1 |
|
测试增删改方法:
1 |
|
MyBatis参数处理
单个参数:mybatis不会做特殊处理。 #{参数名}:取出参数
多个参数:mybatis会做特殊处理,多个参数封装成一个map
key:参数param1,param2…
value:传入的参数值
#{param1}或#{0}:取出参数值1
通过注解明确指定封装类型的key:
1 | public Employee getEmpByIdAndName(@Param("id")Integer id,@Param("name")String name); |
#{指定的key}:取出对应的参数值
#{}与${}的区别:
#{}:是以预编译的形式,将参数设置到sql;防止sql注入
${}:直接拼装到sql中;有安全问题
select元素
1、返回list对象
1 | public List<Employee> getEmpsByNameLike(String name); |
1 | <select id="getEmpsByNameLike" resultType="bean.Employee"> |
1 | List<Employee> employeeList = mapper.getEmpsByNameLike("%o%");// 查询name含有o的所有记录 |
2、返回map对象(单条记录)
1 | // 返回一条记录的map key:列名 value:对应的值 |
1 | <select id="getEmpByIdReturnMap" resultType="map"> |
1 | Map<String,Object> map = mapper.getEmpByIdReturnMap(1); |
2、返回map对象(多条记录)
1 | // 返回多条记录发map key:主键 value:封装后的bean对象 |
1 | <select id="getEmpsByNameLikeReturnMap" resultType="bean.Employee"> |
1 | Map<Integer,Employee> employeeMap = mapper.getEmpsByNameLikeReturnMap("%o%"); |
resultMap 自定义结果集封装规则
1 | <!-- resultMap 自定义结果集规则 |
联合查询:级联属性封装结果集
1 | <resultMap id="MyEmpAndDept" type="bean.Employee"> |
联合查询:通过association标签封装结果集
1 | <resultMap id="MyEmpAndDept2" type="bean.Employee"> |
分部查询:先查询员工,得到员工信息后再根据员工的部门编号,查询部门信息
1 | public interface DepartmentMapper { |
DepartmentMapper.xml
1 | <mapper namespace="dao.DepartmentMapper"> |
EmployeeMapper.xml
1 | <!-- 分部查询 可以启动延迟加载--> |
mybatis-config.xml
1 | <setting> |
使用时才进行加载:
1 | Employee empByIdStep = mapper.getEmpByIdStep(1); |
1 | Employee empByIdStep = mapper.getEmpByIdStep(1); |
Collection集合类型&嵌套结果集:
通过部门编号查找所有在该部门的员工,返回一个List员工集合
1 | private Integer id; |
1 | public interface DepartmentMapper { |
1 | <resultMap id="MyDept" type="bean.Department"> |
1 | Department deptByIdPlus = mapper.getDeptByIdPlus(1); |
结果集包含List<String> orderIds
时
1 | <!-- 一对多,变成list<String> --> |