在之前写了mybatis是如何使用的,但是并没有对mybatis进行详细的解释,这里再补一篇
mybatis是什么?
mybatis框架结构图:

接口层:封装了基本的功能,可以直接使用
数据处理层:接口层会将参数、sql语句等传递到数据处理层,在数据处理层进行数据库操作,并返回结果集,返回的结果集经过关系映射,可以直接返回对象等。
基础支撑层:用来向数据处理层提供基本的功能,如数据库的连接对象创建,关闭,事务的创建,数据库的连接,缓存等
mybatis的配置文件详解(这里写的是mybatis最简单的搭建,更多详细属性请参考官方文档)
在idea中,我们搭建框架是非常快的,使用mybatis需要创建配置文件,配置文件就是基础支撑层,是整个框架的基础,但是在idea中,没有mybatis的配置文件的模板,配置文件中的xml文件内容不容易记,因此我们先在idea中创建mybatis的配置文件的模板:
首先创建一个maven项目于,或者普通项目,导入mybatisjar包以及数据库连接包
<dependencies>
<!--mybatisjar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--mysql连接包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!--oracle数据库连接包 ,需要连哪儿个数据库就连哪儿个jar包-->
<!--<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6</version>
</dependency>-->
</dependencies>
1.打开模板创建页面,编辑模板

2.创建模板内容并保存

点击ok后,我们就可以在新建文件里面直接创建了,配置文件的基本信息如下:
<?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>
</configuration>

创建配置文件,并配置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>
<!--创建配置文件后,就在配置文件中配置mybatis的环境-->
<!--default:默认的环境,在environments标签中可以创建多个环境,一个数据库类型就是一个环境,通过id来区分不同的环境,
default的值就是需要默认的数据库环境的id,这里默认使用mysql的环境-->
<environments default="mysql">
<!--配置一个mysql的环境,id是数据库的唯一标识,不可重复-->
<environment id="mysql">
<!--事务管理器,type:jdbc可以使用jdbc的事务,提交回滚等操作
还可以使用type='MANAGED' 这个操作基本没做什么,它不提交或者回滚事务,它会让容器来管理事务的整个声明周期,如spring-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源,type='POOLED' 意思是基于数据库连接池技术进行管理,在最开始我们使用jdbc连接时,就是一次创建一个连接对象,
然后用完就关闭连接,释放资源,因此我们后来使用了连接池技术来创建连接,POOLED就是使用池技术来管理连接,如果不需要的话,
就设置type="UNPOOLED" 这样就是使用一次创建一个连接,用完就关闭-->
<dataSource type="POOLED">
<!--property标签配置数据库的基本连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<!--至此一个数据库环境就配置完了,当然也可以继续配置oracle的环境-->
<!--配置oracle数据库的环境,当environments的default属性值为oracle时,就默认使用oracle数据库-->
<environment id="oracle">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件-->
<mappers>
</mappers>
</configuration>
然后连接数据库,测试上面的配置是否能够连接到数据库
public class TestCon {
public static void main(String[] args) throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession= sqlSessionFactory.openSession();
Connection connection = sqlSession.getConnection();
System.out.println(connection);
}
}
连接数据库成功后, 下面就要配置mapper文件,使用mybatis框架,mapper文件是不可少的,与之前创建mybatis-config配置文件的模板一样,我们也先给mapper文件创建一个模板,这样方便以后创建文件

模板的内容如下:
<!DOCTYPE mapper PUBLIC "-//mybatis.org// Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
</mapper>
关于mapper文件,首先创建数据库的表实体

package com.zs.entity;
public class Student {
private int sid;
private String sname;
public Student() {
}
public Student(int sid, String sname) {
this.sid = sid;
this.sname = sname;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
'}';
}
}
然后创建dao层接口
public interface IStudentDAO {
List<Student> listStudents();
int insertStudent(Student student);
int updateStudent(Student student);
int deleteStudent(int sid);
}
创建mapper文件,实现dao层接口的方法
<!DOCTYPE mapper PUBLIC "-//mybatis.org// Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace属性,表示该mapper文件是实现了哪儿个接口的方法,与接口是相对应的-->
<mapper namespace="com.zs.dao.IStudentDAO">
<!--每一个标签的id都对应一个dao层接口的方法名,方法名与id名要一致,且一一对应-->
<!--select标签,表示是查询语句,resultType表示返回值类型,因为在接口中返回的是一个学生的集合,因此写学生的类,
resultType是通过反射返回结果集的,还可以是基本数据类型Integer等,还可以有parameterType属性,设置参数的类型,下面会用到-->
<select id="listStudents" resultType="com.zs.entity.Student">
select * from student;
</select>
<!--参数类型可以是很多种,可以是Integer等,还可以是map,还可以是对象,因为在dao接口中参数是学生对象,
因此这里的参数类型写student,在传参时#{sname} #{}内的值为参数对象的属性,学生对象有两个属性,sid,sname,传参就写#{sid},#{sname} -->
<insert id="insertStudent" parameterType="com.zs.entity.Student">
insert into student(sname) value(#{sname})
</insert>
<update id="updateStudent" parameterType="com.zs.entity.Student">
update student set sname=#{sname} where sid=#{sid}
</update>
<delete id="deleteStudent" parameterType="Integer">
delete from student where sid=#{sid}
</delete>
</mapper>
注意要在mybatis-config中配置mapper文件:

然后运行测试:
import com.zs.dao.IStudentDAO;
import com.zs.entity.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestCon {
public static void main(String[] args) throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession= sqlSessionFactory.openSession();
IStudentDAO mapper = sqlSession.getMapper(IStudentDAO.class);
int i = mapper.insertStudent(new Student(1, "zhangsan"));
// 执行增删改操作后要提交事务
sqlSession.commit();
List<Student> students = mapper.listStudents();
System.out.println(students);
int lisi = mapper.updateStudent(new Student(1, "lisi"));
int i1 = mapper.deleteStudent(3);
sqlSession.commit();
List<Student> students1 = mapper.listStudents();
System.out.println(students1);
sqlSession.close();
}
}
运行后查看各个方法是否运行成功
来源:https://www.cnblogs.com/Zs-book1/p/11244968.html
