目的:入门,熟悉mybatis是什么,怎么用。
1. 初识Mybatis
1.1 Mybatis介绍
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀基于Java的持久层框架
。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
与hibernate相比:
特点:
1.开源持久层框架
2.灵活--sql语句与代码分离,面向配置的编程
3.良好支持复杂数据映射,动态sql
4.学习成本低
2. Mybatis快速入门
2.0 Jar包下载
mybatis官网下载
mybaits里面jar包分为两类,一类是mybatis本身 jar,另一类是依赖的ajr.
mybatis文档查看
mybatis-spring
2.1开发环境搭建
1.创建测试项目:
2.添加相应的包:
3.创建数据库和表
CREATE database mybatis;
USE mybatis;
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
NAME varchar(20) DEFAULT NULL,
age int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
INSERT INTO users(NAME, age) VALUES('Demo', 27);
INSERT INTO users(NAME, age) VALUES('Collin', 28);
⚠️:此数据表中编码为latin1,默认编码---未做修改,一般设置为utf-8;
2.2 使用MyBatis查询表中的数据
0.mybatis工作流程
1.读取配置文件
2.生成sqlSessionFactory
3.建立sqlSession
4.调用mybatis提供的API
5.查询mapper配置文件
6.返回结果
7.关闭sqlSession
1.添加Mybatis的配置文件config.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">
<!-- 设置 -->
<configuration>
<!-- 和spring整合之后environments配置将废除 -->
<!--配置环境 -->
<environments default="development">
<!-- 环境变量 -->
<environment id="development">
<!-- 事务管理 -->
<transactionManager type="JDBC" />
<!--配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 注册userMapper.xml文件, userMapper.xml位于cn.it.my.mapping这个包下,
所以resource写成cn/it/my/mapping/userMapper.xml -->
<mappers>
<!-- 映射器 -->
<mapper resource="cn/it/my/mapping/userMapper.xml" />
</mappers>
</configuration>
2.定义表所对应的实体类
Users.java
package cn.it.my.domain;
public class User {
private int id;
private String name;
private int age;
public User() {
super();
}
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 "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
3.定义操作users表的sql映射文件userMapper.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="cn.it.my.mapping.userMapper"就是cn.it.my.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="cn.it.my.mapping.userMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为findUserById,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="cn.it.my.domain.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类
-->
<!-- 根据id查询得到一个user对象-->
<select id="findUserById" parameterType="int"
resultType="cn.it.my.domain.User">
select * from users where id=#{id}
</select>
</mapper>
4.在config.xml文件中注册userMapper.xml文件
<!-- 注册userMapper.xml文件, userMapper.xml位于cn.it.my.mapping这个包下,
所以resource写成cn/it/my/mapping/userMapper.xml -->
<mappers>
<!-- 映射器 -->
<mapper resource="cn/it/my/mapping/userMapper.xml" />
</mappers>
5.测试代码:
public class Test {
public static void main(String[] args) throws Exception {
// 第一步:根据mytais的配置创建SqlSessionFactory------加载mybatis的配置文件
String resource = "mybatis.xml";
// 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
// InputStream is =
// Test.class.getClassLoader().getResourceAsStream(resource);
InputStream is = Resources.getResourceAsStream(resource);
// 根据,mybatis配置创建sqlSessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
// 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
// Reader reader = Resources.getResourceAsReader(resource);
// 构建sqlSession的工厂
// SqlSessionFactory sessionFactory = new
// SqlSessionFactoryBuilder().build(reader);
// 第二步:根据SqlSessionFactory创建能执行映射文件中sql的sqlSession
SqlSession sqlSession = sessionFactory.openSession();
// 第三步:通过SqlSession操作数据库(根据用户id查询一条记录)
/**
* 通过sqlSession查询用户信息(发起数据库操作)
* 第一个参数statement:指定mapper映射文件中statement的id,指定时需要前边加上statement所属的命名空间
* 第二个参数parameter。指定输入参数
* selectOne返回时单条记录,如果色了传统返回多条记录(list集合),使用selectOne会报错
* 根据映射文件中的resultType指定输出类型
*
* 映射sql的标识字符串,
* cn.it.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
* findUserById是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
// 映射sql的标识字符串
// String statement = "cn.it.my.mapping.userMapper.getUser";
// 执行查询返回一个唯一user对象的sql
// User user = sqlSession.selectOne(statement, 1);
User user = sqlSession.selectOne("cn.it.my.mapping.userMapper.findUserById", 3);
// 第四步:遍历查询结果
System.out.println(user);
/*
* selectlist,查询集合
* 查询用户列表
* selectList表示查询一个结果集(可以是多条。也可以是一条)
*/
List<User> list= sqlSession.selectList("test.findUserList","张");
// 第五步:
sqlSession.close();
}
}
mybatis核心组件:
1.SqlSessionFactoryBuilder:构造器,根据配置信息或者代码来生成
2 SqlSessionFactory(工厂接口)
3.SqlSessionFactory:依赖工厂来生成SqlSession(会话)
4.SqlSession:既可以返送sql去执行并返回结果,又可以获取Mapper的接口
5.SqlMapper:由Java接口和XML文件共同构成,需要给出对应的sql和映射规则,负责发送sql去执行并返回结果
开发规范:
1.在mapper.xml中namespace等于mapper接口地址
2.mapper.java接口中的方法名和mapper.xml中statement的id一致
3.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致
4.mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致
作用:
定义参数类型
描述缓存
描述SQL语句
定义查询结果和POJO的映射关系
6.执行结果: