MyBatis基础
什么是MyBatis?
MyBatis是ssm三大框架之一,是一个可以自定义sql、存储过程和高级映射的持久层(Dao)框架。
为什么要使用MyBatis而不使用JDBC?
-
原始JDBC的操作问题分析:
- 频繁的创建和销毁数据库的连接会造成资源的浪费从而影响系统的性能
- sql语句在代码中硬编码,如果我们要更改sql,就需要更改Java代码,后期维护较麻烦
- 每次做查询操作时,都需要把数据封装到实体类中
- 进行增删改操作需要参数的时候,需要手动的将实体类中的数据设置到对应的sql占位符
-
解决方案:
- 使用数据库连接池初始化连接的资源
- 将sql语句写到配置文件当中
- 使用反射、内省等技术将实体类和表进行属性和字段自动映射
MyBatis入门程序
-
导入Jar包
-
创建核心配置文件(MyBatisConfig.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">
-
配置核心配置文件的信息
<environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"></property> <!--连接信息--> <property name="url" value="jdbc:mysql://localhost:3306/userdb" ></property> <!--数据库账号--> <property name="username" value="root"></property> <!--数据库密码--> <property name="password" value="root"></property> </dataSource> </environment> </environments> <mappers> <mapper resource="StudentMapper.xml"></mapper> </mappers> </configuration>
-
创建映射配置文件(StudentMapper.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">
-
创建一个Student的实体类
package com.mybatis.domain; public class Student { private int id; private String name; private int age; public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public Student() { } 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
-
在映射配置文件中写入查询所有学生的sql语句
<mapper namespace="StudentMapper"> <select id="selectAll" resultType="com.mybatis.domain.Student"> select * from student </select> </mapper>
-
创建Test类写Java代码
/** * 查询所有学生信息 * @throws Exception */ @Test public void selectAll() throws Exception { //通过Resources载入配置文件 InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml"); //创建SqlSessionFactoryBuilder对象,返回一个SqlSessionFactory SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(is); //通过sqlSessionFactory.openSession获得sqlSession(重要) SqlSession sqlSession = sqlSessionFactory.openSession(); //通过sqlSession返回一个List集合 List<Student> list = sqlSession.selectList("StudentMapper.selectAll"); //遍历集合 for (Student student : list) { //处理结果 System.out.println(student); } //释放资源 sqlSession.close(); is.close(); }
Resources
-
org.apache.ibatis.io.Resources:加载资源的类
-
核心方法
返回值 方法名 说明 InputStream getResourceAsStream(String fileName) 通过类加载器返回指定资源的字节输入流
SqlSessionFactoryBuilder
-
org.apache.ibatis.session.SqlSessionFactoryBuilder:获取SqlSessionFactory工厂对象的功能类
-
核心方法
返回值 方法名 说明 SqlSessionFactory Build(InputStream is) 通过指定资源字节输入流获取SqlSession工厂对象
SqlSessionFactory
-
org.apache.ibatis.session.SqlSessionFactory:获取SqlSession构建者对象的工厂接口
-
核心方法
返回值 方法名 说明 SqlSession openSession() 获取SqlSession构建者对象,并开启手动提交事务(false) SqlSession openSqlSession(boolean autoCommit) 获取SqlSession构建者对象,如果参数为true,则自动提交事务
SqlSession(重要)
-
org.apache.ibatis.session.SqlSession:构建者对象接口。用于执行sql、管理事务、接口代理
-
核心方法
返回值 方法名 说明 List selectList(String statement,Object paramter) 执行查询sql语句,返回一个List集合 T selectOne(String statement,Object paramter) 执行查询sql语句,返回一个结果对象 int insert(String statement,Object paramter) 执行添加sql语句,返回影响行数 int update(String statement,Object paramter) 执行修改sql语句,返回影响行数 int delete(String statement,Object paramter) 执行删除sql语句,返回影响行数 void commit() 提交事务 void rollback() 回滚事务 T getMapper(Class cls) 获取指定接口的代理实现类对象 void close() 释放资源
MyBatis映射配置文件介绍
-
映射配置文件就是数据和对象之间的映射关系以及要执行的sql语句
-
标签介绍
<?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属性:名称空间(可以理解为标识) --> <mapper namespace="com.mybatis.mapper.StudentMapper"> <!--select:查询功能的标签 id:唯一标识 resultType:要封装到哪个对象中 parameterType:指定参数为什么类型 --> <select id="selectAll" resultType="student" parameterType="student"> select * from student </select> </mapper>
起别名
-
因为每次在配置文件中写具体路径较为麻烦,所以我们需要取别名
-
typeAliases:起别名的标签
-
typeAlias:具体给哪个路径取别名
-
type:路径
-
alias:所取名称
<!--起别名--> <typeAliases > <typeAlias type="com.mybatis.domain.Student" alias="student"></typeAlias> </typeAliases>
-
-
效果
<select id="selectAll" resultType="student" parameterType="student"> select * from student </select>
LOG4J的使用
-
在日常开发中,在排查问题时我们难免需要输出MyBatis真正执行的sql语句、参数、结果等信息,我们可以利用LOG4J的功能来实现执行信息的输出
-
把log4j.properties文件复制在src中
-
在核心配置文件中配置LOG4J
<!--配置LOG4J--> <settings> <setting name="logImpl" value="log4j"/> </settings>
MyBatis核心配置文件介绍
-
核心配置文件包含了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> <!--引入数据库连接配置文件--> <properties resource="jdbc.properties"></properties> <!--配置LOG4J--> <settings> <setting name="logImpl" value="log4j"/> </settings> <!--起别名--> <typeAliases > <typeAlias type="com.mybatis.domain.Student" alias="student"></typeAlias> </typeAliases> <!--默认使用mysql标识--> <environments default="mysql"> <!--标识--> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"></property> <!--连接信息--> <property name="url" value="${url}" ></property> <!--数据库账号--> <property name="username" value="${username}"></property> <!--数据库密码--> <property name="password" value="${password}"></property> </dataSource> </environment> </environments> <!--mappers:引入映射配置文件--> <mappers> <!--mapper:引入指定的映射配置文件--> <mapper resource="StudentMapper.xml"></mapper> </mappers> </configuration>
properties数据库连接配置文件引入
-
因为在日常开发中,我们数据库的连接信息一般都是放在一个独立的文件中。
driver:com.mysql.jdbc.Driver url:jdbc:mysql://localhost:3306/userdb username:root password:root
-
在核心配置文件中引入数据库连接配置文件
- properties:引入数据库的配置文件信息
- resource:数据库连接配置文件路径
- ${键名}:获取properties配置文件的数据库连接参数
<!--引入数据库连接配置文件--> <properties resource="jdbc.properties"></properties> <!--默认使用mysql标识--> <environments default="mysql"> <!--标识--> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"></property> <!--连接信息--> <property name="url" value="${url}" ></property> <!--数据库账号--> <property name="username" value="${username}"></property> <!--数据库密码--> <property name="password" value="${password}"></property> </dataSource> </environment> </environments>