MyBatis基础
MyBatis快速入门
MyBatis相关API
MyBatis映射配置文件
MyBatis核心配置文件
MyBatis传统方式实现dao层
一、MyBatis快速入门
框架介绍
- 框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求!
ORM介绍
- ORM(Object Relational Mapping):对象关系映射
- 指的是持久化数据和实体对象的映射模式,为了解决面向对象与关系型数据库存在的互不L配的现象的技术。
mybatis介绍
回顾:
原始JDBC 的操作-查询
原始JDBC 的操作-查询
原始JDBC的操作问题分析
1.频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能。
2. sql语句在代码中硬编码,如果要修改sql语句,就需要修改java代码,造成代码不易维护。3.查询操作时,需要手动将结果集中的数据封装到实体对象中。
4.增删改查操作需要参数时,需要手动将实体对象的数据设置到sql语句的占位符。
原始JDBC的操作问题解决方案
1.使用数据库连接池初始化连接资源。
⒉将sql语句抽取到配置文件中。
3.使用反射、内省等底层技术,将实体与表进行属性与字段的自动映射。
mybatis介绍
- MyBatis是一个优秀的基于Java的持久层框架,它内部封装了JDBC,使开发者只需要关注SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建执行者等复杂的操作。
- MyBatis通过xml或注解的方式将要执行的各种Statement配置起来,并通过Java对象和Statement中SQL的动态参数进行映射生成最终要执行的SQL语句。
- 最后MyBatis框架执行完SQL并将结果映射为Java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对JDBC进行了封装,屏蔽了JDBCAPI底层访问细节,使我们不用与JDBCAPI打交道,就可以完成对数据库的持久化操作。
- MyBatis 官网:http://www.mybatis.org/mybatis-3/
mybatis 入门程序
1.数据准备
准备一个student 类
2.导入jar包
旧版本导入mybatis.jar 包,新版本添加依赖
3.在src 下创建映射配置文件
<?xml version="1.o"encoding="UTF-8"?><! DOCTYPE mapper
PUBLIC"-//mybatis.orgl/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="StudentMapper">
<select id="selectAll" resultType="com.itheima. bean.Student">
SELECT*FROM student
</select>
</mapper>
4.在src 下创建核心配置文件
<?xml version="1.o"encoding="UTF-8"?>
<! DOCTYPE mapper PUBLIC"-//mybatis.orgl/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager><dataSource type="POOLED">
<property name=" driver" value="com.mysal.jdbc.Driver">
<property name="url" value=" jdbc:mysql://192.168.59.143:3306/db”>
<property name="username" value="root"/>
<property name=" password" value="itheima”>
</ dataSource>
</ environment>
</environments>
<mappers>
<mapper resource="StudentMapper. xm1"/>
</mappers>
</configuration>
5编写测试类完成相关API 的使用
/*
查询全部
*/
public class StudentTest01{
public void selectAll() throws Exception {
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xm1");
//2.获取SqISession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder ().build(is);
//3.通过Sq1Session工厂对象获取sqiSession对象
SqlSession sq1Session = sqlSessionFactory.openSession() ;
//4.执行映射配置文件中的sql语句,并接收结果
List<Student> list = sqlSession.selectList("StudentMapper.selectAll");
//5.处理结果
for (Student stu : list){
System. out. print1n(stu);
}
6.运行测试查看结果
sqlSession.close();
is.close();
}
}
快速入门小结
二、MyBatis相关API
Resources
- org.apache.ibatis.io.Resources :加载资源的工具类。
public class StudentTest01{
public void selectAll() throws Exception {
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xm1");
注 .手动加载
//InputStream is = StudentTest01.class.getClassLoader().getResourceAsStream("MyBatisConfig.xm1")
SqlSessionFactoryBuilder
- org.apache.ibatis.session.SqlSessionFactoryBuilder :获取SqlSessionFactory工厂对象的功能类。
SqlSessionFactory
- org.apache.ibatis.session.SqlSessionFactory:获取SqlSession构建者对象的工厂接口。
SqlSession - org.apache.ibatis.session.SqlSession :构建者对象接口。用于执行SQL、管理事务、接口代理。
相关API小结 - Resources
加载资源的工具类。 - SqlSessionFactoryBuilder
获取SqlSessionFactory 工厂对象的功能类。 - SqlSessionFactory
获取SqlSession构建者对象的工厂接口。指定事务的提交方式。 - SqlSession
构建者对象接口执行SQL。
管理事务。接口代理。
三、映射配置文件
映射配置文件介绍
- 映射配置文件包含了数据和对象之间的映射关系以及要执行的SQL语句。
<?xml version="1.o"encoding="UTF-8"?>
// mybatis 的DTD约束
<! DOCTYPE mapper
PUBLIC"-//mybatis.orgl/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
// mapper:核心根标签
//namespace 属性 名称空间
<mapper namespace="StudentMapper">
// select: 查询功能的标签
// id 属性: 唯一的标识
//resultType 属性:指定结果映射对象的类型
//parameterType 属性:指定参数映射对象的类型
<select id="selectAll" resultType="com.itheima. bean.Student" >
SELECT * FROM student
</select>
</mapper>
查询功能
- < select> :查询功能标签。
- 属性
id:唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型。
resultType:指定结果映射的对象类型。 - SQL获取参数
#{属性名}
StudentMapper.xml
<?xml version="1.o"encoding="UTF-8"?>
// mybatis 的DTD约束
<! DOCTYPE mapper
PUBLIC"-//mybatis.orgl/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
// mapper:核心根标签
//namespace 属性 名称空间
<mapper namespace="StudentMapper">
// select: 查询功能的标签
// id 属性: 唯一的标识
//resultType 属性:指定结果映射对象的类型
//parameterType 属性:指定参数映射对象的类型
<select id="selectAll" resultType="com.itheima. bean.Student" >
SELECT * FROM student
</select>
<select id="selectById" resultType="com.itheima. bean.Student" parameterType ="java.long.Integer">
SELECT * FROM student where id = #{id}
</select>
</mapper>
/*
根据id查询
*/
@Test
public void selectById() throws Exception{
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xm1");
//2.获取SqISession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder ().build(is);
//3.通过Sq1Session工厂对象获取sqiSession对象
SqlSession sq1Session = sqlSessionFactory.openSession() ;
//4.执行映射配置文件中的sql语句,并接收结果
Student stu = sqlSession.selectList("StudentMapper.selectById",3);
//5.处理结果
System. out. print1n(stu);
6.运行测试查看结果
sqlSession.close();
is.close();
}
}
/*
查询全部
*/
public class StudentTest01{
public void selectAll() throws Exception {
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xm1");
//2.获取SqISession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder ().build(is);
//3.通过Sq1Session工厂对象获取sqiSession对象
SqlSession sq1Session = sqlSessionFactory.openSession() ;
//4.执行映射配置文件中的sql语句,并接收结果
List<Student> list = sqlSession.selectList("StudentMapper.selectAll");
//5.处理结果
for (Student stu : list){
System. out. print1n(stu);
}
6.运行测试查看结果
sqlSession.close();
is.close();
}
}
新增功能
- < insert> :新增功能标签。
- 属性
id :唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型。
resultType:指定结果映射的对象类型。(对于增删改 操作来说,我们的方法返回的都是int 类型影响行数,可以不写) - SQL获取参数
#{属性名}
StudentMapper.xml
<?xml version="1.o"encoding="UTF-8"?>
// mybatis 的DTD约束
<! DOCTYPE mapper
PUBLIC"-//mybatis.orgl/DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
// mapper:核心根标签
//namespace 属性 名称空间
<mapper namespace="StudentMapper">
// select: 查询功能的标签
// id 属性: 唯一的标识
//resultType 属性:指定结果映射对象的类型
//parameterType 属性:指定参数映射对象的类型
<select id="selectAll" resultType="com.itheima. bean.Student" >
SELECT * FROM student
</select>
<select id="selectById" resultType="com.itheima. bean.Student" parameterType ="java.long.Integer">
SELECT * FROM student where id = #{id}
</select>
<insert id="insert" parameterType ="com.itheima.bean.student">
insert into student values (#{id},#{name},#{age})
</insert>
</mapper>
/*
新增功能
*/
@Test
public void insert() throws Exception{
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xm1");
//2.获取SqISession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder ().build(is);
//3.通过Sq1Session工厂对象获取sqiSession对象
// SqlSession sq1Session = sqlSessionFactory.openSession