MyBatis
1. 什么是MyBatis?
MyBatis 是一款优秀的持久层[数据访问层]框架,对原始的JDBC技术的封装,可以帮助我们快速的链接和访问数据库。
2. 为什么要使用MyBatis?
MyBatis支持定制化SQL、存储过程以及高级映射。MyBatis几乎避免了所有的JDBC代码和手动获取参数以及获取结果集。
3. 什么是ORM?
ORM[对象关系映射]---我们在访问数据库的时候所编写的都是Java程序,Java程序只认识Java对象,而我们所访问的数据库大多数都是关系型数据库,那么这时Java程序要想访问关系型数据库,那么就需要将Java对象转换成关系型数据,才能被数据库认识。这时我们可以认为一个Java类就是关系型数据库中的一张数据表,Java类中的成员变量是数据库表中的一个列,Java类创建的Java对象就是数据库表中的一行记录。这时将Java对象对应成为数据库表记录的过程就是对象关系映射【ORM】。
ORM的优点:当我们使用Java程序控制Java对象的时候,数据库中的数据表记录会随之变化。
4. MyBatis的工作原理?
5. MyBatis的核心对象?
sqlSessionFactory
sqlSessionFactory使用来创建sqlSession,由于sqlSessionFactory是一个接口,所以不能new,需要子类sqlSessionFactoryBuilder。同时这个对象中保存着读取到的核心配置文件【mybatis-config.xml】中的信息【1.数据源 2.SQL映射文件】。
sqlSessionFactory sqlSessionFactory = new sqlSessionFactoryBuilder().build(inputStream);
sqlSession
sqlSession对象表示的是与数据库之间的一个连接(会话)。通过该对象可以对数据库进行CRUD操作。在使用的时候必须要指定需要执行的到底是哪个Mapper文件中的SQL。
sqlSession对象提供的常用方法:
1.insert(statement, parameter):添加数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
2.update(statement, parameter):修改数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
3.selectOne(statement, parameter):查询一个数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
4.session.selectList(statement):查询所有数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
5.delete(statement, parameter):删除数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
6.getMapper(class):得到数据访问接口对象
参数1【Class】:被获取的数据访问接口的反射对象
7.commit():提交执行
8.close():关闭sqlsession
public class MyTest2 {
/**
* 测试添加
*/
@Test
public void testInsertPerson(){
SqlSession session=null;
try{
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession接口对象【有增删该查方法】
session=sqlSessionFactory.openSession();
Person person=new Person();
person.setPername("zhangsan");
person.setPerage(23);
person.setPeraddress("西安");
int temp=session.insert("com.click369.mybatis.mapper.PersonMapper.insertPerson", person);
System.out.println("temp="+temp);
//提交执行
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
}
/**
* 测试修改
*/
@Test
public void testUpdatePerson(){
SqlSession session=null;
try{
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession接口对象【有增删该查方法】
session=sqlSessionFactory.openSession();
Person person=new Person();
person.setPerid(1);
person.setPername("lisi");
person.setPerage(23);
person.setPeraddress("西安");
int temp=session.update("com.click369.mybatis.mapper.PersonMapper.updatePerson", person);
System.out.println("temp="+temp);
//提交执行
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
}
/**
* 测试根据id查询
*/
@Test
public void testSelectPersonById(){
SqlSession session=null;
try{
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession接口对象【有增删该查方法】
session=sqlSessionFactory.openSession();
Person person=session.selectOne("com.click369.mybatis.mapper.PersonMapper.selectPersonById", 1);
System.out.println("person.name="+person.getPername());
//提交执行
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
}
/**
* 测试查询所有
*/
@Test
public void testSelectPerson(){
SqlSession session=null;
try{
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession接口对象【有增删该查方法】
session=sqlSessionFactory.openSession();
List<Person> personList=session.selectList("com.click369.mybatis.mapper.PersonMapper.selectPerson");
System.out.println("personList.size="+personList.size());
//提交执行
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
}
/**
* 测试根据id删除
*/
@Test
public void testDeletePersonById(){
SqlSession session=null;
try{
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession接口对象【有增删该查方法】
session=sqlSessionFactory.openSession();
int temp=session.delete("com.click369.mybatis.mapper.PersonMapper.deletePersonById", 1);
System.out.println("temp="+temp);
//提交执行
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
}
}
6. MyBatis相关的配置文件
MyBatis核心配置文件
通常情况下核心配置文件的文件名是mybatis-config.xml,也可以自己起名字。
文件存放位置:
1.普通的Eclipse创建的java工程,一般都保存在src目录下。
2.普通的Eclipse创建的javaWeb工程,一般都保存在src目录下,也可以保存在WEB-INF目录下
3.普通的Eclipse创建的Maven的java工程,一般都保存在src/main/resources目录下。
4.普通的Eclipse创建的Maven的javaWeb工程,一般都保存在src/main/resources目录下,也可以保存在WEB-INF目录下。
<?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="myjdbc.properties"></properties>
<!-- 配置mybatis默认的连接数据库的环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事物管理器 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${mydriver}"/>
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
</environment>
</environments>
<!-- 配置MyBatis数据访问接口的SQL映射文件路径 -->
<mappers>
<!-- 如果SQL映射文件在数据访问接口包中 -->
<!-- <package name="com/click369/mybatis/mapper/PersonMapper.xml"/> -->
<!-- 如果SQL映射文件在src/main/resources中 -->
<mapper resource="PersonMapper.xml"/>
</mappers>
</configuration>
核心配置文件中元素:
1.<configuration>根元素
2.<properties>元素-----配置引入其他的资源文件【.properties】,通过提供的resource属性引入
例如:资源文件【.properties】与本配置在同一个文件夹中【resource=”xxxx.properties”】
资源文件【.properties】与本配置不在同一个文件夹中 【resource=”xxxx/xxxx.properties”】
<properties resource="dbconfig.properties"></properties>
<properties resource="config/dbconfig.properties"></properties>
3.<environments>元素-----配置mybatis默认的连接数据库的环境
default属性:默认值是development
4.<environment>元素-----配置具体的某一个数据库环境,它是<environments>元素的子元素
id属性:默认值是development
5.<transactionManager>元素-----配置默认的事务管理器
type属性:配置事物管理器类型
JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。
6.<dataSource>元素-----配置具体数据库链接的元素,是<environment>元素的子元素
type属性:数据源类型[配置是否使用数据连接池机制管理数据库链接]
UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。 不同的数据库在这方面表现也是不一样的,所以对某些数据库来说使用连接池并不重要,这个配置也是理想的。
POOLED– 这种数据源的实现利用“