MyBatis 是一款优秀的持久层框架,用于简化JDBC开发,解决了原生JDBC硬编码和手动封装结果集的问题。
JavaEE的三层架构分为Controller(表现层)、Service(业务层)、Mapper(持久层)。
持久层负责将数据保存到数据库的那一层代码。使用了Mybatis框架我们会将操作数据库的Java代码作为持久层。
create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
gender char(1),
addr varchar(30)
);
INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
创建day04-mybatis模块,在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标
org.mybatis
mybatis
3.5.6
mysql
mysql-connector-java
5.1.46
junit
junit
4.13
test
在 com.practice.pojo
包下创建和表对应的 User类
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
//省略了 setter 和 getter
}
在resources中编写mybatis-config.xml配置文件,配置数据库的连接信息,在mybatis官网复制即可。
1、在mapper包中编写UserMapper接口,在接口中编写查询所有的方法,并配置SQL语句
public interface UserMapper {
/**
* 查询所有用户信息
* @Select:定义查询语句的注解,参数为SQL语句
*/
@Select("select * from tb_user")
List selectAll();
}
2、在mybatis-config.xml核心配置文件中加载映射配置文件
核心配置文件中的内容,在使用spring框架后可以全部写到spring中的配置文件
public class MybatisTest {
@Test
public void testSelectAll() throws IOException {
//1 加载核心配置文件,获取 SqlSessionFactory对象,mybatis官网复制即可
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2 获取 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3 获取Mapper接口代理对象。
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//4 执行方法,获取结果
List list = userMapper.selectAll();
//5 处理结果,释放资源
list.forEach(user -> System.out.println(user));
sqlSession.close();
}
}
步骤:
环境搭建--->核心配置文件--->Mapper接口和SQL--->单元测试方法
核心配置文件作用:
1、配置连接数据库环境信息。
2、通过扫包加载和mapper接口和SQL
里面的代码在使用spring框架后,也可以大部分简化。
1、核心配置文件顺序图片
2、md文档中对应的解释
/**
* 添加用户信息
* @param user
*/
@Insert("insert into tb_user values(null,#{username},#{password},#{gender},#{addr})")
void add(User user);
@Test
public void testAdd() throws IOException {
//1 加载核心配置文件,获取 SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2 获取 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3 获取Mapper接口代理对象,
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//4 调用方法,得到结果
User user=new User();
user.setUsername("张益达");
user.setPassword("123");
user.setAddr("湖北武汉");
user.setGender("男");
userMapper.add(user);
//5 处理结果,释放资源
sqlSession.commit(); //提交事务*****
sqlSession.close();
}
1、对于新增我们需要进行事务管理,怎么做?
openSession():默认开启事务,进行增删改操作后需要使用 sqlSession.commit(); 手动提交事务
openSession(true):可以设置为自动提交事务(关闭事务)
2、修改和删除也要进行事务管理。
5.1、参数占位符:#{}:执行SQL时,会将#{}占位符替换为?,将来自动设置参数值
5.2、增删改需要提交事务,可以设置自动提交事务。