第一章 基础知识、数据类型学习
第二章 万年历项目
第三章 代码逻辑训练习题
第四章 方法、数组学习
第五章 图书管理系统项目
第六章 面向对象编程:封装、继承、多态学习
第七章 封装继承多态习题
第八章 常用类、包装类、异常处理机制学习
第九章 集合学习
第十章 IO流、多线程学习
第十一章 仓库管理系统项目
第十二章 员工管理系统、多表查询、反射实现DBHelper学习
第十三章 DML、DDL、数据库对象学习
第十四章 网络编程、各种标签、CSS学习
第十五章 ECMAScript、BOM学习
第十六章 DOM、jQuery学习
第十七章 Servlet、jsp、Cookie、Ajax学习
第十八章 融资管理系统项目
第十九章 MyBatis框架学习
本文会讲述:
框架简介
MyBatis框架的介绍与使用
在下攸攸太上,我是外星人。
框架是一个半成品,使程序员不用考虑公共问题,框架会代替程序员做;程序员可以专心于业务的实现,保证核心业务逻辑的开发质量;结构统一,便于学习和维护;缩短开发的时间和周期。
框架是一个提供了可重用的公共结构的半成品,为构建程序提供了极大的遍历,提供了可重用的设计。
框架使混乱的东西变得结构化,保证了程序结构风格统一。
框架有很多约束,必须按照步骤按部就班的进行操作,但也包含了很多设计模式和基础功能。
一般小型项目中不适用框架,大型规模使用框架的效果极佳。
MyBatis是一个基于Java的数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。取代了原本Dao的作用。
ORM 对象关系映射,是一种数据持久化技术
O:Object 对象:java里的实体类(对象)
R:Relation 关系:关系型数据库(表)
M:Mapping 映射:提供一种机制,实现映射
半自动化:需要程序员编写sql语句,才能完成指定功能。
全自动化:无需程序员编写sql语句,直接操作实体类对象,就可以对应的操作数据库表里的数据。
有全自动为什么还需要半自动化?
多表查询的时候,分页查询的时候,全自动在进行修改的的时候反而很复杂
MyBatis 可以使用简单的XML或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
JDBC操作步骤:
1、定义数据库连接参数
2、打开数据库连接
3、声明SQL语句
4、预编译并执行SQL语句
5、遍历查询结果
6、处理事务
7、关闭数据库连接
MyBatis只需要定义数据库连接参数与声明SQL语句
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Double sal;
private Double comm;
private Integer deptno;
}
<?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 resource="jdbc.properties"></properties>
<!--类型别名,设置entry包下的所有类,都可以以首字母小写的别名来访问,减少代码冗余度-->
<typeAliases>
<package name="entry"/>
</typeAliases>
<!--配置MySql环境-->
<environments default="emploee">
<environment id="emploee">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!--设置映射器-->
<mappers>
<package name="mapper"/>
</mappers>
</configuration>
接口EmpMapper(相当于Dao)
import entry.Emp;
import java.util.ArrayList;
public interface EmpMapper {
ArrayList<Emp> selectByEmp(Emp emp);
ArrayList<Emp> selectByInfo(Emp emp);
int insertEmp(Emp emp);
int updateEmp(Emp emp);
ArrayList<Emp> selectByList(ArrayList<Integer> list);
}
EmpMapper.xml(相当于DaoImpl)
<?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="mapper.EmpMapper">
<select id="selectByEmp" parameterType="emp" resultType="emp">内部写Sql语句</select>
<select id="selectByInfo" parameterType="emp" resultType="emp"></select>
<insert id="insertEmp" parameterType="emp" useGeneratedKeys="true" keyProperty="empno"></insert>
<update id="updateEmp" parameterType="emp"></update>
<select id="selectByList" parameterType="java.util.ArrayList" resultType="emp"> </select>
</mapper>
在映射文件中,我们一般只使用insert、delete、update、select元素
public class TestEmp {
public static void main(String[] args) throws IOException {
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
SqlSession session = factory.openSession();
EmpMapper mapper = session.getMapper(EmpMapper.class);
System.out.println("新增:");
Emp emp = new Emp();
emp.setEname("权某");
emp.setJob("活着");
emp.setMgr(985);
mapper.insertEmp(emp);
session.commit();
System.out.println("if查找");
ArrayList<Emp> emps = mapper.selectByEmp(emp);
for (Emp e : emps) {
System.out.println(e);
}
System.out.println("修改");
emp.setJob("因活着被捕");
mapper.updateEmp(emp);
session.commit();
System.out.println("ifelse查找");
emps = mapper.selectByInfo(emp);
for (Emp e : emps) {
System.out.println(e);
}
System.out.println("list查找");
ArrayList<Integer> list = new ArrayList<>();
list.add(10);
list.add(30);
emps = mapper.selectByList(list);
for (Emp e : emps) {
System.out.println(e);
}
}
File>Setting>Pulgins中下载如下两个工具
MyBatisX可以测试Mapper映射的对不对
Lombok可以以以下很少的代码代替全参构造、无参构造、getset方法以及同String方法
今天讲解了MyBatis框架的理论及应用。
话说,在下如今身陷情关,你们地球人有没有什么外星人对地球人告白的好方法啊?