MyBatis学习-1
在学习Java后端的过程中,很重要的一部分就是要去操作数据库,实现持久层,我们最开始使用JDBC这样的工具去操作,后来会使用Spring封装的JdbcTemplate,但这些仅仅只能算是工具,和全自动映射ORM(Object Relation Mapping)框架的整体解决方案相比较还是差得远。 通常我们使用JDBC的操作流程为:
- 编写sql
- 预编译
- 设置参数
- 执行sql
- 封装结果
当我们使用ORM方式的时候,只需要创建好JavaBean,和操作DbRecords就好了中间的部分呢框架来实现,就是我们代码中的实现类,和数据库中的表一一对应的意思啦,当然他有他的缺点,因为所有的操作都是框架来实现,所以你不能对他进行优化,一些复杂的sql语句也得自己去定制,所以呢我们希望sql交给开发人员,希望sql不失去灵活性,所以我们使用Mybatis,编写sql语句放到我们的配置文件当中去,剩下的让框架自己去执行,这样既不少灵活性,又可以方便很多,sql与java编码分离。
Hello World
接下来我们用Mybatis写一个Test,首先我们先去创建一个数据库名字叫做mybatis然后去添加一个table
CREATE TABLE `tbl_employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(255) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
在表中添加一条记录id=1,剩下的随便写了 — 创建一个持久层的类与数据库中的表,属性和表中的列对应:
package com.snake_lvyonghao.MyBatis.bean;
public class Employee {
private Integer id;
private String Lastname;
private String email;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastname() {
return Lastname;
}
public void setLastname(String lastname) {
Lastname = lastname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", Lastname='" + Lastname + '\'' +
", email='" + email + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
下面写一个MyBatis的Demo
package com.snake_lvyonghao.MyBatis.test;
import com.snake_lvyonghao.MyBatis.bean.Employee;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class MyBatistest {
@Test
public void test() throws IOException {
String resource = "Mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//获取sqlSession实例,能直接执行已经映射的sql语句
SqlSession opensession = sqlSessionFactory.openSession();
//两个参数,sql的唯一标示,执行sql的参数
try {
Employee e = opensession.selectOne("org.mybatis.EmployeeMapper.selectEmp",1);
System.out.println(e);
}finally {
opensession.close();
}
}
}
当然配置文件我也准备好了,直接在工程文件中的resource文件夹当中添加就好了 Mybaits-config.xml: 和JDBC一样设置Diviver,数据库的位置,用户名,密码,还有很重要的一点就是设置mapper resource,就是你的sql映射文件
<?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://localhost:3306/mybatis?userSSL=FALSE"/>
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="EmployeeMapper.xml"/>
</mappers>
</configuration>
EmployeeMapper(sql映射文件): 在Mapper文件当中我们要设置他的namespace,设置这个映射文件的唯一标示,还有他的返回类型,在这里我们是持久层的操作所以返回类型就是一个Employee类了,要写上这个类的路径,最后设置好你的sql语句就ok了 其中的#{id} 和JDBC当中的?和是一样的就是一个占位符。
<?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="org.mybatis.EmployeeMapper">
<!--
namespace名称空间
id唯一标示
resultType,返回值类型
#{id}从传递过来的参数中取出id值-->
<select id="selectEmp" resultType="com.snake_lvyonghao.MyBatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>
</mapper>
run一下我们可以看到他给出的结果:Employee{id=1, Lastname='tom', email='tom@atguigu', gender='0'}
这个结果正是我在数据库当中添加的id=1的那一条记录
总结
/**
* 1.根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象
* 有一些数据源运行信息
* 2.sql映射文件;配置可每一个sql,以及sql的封装规则,
* 3.将sql映射文件注册在全局配置文件当中
* 4.写代码
* 1)根据全局配置文件得到SqlSessionFactory
* 2)使用sqlSession工厂,获取到sqlSession对象使用它来执行增删改查
* 一个sqlSession就是代表和数据库的一次会话,用完关闭
* 3)使用sql的唯一标示告诉MyBatis执行那个sql,sql都保存在映射文件当中
*/
最后再放上这个Demo的代码SSM框架源码中的MyBatis文件就是我们的项目了,祝大家在学习MyBatis中旗开得胜