mybatis的使用
mybatis简介
mybatis是一个ORM(Object Relation Mapping)框架,编写程序的时候,以面向对象的方式处理数据保存数据的时候,却以关系型数据库的方式存储,它可以 简化 J D B C 的操作 \color{#FF0000}{简化JDBC 的操作} 简化JDBC的操作,让开发者只需要关注 SQL 语句本身,而不用处理繁琐的数据库连接、参数设置和结果集获取等过程。mybatis 支持自定义 SQL、存储过程和高级映射,可以通过 XML 或注解来配置和映射 Java 对象和数据库记录。
mybatis 的优点是:
简单易学:mybatis 很小且简单,没有任何第三方依赖,安装和使用都很方便。
灵活:mybatis 不会对应用程序或数据库的现有设计造成任何影响,可以灵活地适应各种场景和需求。
解耦:mybatis 通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易测试。
动态:mybatis 提供了 XML 标签和动态 SQL 语言,支持编写动态 SQL,可以根据不同的条件生成不同的 SQL 语句。
mybatis的使用
首先需要在web项目下添加mybatis的依赖(jar包),如图
再在src目录下添加两个文件(File),database.propertis 和 mybatis-config.xml
database.propertis 是数据库配置文件
# Database driver 驱动
driver=com.mysql.cj.jdbc.Driver
# Database connection URL 连接链接
url=jdbc:mysql://localhost:3306/[数据库名]?serverTimezone=GMT-8&useSSL=false
# Database username 用户名
username=root
# Database password 密码
password=root
mybatis-config.xml 是mybatis核心配置文件,事务管理器现在先不用
<?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="database.properties"/>
<!--环境配置-->
<environments default="aaa">
<!--第一个环境-->
<environment id="aaa">
<!--配置事务管理器-->
<transactionManager type="JDBC">
</transactionManager>
<!--配置具体数据源,POOLED是mybatis自带的一种数据源-->
<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>
<!--注册所有映射文件-->
<mappers>
<mapper resource="dao/StudentDao.xml"/>
</mappers>
</configuration>
然后创建好其它必要的文件
StudentDao 接口和 jdbc 中的接口一样
public interface StudentDao {
List<Student> getAll();
}
Student类和MyClass类
//省略构造和getter setter
public class Student implements Serializable {
private static final long serialVersionUID = -33052211675788318L;
private int sid;
private String sname;
private int sage;
private String sgender;
private MyClass sclass;
}
public class MyClass {
private int cid;
private String cname;
private School school;
}
StudentDao.xml 是和 StudentDao 对应的映射文件,要使用什么sql语句就使用对应的标签就可以了,属性id是接口中对应的方法名,resultType是返回值的类型,这里手动映射换成了resultMap
<?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="dao.StudentDao">
<!--由于Student的班级属性是其他的类,这里需要手动映射查询结果各列和实体属性之间的关系-->
<resultMap id="student_all" type="entity.Student">
<id property="sid" column="sid"/>
<result property="sname" column="sname"/>
<result property="sage" column="sage"/>
<result property="sgender" column="sgender"/>
<association property="sclass" javaType="entity.MyClass">
<id property="cid" column="cid"/> //这个查询语句只能查出cid,所以不写cname
</association>
</resultMap>
<select id="getAll" resultMap="student_all">
SELECT *
FROM student
</select>
</mapper>
运行测试
public class Test {
public static void main(String[] args) {
//1·读取mybatis核心配置文件
String resource = "mybatis-config.xml";
//2·获取对mybatis.config.xml的输入流
try {
InputStream is = Resources.getResourceAsStream(resource);
//3·使用输入流来创建SqlSessionFactoryBuilder
//然后再构建出SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//4·根据factory生成会话
SqlSession session = factory.openSession();
//5·只要有了会话,就能调用所有的增删改查了
StudentDao sd = session.getMapper(dao.StudentDao.class);
List<Student> list = sd.getAll();
for (Student student :
list) {
System.out.println(student.getSname()+" "+student.getSclass());
}
} catch (Exception e) {
e.printStackTrace();
}
// 控制台输出:
// 张无忌 entity.MyClass@5d20e46
// 杨过 entity.MyClass@709ba3fb
// 小龙女 entity.MyClass@3d36e4cd
// 郭芙蓉 entity.MyClass@6a472554
// 黄蓉 entity.MyClass@7ff2a664
// 令狐冲 entity.MyClass@525b461a
// 岳灵珊 entity.MyClass@58c1c010
// 杨康 entity.MyClass@b7f23d9
// 林青霞 entity.MyClass@61d47554
// 虚竹 entity.MyClass@69b794e2
// 李莫愁 entity.MyClass@3f200884
// 段誉 entity.MyClass@4d339552
// 王语嫣 entity.MyClass@f0f2775
// 杨铁心 entity.MyClass@5a4aa2f2
// 程英 entity.MyClass@6591f517
// 石破天 entity.MyClass@345965f2
// 公孙绿萼 entity.MyClass@429bd883
// 韦小宝 entity.MyClass@4d49af10
// 阿紫 entity.MyClass@279ad2e3
// 胡斐 entity.MyClass@58134517
}
}
查多表也是一样的流程,做好映射、mybatis就会自行实现jdbc的功能。