Mybatis概述
一个持久层框架。
注意:
所有的持久层框架,都是基于JDBC的基础上进行封装的。
比较
Hibernate
可以对JDBC进行高度封装,不用编写Sql,即:可 映射 操作数据库。
可以针对复杂的多表关系,可以方便关联操作。
优点 擅长处理多边关系
缺点 不擅长处理复杂的多边关系
例:OA、政府档案、数据管理系统。
JDBC
优点 单个操作效率高
缺点 参数传递、返回值的封装
Mybatis
针对JDBC进行完美封装,保留了JDBC的Sql编写方式,优化了参数绑定和返回值的封装。
例:电商、金融项目。
Mybatis主体架构
Mybatis编写过程
1.创建项目,导入Jar包。
2.编写SqlMapConfig.xml配置文件,编写数据库的连接配置。
3.测试数据库是否连接正常。
4.编写Mapper.xml。
5.测试sql执行是否正常。
第一个Mybatis程序
创建项目,在src下创建lib文件夹,导入jar包。
在src根目录下创建xml文件,命名为SqlMapConfig.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>
<!-- 声明数据库链接配置-->
<environments default="development">
<!-- 一套开发者环境-->
<environment id="development">
<!-- 默认JDBC的事务管理取消了单条sql的自动提交-->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>`在这里插入代码片`
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
</configuration>
在src下创建test文件夹,创建测试类进行测试。
public class test1 {
@Test
public void test1() throws IOException {
// 1.先获取会话工厂构造器
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 指定连接配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.根据构造器,构造会话工厂
SqlSessionFactory factory = builder.build(is);
// 3.开启连接会话
SqlSession session = factory.openSession();
System.out.println("连接:\n"+session);
}
}
与数据库连接成功,输出地址。
选择操作的数据表,创建实体类。
创建方式如下,bean中创建实体类Student;
这里的构造方法是根据操作进行调整。
package com.zegj.bean;
public class Student {
//属性的封装
private int id;
private String name;
private String sex;
private int age;
//get and set
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public Student(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public Student(String name, String sex, int age, int id) {
this.name = name;
this.sex = sex;
this.age = age;
this.id = id;
}
public Student(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public Student() {
}
}
在src下创建mapper文件夹,创建xml文件。
<?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="StudentMapper">
<!--增加-->
<insert id="addStu" parameterType="com.zegj.bean.Student">
insert into tb_student(name,sex,age) values (#{name},#{sex},#{age})
</insert>
<!--删除-->
<delete id="delStu" parameterType="java.lang.Integer">
delete from tb_student where id=#{id}
</delete>
<!--修改-->
<update id="updStu" parameterType="com.zegj.bean.Student">
update tb_student set name=#{name},sex=#{sex},age=#{age} where id = #{id}
</update>
<!--查询-->
<select id="findStuById" parameterType="Integer" resultType="com.zegj.bean.Student">
select * from tb_student where id=#{id}
</select>
</mapper>