在之前写了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