MyBatis 系列 --- 001 新手入门
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射
。
1.安装
方法1:下载并导入MyBatis的jar包(mybatis-3.5.2.jar
)。
方法2:Maven项目可以直接在pom.xml 文件中添加以下dependency代码。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
2.简单Maven项目体验Mybatis
第一步:项目准备工作
1.准备MySQL数据库,数据库project_mybatis,表t_user,两条数据。
2.创建简单Maven项目
创建之前建议先进行Maven配置
,点击会跳转。
3.配置pom.xml,在文件中添加以下代码。
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- mysql连接依赖 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>connectorj</artifactId>
<version>5.1.12</version>
</dependency>
4.Maven项目文件配置
5.创建User.java。
package fun.andre.pojo;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第二步:映射器文件配置
映射器文件配置有两种方式,一种是使用XML文件,另一种是使用注解,无论什么方式都要有映射器接口文件。
映射器接口文件UserMapper.java
package fun.andre.mapper;
import org.apache.ibatis.annotations.Select;
import fun.andre.pojo.User;
public interface UserMapper {
// 使用XML文件配置映射器
public User selectUserbyXML(String username);
// 使用注解配置映射器
@Select("select * from t_user where username = #{username}")
public User selectUserbyAnnotation(String username);
}
第一种:使用XML文件
创建UserMapper.xml文件,然后配合UserMapper.java的selectUserbyXML方法使用。
<?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="fun.andre.mapper.UserMapper">
<select id="selectUserbyXML" resultType="fun.andre.pojo.User">
select * from t_user where username = #{username}
</select>
</mapper>
第二种:使用注解
// 使用注解配置映射器
@Select("select * from t_user where username = #{username}")
public User selectUserbyAnnotation(String username);
第三步:Mybatis配置
Mybatis配置包括数据池(DataSource),事务管理器(TransactionFactory),环境变量(Environment),映射器(Mapper),创建SqlSessionFactory,创建SqlSession
等等。
1.首先我们需要配置数据池DataSource和事务管理器TransactionFactory,然后才能生成环境变量Environment,使用环境变量完成Mybatis配置Configuration。
2.其次才能通过配置去生成SqlSessionFactory和SqlSession,完成对数据库的基本操作。
3.Mybatis配置主要有两种方式,一种是使用XML配置文件,另一种是使用Java代码。
方法1:使用XML配置文件mybatis-config.xml(推荐)。
在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">
<!-- mybatis配置文件 -->
<configuration>
<!-- 环境配置 -->
<!-- 加载名为development的环境变量 -->
<environments default="development">
<!-- 环境变量 -->
<environment id="development">
<!-- 事务管理器 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/project_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 映射器 -->
<mappers>
<mapper class="fun.andre.mapper.UserMapper"/>
</mappers>
</configuration>
方法2:使用Java代码。
package fun.andre.conf;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import fun.andre.mapper.UserMapper;
public class MybatisConfig {
// 获取一个初始化的SqlSessionFactory
public static SqlSessionFactory initSqlSessionFactory() {
// 获取数据源
DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver",
"jdbc:mysql://localhost:3306/project_mybatis", "root", "root");
// 获取JDBC事务管理器实例
TransactionFactory transactionFactory = new JdbcTransactionFactory();
// 获取环境变量
Environment environment = new Environment("development", transactionFactory, dataSource);
// 获取mybatis配置
Configuration configuration = new Configuration(environment);
// 添加映射器
configuration.addMapper(UserMapper.class);
// 获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
return sqlSessionFactory;
}
}
第四步:实现一个简单的查询功能
package fun.andre.learn_mybatis;
import java.io.IOException;
import java.io.InputStream;
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 fun.andre.conf.MybatisConfig;
import fun.andre.mapper.UserMapper;
import fun.andre.pojo.User;
public class App
{
public static void main( String[] args )
{
selectByXML();
System.out.println();
selectByJava();
}
public static void selectByXML() {
System.out.println("使用XML配置");
String resource = "fun/andre/conf/mybatis-config.xml";
// 使用输入流(InputStream)实例来加载xml配置文件
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取SqlSession
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
// 加载UserMapper映射
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 查询
User user = userMapper.selectUserbyXML("yzh1");
System.out.println(user.getPassword());
User user2 = userMapper.selectUserbyAnnotation("yzh2");
System.out.println(user2.getPassword());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void selectByJava() {
System.out.println("使用Java代码配置");
// 获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = MybatisConfig.initSqlSessionFactory();
// 获取SqlSession
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
// 加载UserMapper映射
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 查询
User user = userMapper.selectUserbyXML("yzh1");
System.out.println(user.getPassword());
User user2 = userMapper.selectUserbyAnnotation("yzh2");
System.out.println(user2.getPassword());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果如下:
3.知识补充
作用域(Scope)和生命周期
SqlSessionFactoryBuilder:SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)一旦创建了 SqlSessionFactory,就不再需要它了
SqlSessionFactory:SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
SqlSession
上一篇: Log4j日志输入到Flume
下一篇: log4j文件
推荐阅读
-
老子不信我学不会OpenGL系列!001 环境配置!
-
Spring Boot入门系列八(SpringBoot 整合Mybatis)
-
SpringBoot系列-整合Mybatis(XML配置方式)
-
SpringBoot系列-整合Mybatis(注解方式)
-
Hadoop系列001-大数据概论
-
Mybatis系列二:配置文件参数详解
-
mybatis基础系列(三)——动态sql
-
SpringBoot系列(五)Mybatis整合完整详细版
-
荐 BAT高频面试系列:设计模式+Spring源码+MyBatis+SpringMVC多线程+MySQL+Redis+框架使用+数据结构算法答案和总结
-
HBase 系列(十一)—— Spring/Spring Boot + Mybatis + Phoenix 整合