本次学习目标
- 同过上一篇的Maven学习,本次希望能够使用Maven管理项目。
- 要求能够创建Mybatis工具类、核心配置文件的配置。
- 最后能够通过Mybatis操作mysql数据库。
MyBatis 本是 Apache 的一个开源项目iBatis,2010年迁移到了google,并改名为MyBatis 。2013年11月迁移到Github。
MyBatis 是一款优秀的持久层框架,主要用于简化JDBC 开发
- JavaEE三层架构:表现层、业务层、持久层
javaWeb开发必要的三层架构,后期会着重记录学习笔记。
自从用了MyBatis后,说实话,JDBC配置要背的步骤太多太繁琐,大概有一下两点:
JDBC硬编码:
- 注册驱动、获取连接
字符多且繁琐,mysql还好说,换成其他关系型数据库就头疼。
- SQL语句
语句后期改进麻烦,且容易有sql注入的风险
JDBC操作繁琐:
- 手动设置参数
- 手动封装结果集
MyBatis的优化
- 硬编码可以配置到配置文件
- 操作繁琐的地方mybatis都自动完成
创建Maven工程无需太多言语,多创建几次就娴熟了,直接上图。
Maven工程需要在pom.xml文件中进行导包,且只需要输入对应包的坐标即可,当然租后需要看对应工程导包是否一致,直接上图。
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.22version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.5version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
编写 MyBatis 核心配置文件 – > 替换连接信息 解决硬编码问题
mybatis-config.xml文件内容如下:
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
settings>
<typeAliases>
<package name="com.example.pojo"/>
typeAliases>
<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:///mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<package name="com.example.mapper"/>
mappers>
configuration>
编写 MyBatis 工具类 – > 读取核心配置文件,辅助连接配置参数 解决硬编码问题
MyBatis.java工具类如下
package com.example.util;
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 java.io.IOException;
import java.io.InputStream;
public class MyBatisUtils {
private static SqlSessionFactory factory = null;
static {
// 1.读取核心配置文件,获得输入流
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
// 2.创建会话工厂创建类
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 3.根据输入流,创建会话工厂
factory = builder.build(inputStream);
}
/**
* 功能:获取会话对象
*
* @param commit true为自动提交sql语句,false为手动,需要主动调用commit()
* @return SqlSession 会话对象
*/
public static SqlSession getSqlSession(boolean commit) {
// 4.得到会话对象
SqlSession sqlSession = factory.openSession(commit);
return sqlSession;
}
}
点击IDEA右边框的 Database
,在展开的界面点击 +
选择 Data Source
,再选择 MySQL
最后鼠标右键点击选择如下,即可打开sql语句编辑文件,创建数据库和表等操作。
准备环节
数据库表(tb_user)及数据准备
-- 数据库名要和核心配置文件的数据库名相同
create database mybatis;
use mybatis;
-- 删除tb_brand表
drop table if exists tb_user;
-- 创建tb_brand表
create table tb_user
(
-- id 主键
id int primary key auto_increment,
-- 新名
`name` varchar(20),
-- 年龄
`age` int,
-- 性别
sex varchar(1),
-- 职位
position varchar(100)
);
-- 添加数据
insert into tb_user (`name`, `age`, sex, position)
values ('高启强', 35, '男', '强盛集团董事长'),
('高启盛', 25, '男', '小灵通专卖店店长'),
('高启兰', 15, '女', '医生'),
('安欣', 35, '男', '京海市警察局刑警'),
('唐小龙', 35, '男', '强盛集团高管'),
('唐小虎', 35, '男', '强盛集团高管'),
('赵立冬', 51, '男', '京海市委常委政法委书记'),
('孟德海', 49, '男', '京海市副市长市公安局局长'),
('安长林', 50, '男', '京海市公安局常务副局长');
MyBatis使用注解的方式进行操作数据库,是一种非常便捷且直观的速写方式。这种方式省略确了XML文件的配置,不过这种方式主要针对于比较简单的事务操作,且效率相对来水较高。但最后再做项目的时基本不怎么建议使用注解的方式进行开发。格式:@Select(“select * from tb_user”)
UserMapper接口文件,也是三大架构中的持久层
然后在测试类中进行测试,首先需要获取MyBatis工具类提供的会话工厂方法,然后根据会话工厂得到UserMapper代理对象,最后用代理对象进行事务操作。
XML书写SQL语句相对于注解的方式,多了动态sql的书写,其中有if、foreach、choose、where、set等。当然还能将查询结果映射到pojo的实体类中。
首先最好安装一下MyBatis插件
然后创建实体类映射文件,映射文件创建在如下图,且报名和类名都要和UserMapper接口保持统一。
XML书写格式如下,其中具体要求根据对应注释看就可以。
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.mapper.UserMapper">
<update id="DeleteByIds">
delete from tb_user where id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
foreach>
update>
mapper>
对于MyBatis的使用情况来说,具体总结有以下两点: