一、认识mybatis
持久层:Dao层
持久化:将数据由瞬时状态转成持久状态的过程
- 优点:
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。
搭建mabatis环境:
二、搭建MyBatis环境
- 新建父项目–》新建子模块
- 导入mybatis依赖(pom.xml)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
- 编写mybatis核心配置文件mybatis-config
<?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">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${com.mysql.cj.jdbc.Driver}"/>
<property name="url" value="${jdbc:mysql://127.0.0.1:3306/myschool?&useSSL=false&serverTimezone=Asia/Shanghai}"/>
<property name="username" value="${root}"/>
<property name="password" value="${123456}"/>
</dataSource>
</environment>
</environments>
</configuration>
- 解析配置文件获取sqlsession —》MybatisUtil
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
// 通过SqlSessionFactoryBuilder解析mybatis-config.xml 得到 SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 获取SqlSession,操作sql
* @return
*/
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
- junit测试
@Test
public void testSqlSession(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
System.out.println(sqlSession);
System.out.println("连接成功!");
}
6.连接成功
7. 数据库连接配置文件
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/myschool?&useSSL=false&serverTimezone=Asia/Shanghai
username=
password=123456
- 编写pojo、dao、service层
/**
* 获取学生信息
* @return
*/
List<Student> getStuList();
- dao层的实现类
.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="com.qiku.mybatisstuby.dao.StudentMapper">
<!-- id="方法名" resultType="返回值类型路径"-->
<select id="getStuList" resultType="com.qiku.mybatisstuby.pojo.Student">
select * from Student
</select>
</mapper>
- sql配置文件
database.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/myschool?&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=123456
- 将mapper文件注册到mybatis-config文件
<?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"/>
<typeAliases>
<!-- 精确查找-->
<!-- <typeAlias alias="Student" type="com.qiku.mybatisstuby.pojo.Student"/>-->
<!-- 包名查找-->
<package name="com.qiku.mybatisstuby.pojo"/>
</typeAliases>
<!-- 多套运行环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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="com/qiku/mybatisstuby/dao/StudentMapper.xml"/>-->
<!-- 包名查找-->
<package name="com/qiku/mybatisstuby/dao"/>
</mappers>
</configuration>
- junit测试
@Test
public void getStuList(){
SqlSession sqlSession= MybatisUtil.getSqlSession();
//StudentMapper接口,获取实例对象
StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
List<Student> studentList=studentMapper.getStuList();
for (Student student : studentList) {
System.out.println(student.getStudentName()+","+student.getGradeId());
}
//关闭
sqlSession.close();
}