SqlSession openSession = sqlSessionFactory.openSession();
顾名思义(从名称想到所包含的意义,给用心的我点个大大的赞!),不在详细解释标题啥意思了~
Mybatis执行流程:
-
根据xml文件(全局配置文件)创建一个SqlSessionFactory对象里面有数据源和一些运行环境信息
-
sql映射文件,配置了每一个sql,以及sql的封装规则等。
-
将sql映射文件注册在全局配置文件中
-
写代码
根据全局配置文件得到sqlSessionFactory
使用sqlSession工厂,获取到sqlSession对象使用它来执行CRUD
一个sqlSession就是代表和数据库的一次会话,用完关闭
使用sql的唯一标志来告诉Mybatis执行那个sql。sql都是保存在sql映射文件里的
既然要映射sql语句我们先要创建对应的数据库
和对应数据库字段的的实体类
@Alias这个注解是给这个实体类起的别名叫emp
通过这个实体类来映射数据库中的一条记录,一个对象就是数据库中的一条记录~
package com.caq.mybatis.bean;
import org.apache.ibatis.type.Alias;
@Alias(“emp”)
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
private Department dept;
public Employee() {
}
public Employee(Integer id, String lastName, String email, String gender, Department dept) {
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
this.dept = dept;
}
public Department getDept() {
return dept;
}
public void setDept(Department dept) {
this.dept = dept;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return “Employee{” +
“id=” + id +
“, lastName='” + lastName + ‘’’ +
“, email='” + email + ‘’’ +
“, gender='” + gender + ‘’’ +
‘}’;
}
}
下面这个就是sql映射文件
-
namespace就是命名空间;指定为接口的全类名
-
id就是唯一标识
-
resultType就是返回值类型,比如我们想返回的是员工的信息,那我们就返回Employee的全类名
-
#{id}:从传递过来的参数中取出id值
-
id指定接口中的方法,这样不仅文件和接口绑定,select标签也和方法进行了绑定
以上几点都是重点!!!画黑板了,记到本子上!
映射文件
<?xml version="1.0" encoding="UTF-8" ?>select * from tbl_employee
where id = #{id}
将我们写好的sql映射文件一定要注册到全局配置文件中
测试效果
@Test
public void test01() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(employee);
} finally {
openSession.close();
}
}
结果如下:
Employee{id=1, lastName=‘tom’, email=‘tom@caq.com’, gender=‘0’}
面向接口编程
什么是面向接口编程?
面向接口编程是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,通过更改配置文件中该接口的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。(这个概念的理解很重要,先记着后面实践的时候会越来越清晰!)
这里我结合后面springboot的一些方式,释放了mybatis-config.xml文件,通过yml文件中的指定来替换。数据库映射mapper.xml文件通过在接口上写@Mapper注解和方法上写注解的方式实现
如下:
yml文件
mybatis:
通过yml配置文件的方式解放了mybatis-config.xml文件
configuration:
map-underscore-to-camel-case: true #开启驼峰命名
Mapper接口
package com.caq.admin.mapper;
import com.caq.admin.bean.Account;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//通过写@Mapper注解的方式释放了写mapper.xml映射文件的方式
@Mapper
public interface AccountMapper {
@Select(“select * from account where id = #{id}”)
Account test(Long id);
}
service层
package com.caq.admin.service;import com.caq.admin.bean.Account;import com.caq.admin.mapper.AccountMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class AccountService { @Autowired AccountMapper accountMapper; public Account getAcc(Long id){ return accountMapper