MyBatis学习笔记(一)
MyBatis
-
内部封装jdbc,使开发者只需要关注sql语句本身
-
通过cml或注解的方式将要执行的而各种statement配置起来,通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后mybatis框架执行sql并将结果映射为java对象并return。
-
采用ORM(Object Relation Mapping)思想解决了实体和数据映射的问题,对jdbc进行封装,屏蔽jdbc api底层访问细节,使我们不用与api打交道,就可以完成持久化工作。
简单实例(以Student实体类为例)
-
官网下载Mybatis框架并将他放在工程的classpath中
-
创建mavnen工程
-
在pom.xml中添加Mybatis3.5.5的坐标
-
首先添加mybatis
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency>
-
然后添加数据库
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency>
-
添加log4j (log4j是Apache的开源项目,一个功能强大的日志框架,提供方便的日志记录。)
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency>
-
添加测试junit
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency>
-
-
编写实体类,持久层接口
Student实体类
package com.domain; import java.io.Serializable; import java.util.Date; public class Student implements Serializable { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + '}'; } }
持久层接口
package com.dao; import com.domain.Student; import java.util.List; //用户持久性接口 public interface IStudentDao{ // 查询所有 List<Student> findAll(); }
-
在resource中创建sqlConfig.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"> <!-- mybatis的主配置环境--> <configuration> <!-- 配置环境--> <environments default="mysql"> <!-- 配置mysql环境--> <environment id="mysql"> <!-- 配置事务类型--> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源或连接池--> <dataSource type="POOLED"> <!-- 配置数据库的4个基本信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/travel"/> <!-- username=自己的--> <!-- password=自己的--> <property name="username" value="****"/> <property name="password" value="****"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置--> <mappers> <mapper resource="com/dao/IStudentDao.xml"/> </mappers> </configuration>
-
创建持久层接口的映射文件 IStudentDao.xml
-
这里的mybatis映射配置文件必须和dao接口的包结构相同
-
映射配置文件的mapper标签的namespace属性的取值必须是dao接口的全限定类名;映射配置文件的操作配置select
-
id属性取值必须是dao接口的方法名)
-
insert表示执行添加操作
-
select表示执行查询操作
-
update表示执行更新操作
-
delete表示执行删除操作
<?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="com.dao.IStudentDao"> <!-- 配置 自己要完成的sql操作,这里以查询所有为例--> <select id="findAll" resultType="com.domain.Student"> select * from Student </select> </mapper>
-
测试类
package com.test; import com.dao.IUserDao; import com.domain.User; 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 MybatisTest { public static void main(String[] args) throws Exception { //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFacrtory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工厂生产SqlSession对象 SqlSession session = factory.openSession(); //4.使用SqlSession创建dao接口的代理对象 IUserDao userDao = session.getMapper(IUserDao.class); //5.使用代理对象执行方法 List<User> users = userDao.findAll(); for(User user: users) System.out.println(user); //6.释放资源 session.close();; in.close(); } }
注:增删改操作,需要添加事务
session.commit();