MyBatis介绍
Mybatis是一款优秀的持久层框架
特征:
- 支持自定义SQL(非自定义SQL:hebineate),储存过程以及高级映射
- Mybatis解决JDBC代码以及设置参数和获取结果集的工作
- Mybatis通过XML或注解来配置和映射原始类型,接口和Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
JDBC
JDBC编程
引入jar:通过maven:mysql-connector-java
JDBC编程步骤:
1、加载MYSQL驱动:com.mysql.jdbc.Driver
2、连接数据库(url、name、passwd) DriverManager.getConnection获取Connection对象实例
3、获取Statement对象:Connection.createStatement
4、可以进行CRUD操作
5、查询操作:返回ResultSet结果集进行处理
6、关闭资源
JDBC存在的问题
有: 每次加载连接,驱动硬编码,每次获取链接,连接信息硬编码,sql和Java代码存在耦合,结果集中的数据类型需要判断,列名需要主动判断,每次都要关闭资源
解决方案:
1、在JDBC编程操作数据库前进行连接,操作后需要关闭子连接,频繁的连接释放在大的并发量影响系统性能—>连接池(连接复用)
2、SQL语句硬编码在java代码中,需求改变进而会改变java代码本身---->将SQL和java代码分离,将SQL语句放在配置文件(xml),需求改变只需要修改配置文件即可
3、返回结果集存在硬编码---->将数据库中的数据映射成java对象
MyBatis原理
MyBatis的使用
引入依赖
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
全局配置文件
<?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">
<!--id:环境的唯一标识-->
<environment id="development">
<!--事务管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--数据源类型-->
<dataSource type="POOLED">
<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>
</environments>
</configuration>
PoJo类:
/**
* 和数据库中的STudent表对应
*/
public class Student {
private Integer SID;
private String Sname;
private String Ssex;
private Integer Sage;
//省略的getter和setter方法
}
Mapper接口文件(StudentMapper.java)样式
public interface StudentMapper {
public Student selectStudentById(Integer id);
}
配置mapper.xml文件(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">
<!--mapper根标签 namespace,命令空间:保证命名空间唯一,一般是对应的mapper.java的包全路径-->
<mapper namespace="com.cc.mapper.StudentMapper">
<!--
selectStudentById
select * from Student where SID = XXX
-->
<!--
select标签:查询操作
id属性:statement的id,用于表示定义的SQL,在同一个命名空间中id是不允许重复的
#{
XXX}:输入参数的占位符,避免SQL注入
parameterType:输入参数类型
resultType:指定结果集类型
-->
<select id="selectStudentById" parameterType="int" resultType="com.tulun.pojo.Student" >
select * from Student where SID = #{
id}
</select>
</mapper>
修改全局配置文件:
<!--引入mapper配置文件-->
<mappers>
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
执行查询操作:
//mybatis的配置文件
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过反射机制来获取到mapper实例
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student student = mapper.selectStudentById(10);
System.out.println(student);
} catch (IOException e) {
e.printStackTrace();
}
MyBatis配置详解
<