1、mybatis是什么
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
官方中文文档:https://mybatis.org/mybatis-3/zh/index.html
2、入门
2.1、了解mybatis的几个核心对象
1、SqlSessionFactoryBuilder:加载配置,构建SqlSessionFactory
2、SqlSessionFactory:从连接或数据源中创建一个sqlsession
3、SqlSession: 真正的执行者,使用Mybatis的主Java接口。通过此接口,您可以执行命令,获取映射器和管理事务。
2.2、理解框架执行流程
1、加载并解析mybatis的配置资源
2、使用SqlSessionFactoryBuilder装置配置并构建SqlSessionFactory
3、使用SqlSessionFactory获取SqlSession
4、操作mapper接口
2.3、搭建mybatis项目
1、引入依赖:
本次项目使用mysql5.7
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
2、创建mybatis-config.xml配置文件
mysql.properties数据库配置信息:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.0.100:3306/fagejiang?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&tinyInt1isBit=false&useSSL=false
username=fagejiang
password=fagejiang
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>
<!-- 引入外部配置文件 -->
<properties resource="mybatis/mysql.properties"/>
<environments default="development">
<environment id="development">
<!-- 事务管理器的类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据库的基本信息 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 引入 mapper接口,被mybatis装载和代理 -->
<mappers>
<!-- 指定接口的方式引入,主要是解决@Select方式 -->
<mapper class="com.fagejiang.dao.UserInfoDao"/>
<!-- 指定配置文件的方式引入 ,主要是解决XML方式 -->
<!-- 如果XML的namespace中的接口已被指定,mybatis内部自动会装配 -->
<mapper resource="mappers/UserInfoDao.xml"/>
<mapper resource="mappers/UserInfoMapper.xml"/>
</mappers>
</configuration>
3、mapper接口
/**
* TODO UserInfoDao 接口
*
* @author LinFH
* @version 1.0
* @date 2021-03-09 9:24
*/
public interface UserInfoDao {
// 采用注解的方式 编写sql。 Map<String, Object>可以修改为UserInfoVO,mybatis自动识别
// 这种方式,在mybatis的配置文件中只需要引入 该接口即可。
@Select("select user_code AS userCode, url, user_name AS userName, password FROM user_config WHERE user_code = #{userCode}")
Map<String, Object> getUserConfig(@Param("userCode") String userCode);
// 采用 XML的方式编写动态sql,该方式必须在配置文件中引入XML,接口不必引入,
// XML中的namespace 本身指定的就是接口,mybatis内部自动会处理
UserInfoVO getUserConfig2(@Param("userCode") String userCode);
}
/**
* TODO 空的 UserInfoMapper 接口, 用于测试只配置XML方法,能不能使用
*
* @author LinFH
* @version 1.0
* @date 2021-03-09 9:24
*/
public interface UserInfoMapper {
}
// 实体类
public class UserInfoVO implements Serializable {
/**
* Serializable id
*/
private static final long serialVersionUID = 2593256431070278531L;
private String userCode;
private String url;
private String userName;
private String password;
// setter getter toString 省略
}
4、mapper.xml配置文件
UserInfoDao.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="com.fagejiang.dao.UserInfoDao">
<select id="getUserConfig2" resultType="com.fagejiang.model.UserInfoVO">
select user_code AS userCode, url, user_name AS userName, password
FROM user_config WHERE user_code = #{userCode}
</select>
</mapper>
UserInfoMapper.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="com.fagejiang.dao.UserInfoMapper">
<select id="getUserConfig" resultType="com.fagejiang.model.UserInfoVO">
select user_code AS userCode, url, user_name AS userName, password
FROM user_config WHERE user_code = #{userCode}
</select>
</mapper>
5、测试实战
/**
* TODO
*
* @author 发哥讲Java
* @version 1.0
* @date 2021-03-09 9:06
*/
//mybatis集成使用流程
//1、引入mybatis的jar包
//2、配置核心mybatis-config的配置文件,包含:数据源、事务、mapper接口映射路径
//3、需要xxxSqlMapper文件:sql数据 orm
//4、使用mybatis操作
public class TestMyBatis {
SqlSessionFactory sessionFactory;
SqlSession session;
@Before
public void before() throws IOException {
// 1、获取 InputStream 配置文件流
String resource = "mybatis/mybatis-config.xml";
final InputStream inputStream = Resources.getResourceAsStream(resource);
// 2、获取 SqlSessionFactory
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3、获取 SqlSession
session = sessionFactory.openSession();
}
/**
* 扩展:
* // 加载 mapper 的方式 有俩种:
* // 1、 java程序 在configuration 中使用addMapper方法
* // 2 在mybatis-config.xml配置文件中,在<mappers>标签中增加<mapper>
* final Configuration configuration = sessionFactory.getConfiguration();
* configuration.addMapper(UserInfoDao.class);
*/
@Test
public void userInfoDao() {
// 4、操作Mapper接口
final UserInfoDao userInfoDao = session.getMapper(UserInfoDao.class);
final Map<String, Object> test0 = userInfoDao.getUserConfig("test");
System.out.println("test0 = " + test0);
final UserInfoVO test = userInfoDao.getUserConfig2("test");
System.out.println("test = " + test);
}
@Test
public void testUserInfoMapperByXML() {
// UserInfoMapper 是一个空接口
final UserInfoMapper userInfoMapper = session.getMapper(UserInfoMapper.class);
System.out.println("userInfoMapper = " + userInfoMapper);
// 全路径执行方法
final UserInfoVO test = session.selectOne("com.fagejiang.dao.UserInfoMapper.getUserConfig", "test");
System.out.println("test = " + test);
}
@After
public void close() {
if (session != null)
session.close();
}
}
6、数据库表结构:
CREATE TABLE `user_config` (
`user_code` varchar(30) NOT NULL,
`url` varchar(200) NOT NULL,
`user_name` varchar(60) NOT NULL,
`password` varchar(60) DEFAULT NULL,
PRIMARY KEY (`user_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `zswz`.`user_config`(`user_code`, `url`, `user_name`, `password`) VALUES ('test', 'jdbc:mysql://192.168.0.100:3306/faegjiang', 'root', 'root');
关注公众号,点击关于我,加入QQ群,私聊群主可以联系到我哦,群文件有Java面试以及框架如何使用pdf等免费资源!!!
备注:如需搬迁或者转载,请备注原本链接