我们于2021/07/31 的学习目标是:MyBatis,核心任务为:
1、学习技术:
1)、MyBatis的参数类型
2)、三个常用的查询方法
3)、配置别名
4)、配置文件软编码
5)、接口绑定方案
2、文档总结
1)、MyBatis的参数类型
parameter入参类型:
- 基本数据类型
- 包装类
- String
- Date
- Javabean
- 数组
- List
- Map
resultType结果类型:
- 基本数据类型
- 包装类
- String
- Date
- Javabean
- List
- Map
测试结果类型:
- 基本数据类型
- 包装类
- String
- Date
- Javabean
- 数组
- List
- Map
2)、三个常用的查询方法
selectOne()
执行指定SQL,得到一个结果
selectList()
执行指定SQL,得到一个List集合,如果没查到,则返回一个没有数据的List(非null)
selectMap()
执行指定SQL,得到一个Map集合,没查到返回空Map
3)、配置别名
<typeAliases>
<typeAlias type ="com.sdf.entity.Dept" alias="Dept"/>
<!—为包下所有JavaBean类添加别名,不区分大小写-->
</typeAliases>
4)、配置文件软编码
db.properties文件:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=SCOTT
password=TIGER
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>
<!-- 加载外部的properties文件 -->
<properties resource="db.properties" />
<!--配置别名,别名不区分大小写-->
<typeAliases>
<package name="com.sdf.pojo"/>
</typeAliases>
<!--环境配置-->
<environments default="ev">
<environment id="ev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--sql映射配置加载-->
<mappers>
<mapper resource="com/sdf/mappers/EmpMapper.xml"/>
<mapper resource="com/sdf/mappers/Tb_Student.xml"/>
</mappers>
</configuration>
5)、接口绑定方案
emp的JavaBean:
import java.io.Serializable;
import java.util.Date;
public class Emp implements Serializable{
private int empno;
private String ename;
private double sal;
private Date hiredate;
private int deptno;
public Emp() {
// TODO Auto-generated constructor stub
}
public Emp(int empno, String ename) {
this.empno = empno;
this.ename = ename;
}
public Emp(int empno, String ename, int deptno) {
this.empno = empno;
this.ename = ename;
this.deptno = deptno;
}
public Emp(int empno, String ename, double sal, Date hiredate, int deptno) {
super();
this.empno = empno;
this.ename = ename;
this.sal = sal;
this.hiredate = hiredate;
this.deptno = deptno;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + deptno;
result = prime * result + empno;
result = prime * result + ((ename == null) ? 0 : ename.hashCode());
result = prime * result + ((hiredate == null) ? 0 : hiredate.hashCode());
long temp;
temp = Double.doubleToLongBits(sal);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Emp other = (Emp) obj;
if (deptno != other.deptno)
return false;
if (empno != other.empno)
return false;
if (ename == null) {
if (other.ename != null)
return false;
} else if (!ename.equals(other.ename))
return false;
if (hiredate == null) {
if (other.hiredate != null)
return false;
} else if (!hiredate.equals(other.hiredate))
return false;
if (Double.doubleToLongBits(sal) != Double.doubleToLongBits(other.sal))
return false;
return true;
}
@Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + ", sal=" + sal + ", hiredate=" + hiredate + ", deptno="
+ deptno + "]";
}
}
EmpMapper2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN">
<!--测试批量操作 -->
-<mapper namespace="com.sdf.mappers.EmpMapper2">
-<delete id="deleteEmpSome">
delete from emp where empno in
<foreach close=")" open="(" separator="," item="item" collection="list">#{item} </foreach>
</delete>
-<update id="updateEmpSome">
<foreach close=";end;" open="begin" separator=";" item="item" collection="list">update emp set ename=#{item.ename} where empno = #{item.empno} </foreach>
</update>
-<insert id="insertEmpSome">
insert into emp(empno, ename, deptno)
<foreach separator="union" item="item" collection="list">select #{item.empno}, #{item.ename}, #{item.deptno} from dual </foreach>
</insert>
</mapper>
EmpMapper2.java类
package com.sdf.mappers;
import com.sdf.pojo.Emp;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/*
测试接口绑定方案:
1.定义接口
定义抽象方法(业务)
2.与接口相关联的sql映射文件
3.测试使用
实现基本crud
*/
public interface EmpMapper2 {
//批量删除,根据员工编号删除员工数据
public int deleteEmpSome(List<Integer> empno);
//批量修改
public int updateEmpSome(List<Emp> list);
//批量插入
public int insertEmpSome(List<Emp> list);
}
Class002_Interface_bind.java类
package com.sdf.test;
import com.sdf.mappers.EmpMapper;
import com.sdf.mappers.EmpMapper2;
import com.sdf.pojo.Emp;
import com.sdf.utils.SessionUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/*
测试接口绑定方案的基本使用
*/
public class Class002_interface_bind {
public static void main(String[] args) {
//1.获取回话
SqlSession session = SessionUtils.getSession();
//2.获取接口的实现类对象
//接口多态
EmpMapper2 mapper = session.getMapper(EmpMapper2.class);
//3.调用功能
mapper.deleteEmpSome(List.of(7878,7698));
System.out.println("-------------------");
mapper.updateEmpSome(List.of(new Emp(7369,"SMITHS"),new Emp(7839,"KINGS")));
mapper.insertEmpSome(List.of(new Emp(7777,"haha",30),new Emp(8888,"hehe",20)));
//4.关闭回话
session.close();
}
}